Commit graph

20665 commits

Author SHA1 Message Date
Robert Müller f77af29094 Add text cursor setting to always render caret (disable blinking)
Add flag to temporarily cause the caret to not blink, so the caret can be rendered without blinking after it has been moved, which greatly improves usability.
2023-04-23 15:00:26 +02:00
Robert Müller 08b0a03ca4 Render selection in front of text instead of behind it
Makes the text selection easier to see, especially when the text selection height is lower than normal.

Change text selection color to light grey instead of blue.
2023-04-23 15:00:25 +02:00
Robert Müller ca90d83c10 Allow adjusting height factor of text selection rectangle
Add `CTextCursor::m_SelectionHeightFactor` setting to adjust the height of the text selection rectangle. For example a value of `0.5f` means that the selection rectangle has half its normal height while still being aligned at the same bottom position.
2023-04-23 15:00:25 +02:00
Robert Müller d30ebf33e5 Use dynamic size buffer in teehistorian tests instead of CPacker
`CPacker` is simply used as a byte buffer in the teehistorian tests. When the number of UUIDs is increased (in the future or in downstream projects) the tests will start to fail due to the buffer size being limited to 2048 bytes. This is fixed by using an `std::vector<unsigned char>` instead.
2023-04-23 12:40:21 +02:00
bors[bot] facbcfc391
Merge #6527
6527: Fix `NET_MAX_CHUNKHEADERSIZE` `5` -> `3` r=def- a=ChillerDragon

Probably has no big impact but 5 is just wrong.
Was also casually fixed in upstream.

c2e5771a15 (diff-706d36dc3648350992fd7fb372d2461cbddcec7ac79f1f905f329ada2bcda814L49)

<!-- What is the motivation for the changes of this pull request? -->

<!-- Note that builds and other checks will be run for your change. Don't feel intimidated by failures in some of the checks. If you can't resolve them yourself, experienced devs can also resolve them before merging your pull request. -->

## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2023-04-23 10:24:59 +00:00
ChillerDragon ae41ff3fb3 Fix NET_MAX_CHUNKHEADERSIZE 5 -> 3
Probably has no big impact but 5 is just wrong.
Was also casually fixed in upstream.

c2e5771a15 (diff-706d36dc3648350992fd7fb372d2461cbddcec7ac79f1f905f329ada2bcda814L49)
2023-04-23 11:51:34 +02:00
bors[bot] 15620354b9
Merge #6521
6521: Minor refactoring of engine input r=Chairn a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [X] Considered possible null pointers and out of bounds array indexing
- [X] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-22 18:43:30 +00:00
bors[bot] 87f4f4fc6b
Merge #6524
6524: Refactor `CEditorMap::CMapInfo` r=def- a=Robyt3

Reduce duplicate code. Make code more similar to upstream.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-22 16:39:23 +00:00
Robert Müller 001d11d9ed Refactor CEditorMap::CMapInfo
Reduce duplicate code. Make code more similar to upstream.
2023-04-22 16:46:10 +02:00
Robert Müller c9baa5f0d6 Remove dead code 2023-04-21 18:47:44 +02:00
Robert Müller 6f033e41ba Use '\0' instead of 0 for chars 2023-04-21 18:47:44 +02:00
Robert Müller 09462cff67 Use KEY_FIRST and KEY_UNKNOWN instead of 0 2023-04-21 18:47:44 +02:00
Robert Müller c959665226 Use nullptr instead of 0, 0x0 and NULL 2023-04-21 18:44:49 +02:00
Robert Müller adc813493a Remove unused FLAG_REPEAT 2023-04-21 18:44:49 +02:00
Robert Müller ecc49a699f Use size_t for number of input events 2023-04-21 18:44:49 +02:00
Robert Müller 2b7f054590 Use const reference to pass CEvent objects
The size of the `CEvent` class is 140 bytes, so it's more efficient to pass objects by reference.
2023-04-21 18:44:48 +02:00
Robert Müller 8b26fa0bc3 Assert instead of returning empty event on invalid index 2023-04-21 18:44:48 +02:00
bors[bot] cdd19beee4
Merge #6437
6437: Make team kills condensed in killfeed r=heinrich5991 a=VoxelDoesCode

For those who still have the killfeed on, I wanted to modernize it, by having team kills become one line instead of a bunch!

![image](https://user-images.githubusercontent.com/95713843/226060109-ed74c2f6-1289-4247-81dc-1725428ddf59.png)
## Checklist

- [x] Tested the change ingame
- [x] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: VoxelDoesCode <dante_n_cedroni@hotmail.com>
2023-04-21 10:37:40 +00:00
VoxelDoesCode 049d89ca41 Simplify NetMsg even more, with help from Fokko
Quick changes

Add m_First

one more thing

fokko pointed this out at 3 am

Final push
2023-04-18 07:51:44 -04:00
bors[bot] 391c127cb3
Merge #6515
6515: Add OnNewSnapshot to component hooks r=heinrich5991 a=ChillerDragon

Waste some clock cycles on zero lines code removed :D
Downstream client maintainers will love it tho 

## Checklist

- [x] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [x] Considered possible null pointers and out of bounds array indexing
- [x] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
2023-04-18 11:33:14 +00:00
bors[bot] a36e81532f
Merge #6516
6516: More minor cleanup and enhancement of the text render r=def- a=Robyt3

More preparation to port lineinput and IME from upstream.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-15 17:07:15 +00:00
Robert Müller 928d278d0c Rename DefaultSelectionColor for consistency
The other methods also start with `Text`.
2023-04-15 16:58:33 +02:00
Robert Müller ea058d9d2e Replace CharacterCounter with existing pCursor->m_GlyphCount
The separate `CharacterCounter` variable is not necessary, as the same value is already tracked by `pCursor->m_GlyphCount`.
2023-04-15 16:58:05 +02:00
Robert Müller 680de35cab Add STextBoundingBox::MoveBy convenience function 2023-04-15 16:49:53 +02:00
Robert Müller 49a1896389 Add STextBoundingBox::Size convenience function 2023-04-15 16:49:53 +02:00
Robert Müller a160364b77 Add default parameters to Text and TextEx 2023-04-15 16:49:53 +02:00
Robert Müller f0c295b2d3 Add length check in AppendTextContainer
Allow `Length` parameter to be longer than maximum string length.
2023-04-15 16:49:53 +02:00
Robert Müller fe40048ca8 Remove unnecessary SetRenderFlags calls
Setting the render flags here is unnecessary, as the render flags are already set identically inside `TextEx`.
2023-04-15 16:49:27 +02:00
Robert Müller a2c9b752e0 Remove unused CListBox::FilterMatches 2023-04-15 13:07:40 +02:00
ChillerDragon 7c2c5aeee7 Add OnNewSnapshot to component hooks 2023-04-15 12:47:33 +02:00
bors[bot] 60441b4e27
Merge #6514
6514: Fix incorrect chat background rect width calculation r=Jupeyy a=Robyt3

The calculation of `m_LongestLineWidth` was adjusted in bf1e757581 so it's really the width of the line and not the X position of the end of the line. This caused the background rects of chat messages to be rendered incorrectly.

Screenshots:
- Normal
   - Before: ![screenshot_2023-04-15_11-56-38](https://user-images.githubusercontent.com/23437060/232208095-cc2ace57-244e-4345-b489-36a4bb70b6a7.png)
   - After: ![screenshot_2023-04-15_12-18-07](https://user-images.githubusercontent.com/23437060/232208119-cff59371-ef05-400f-9d32-8f9f335d05c4.png)
- With scoreboard open:
   - Before: ![screenshot_2023-04-15_11-56-41](https://user-images.githubusercontent.com/23437060/232208257-6bb54471-d746-43f1-a248-98576183ae64.png)
   - After: ![screenshot_2023-04-15_12-18-11](https://user-images.githubusercontent.com/23437060/232208229-b193f16f-5a60-44d8-817b-fffe806ff913.png)

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-15 10:45:40 +00:00
Robert Müller c7cea0a37f Fix incorrect chat background rect width calculation
The calculation of `m_LongestLineWidth` was adjusted in bf1e757581 so it's really the width of the line and not the X position of the end of the line. This caused the background rects of chat messages to be rendered incorrectly.
2023-04-15 12:17:49 +02:00
bors[bot] b1f2862cff
Merge #6511
6511: Refactor vertical alignment of UI labels, add more text render convenience functions r=def- a=Robyt3

Should change layout only very little.

### Notes if you are porting this downstream

`SLabelProperties::m_AlignVertically` is removed. The usage was previously confusing and inconvenient, as the `SLabelProperties` parameter object was necessary to change the vertical alignment. If `m_AlignVertically == 1` (which is the default value) then the text is vertically centered and this works correctly also for multi-line text, assuming that the correct rect height is specified and the previous fixes have been applied (#6507). If `m_AlignVertically == 0` then the text is somehow more correctly aligned for some UI elements that span only one line in cases where the previous option doesn't work correctly. Other `m_AlignVertically` values besides `0` and `1` are not used.

With this PR most text is centered vertically by setting `TEXTALIGN_MIDDLE`. The UI code always uses shorthand constants for combinations of horizontal and vertical alignment, e.g. `TEXTALIGN_MC` for `TEXTALIGN_MIDDLE | TEXTALIGN_CENTER`. To port your own code, I'd recommend replacing all of your usages of `TEXTALIGN_LEFT`, `TEXTALIGN_CENTER` and `TEXTALIGN_RIGHT` with `TEXTALIGN_ML`, `TEXTALIGN_MC` and `TEXTALIGN_MR` respectively. Remove all usages of `m_AlignVertically` and also the `SLabelProperties` variables for which only `m_AlignVertically` was changed. This means all text will be vertically centered and have the same horizontal alignment as before. For some labels the vertical centering does not work correctly though, so you'll have to visually check if any of the texts are misaligned and then manually adjust the alignment or the UI rect position and/or size.

## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-10 17:29:23 +00:00
bors[bot] 4d697c7be3
Merge #6509
6509: Fix client crash when spectating on server with missing game info r=def- a=Robyt3



## Checklist

- [X] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-10 17:08:19 +00:00
Robert Müller 301567507f Fix client crash when spectating on server with missing game info 2023-04-10 17:27:21 +02:00
Robert Müller 8f5708a882 Use TextBoundingBox for tooltip rendering
Calculate correct height for tooltip and apply consistent padding.

Ensure tooltip width and height do not exceed size of screen.
2023-04-10 17:22:10 +02:00
Robert Müller a6f9fdd6d5 Add function to get caret position to ITextRender
Add `CaretPosition` function to get position of text caret. Replace some existing usages of `TextWidth`, which would no longer work correctly for multi-line text.

Having this function is also useful when porting the upstream UI lineinput.
2023-04-10 17:22:10 +02:00
Robert Müller 9ad2f9f4df Add functions to get text bounding box to ITextRender
Add separate `STextBoundingBox` to describe text bounding box (same as on upstream). Add `GetBoundingBoxTextContainer` to get bounding box for a text container. Add `TextBoundingBox` function to get bounding box with old text render interface.

Using this function to get the bounding box width and height is cleaner than using `TextWidth`. This function additionally can get the bounding box X and Y position for convenience.

Some usages of `TextWidth` are replaced with `TextBoundingBox` to improve readability.

It will be useful to have these functions when porting the upstream UI lineinput.
2023-04-10 17:22:10 +02:00
Robert Müller 8507a651d1 Refactor vertical alignment in UI
Add separate constants `TEXTALIGN_TOP`, `TEXTALIGN_MIDDLE` and `TEXTALIGN_BOTTOM` for vertical alignment.

Add shorthand constants for all possible combinations of horizontal and vertical alignment, e.g. `TEXTALIGN_MC` for `TEXTALIGN_MIDDLE | TEXTALIGN_CENTER`.

Replace usage of `SLabelProperties::m_AlignVertically` with these constants in all menu and editor code for more convenient and versatile alignment of text. Use combined horizontal-vertical alignment constants for all existing labels. Manually adjust layout for some elements which were initially misaligned with the new implementation.

Refactoring:

- Use `CORNER_NONE` instead of `0`.
- Improve some `CUIRect` variables names and usage.
2023-04-10 17:22:09 +02:00
bors[bot] 9383fd2066
Merge #6508
6508: Use `Localizable` instead of comment with `Localize` r=Jupeyy a=Robyt3



## Checklist

- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-10 15:14:11 +00:00
Robert Müller 76ad9e2e3b Use Localizable instead of comment with Localize 2023-04-10 16:43:53 +02:00
Robert Müller bf1e757581 Fix incorrect text width calculation when cursor not starting at X=0
Previously when calculating `m_LongestLineWidth` for a `CTextCursor` the position `m_StartX` of the cursor was always zero, because `m_LongestLineWidth` was only used to calculate the text width with a non-rendered cursor aligned at (0, 0).

To ensure that the calculation is correct also when the text cursor is not positioned at X=0, the width calculation must be offset by the start position.
2023-04-10 16:06:17 +02:00
bors[bot] 5b4e55ad14
Merge #6507
6507: Fix several issues with the text rendering r=def- a=Robyt3

Screenshots:

- Motd:
  - Before: 
![Motd old](https://user-images.githubusercontent.com/23437060/230790308-10fce044-d4fc-45eb-9760-0e5bb5844f0d.png)
  - After:
![Motd new](https://user-images.githubusercontent.com/23437060/230790311-8773b250-d284-4fd4-ae5d-977cc79ac3f0.png)
- Skin (1920x1080):
  - Before:
![Skin 1920x1080 old](https://user-images.githubusercontent.com/23437060/230790313-1dfa798f-752f-4fcd-ab51-dcbeb1500175.png)
  - After:
![Skin 1920x1080 new](https://user-images.githubusercontent.com/23437060/230790316-36fc56b1-6ac0-4a35-bf1c-46f3298c9d10.png)
- Skin (1280x1024):
  - Before:
![Skin 1280x1024 old](https://user-images.githubusercontent.com/23437060/230790321-40cb53ec-fffd-4dc2-916e-55dc5cdf129a.png)
  - After:
![Skin 1280x1024 new](https://user-images.githubusercontent.com/23437060/230790322-92b2e49b-a30e-4b0a-b952-76845b813784.png)
- Message popup:
  - Before:
![MessagePopup old](https://user-images.githubusercontent.com/23437060/230790330-c63711f2-289d-4f7e-90cf-29103c8727ac.png)
  - After:
![MessagePopup new](https://user-images.githubusercontent.com/23437060/230790334-e989cd96-389e-4bf6-911f-138dcbd0d309.png)

## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)


Co-authored-by: Robert Müller <robytemueller@gmail.com>
2023-04-09 19:23:16 +00:00
Robert Müller 430e96346f Fix inconsistent text wrapping of popup labels
Round up the calculated text width to prevent inconsistent text wrapping in the popups in cases where the current text width is very close to the maximum line width.
2023-04-09 20:10:44 +02:00
Robert Müller 6decf14137 Use Text instead of TextEx for popup labels
To reduce duplicate code and ensure that the same flags are used with `TextWidth` and when actually rendering the text.
2023-04-09 20:10:44 +02:00
Robert Müller 9bb9c7ce6b Replace usages of TextLineCount with TextWidth
Calculate text height for popups with `TextWidth` instead of using `TextLineCount`, which can be incorrect if the aligned font size differs from the normal one.
2023-04-09 20:10:44 +02:00
Robert Müller 9693d4beac Fix vertical centering of multi-line UI labels
Also calculate text height in `TextWidth`.

Use calculated text height to verically center UI labels.

The text cursor flags (in particular, the `TEXTFLAG_STOP_AT_END` flag) must also be passed to `TextWidth`. Otherwise, for example, when `TEXTFLAG_STOP_AT_END` is missing, the wrong text height is calculated, as text is rendered over multiple lines instead of stopping at the end of the first line.

Closes #5396.
2023-04-09 20:10:09 +02:00
Robert Müller 07c59d130b Minor refactoring of DoLabel functions 2023-04-09 20:10:09 +02:00
Robert Müller 0ca6d06fba Fix incorrect text width calculation of multi-line text
For text spanning multiple lines `TextWidth` only returned the length of the last line instead of the length of the longest line.
2023-04-09 20:10:09 +02:00
Robert Müller ad69d62015 Fix long words being printed over maximum line width
When the text render encounters long words which must be broken up, ensure that the words do not exceed the maximum line width.

Closes #6354.
2023-04-09 20:09:52 +02:00