Commit graph

17232 commits

Author SHA1 Message Date
Robert Müller 7ce9fd9949 Refactor UI color picker
- Improve variable names.
- Use `ColorHSVA` instead of `unsigned int`.
- Allow `m_pHslaColor` to be `nullptr` when HSLA color unused.
2023-06-14 20:17:27 +02:00
bors[bot] b938202ade
Merge #6742
6742: Run MysqlUninit later (fixes #6571) r=def- a=def-

Otherwise the mysql thread can still be running in the background while we uninitialize it.

## 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: Dennis Felsing <dennis@felsin9.de>
2023-06-14 11:35:21 +00:00
Dennis Felsing 021837fa60 thread_init_and_detach shouldn't return thread since you can't access it anymore anyway 2023-06-14 13:19:36 +02:00
Dennis Felsing 7e82bf3a53 Run MysqlUninit later (fixes #6571) 2023-06-14 13:12:48 +02:00
bors[bot] 6224bc2630
Merge #6741
6741: Actually use AntibotFlags r=heinrich5991 a=def-

## 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: Dennis Felsing <dennis@felsin9.de>
2023-06-14 09:29:12 +00:00
Dennis Felsing 35e4a2b311 Actually use AntibotFlags 2023-06-14 11:25:26 +02:00
bors[bot] 6cfac056ec
Merge #6740
6740: Don't remove the `.map` suffix in editor file dialog r=def- a=Robyt3

This otherwise breaks file loading because the file extension is expected in this input buffer even when the input is not rendered.

Regression from #6736.

## 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-06-13 23:44:52 +00:00
bors[bot] 0d45120f5c
Merge #6739
6739: Add templated `str_append` function for arrays with fixed size, add tests, ensure proper buffer size is used with DDNet server filter 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
- [X] 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-06-13 23:12:18 +00:00
Robert Müller 090433bc5e Don't remove the .map suffix in editor file dialog
This otherwise breaks file loading because the file extension is expected in this input buffer even when the input is not rendered.

Regression from #6736.
2023-06-14 00:43:35 +02:00
Robert Müller 3ad581aeb8 Ensure proper buffer size is used with DDNet server filter
By passing the buffer size when calling `DDNetFilterAdd` and `DDNetFilterRem`.

Mark functions and pointer parameters as `const`.
2023-06-14 00:04:01 +02:00
Robert Müller 3069733b86 Add tests for str_append and for templated str_copy 2023-06-14 00:04:01 +02:00
Robert Müller 410ccda1c7 Move templated str_copy next to basic function
The functions were only separated because we previously had a large `extern "C"` block.
2023-06-14 00:04:01 +02:00
Robert Müller 9a57def5a6 Add templated str_append function for arrays with fixed size 2023-06-14 00:04:01 +02:00
bors[bot] 183086700f
Merge #6737
6737: Refactor `str_copy` usages and buffer sizes in editor r=def- a=Robyt3

Use templated `str_copy` function in most cases to specify the correct buffer size.

Fixes two cases where the buffer size was hard-coded to a number.

Fix buffer size not being checked when copying auto mapper configuration name. Loading an auto mapper configuration with a name longer than 128 bytes could cause an out-of-bounds write.

Increase sizes of some text buffers that were potentially too small.

## 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-06-13 20:50:34 +00:00
bors[bot] fa57258df5
Merge #6736
6736: Fix editor save dialog entries not selectable with mouse anymore r=def- a=Robyt3

Regression from #6530.

## 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-06-13 20:18:53 +00:00
Robert Müller bbe9f23a9c Refactor str_copy usages and buffer sizes in editor
Use templated `str_copy` function in most cases to specify the correct buffer size.

Fixes two cases where the buffer size was hard-coded to a number.

Fix buffer size not being checked when copying auto mapper configuration name. Loading an auto mapper configuration with a name longer than 128 bytes could cause an out-of-bounds write.

Increase sizes of some text buffers that were potentially too small.
2023-06-13 20:45:51 +02:00
Robert Müller b13e8076dc Fix editor save dialog entries not selectable with mouse anymore
Regression from #6530.
2023-06-13 19:51:54 +02:00
bors[bot] 3cb0160399
Merge #6735
6735: Minor refactoring of `CUI` 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-06-12 18:05:58 +00:00
Robert Müller 40db5d3c1e Improve UI debug information
Move debug text from the top left to the bottom left, so it does not overlap with the other debug information.

Also render UI element address of next hot item.

Add labels for UI element addresses.
2023-06-12 19:48:54 +02:00
Robert Müller aa937d4fba Refactor CUI::Screen
Remove unnecessary temporary variables.

Remove unnecessary assignment of width and height values in constructor, which will always be overwritten.
2023-06-12 19:48:45 +02:00
Robert Müller 6eb30b00e2 Use nullptr instead of 0 2023-06-12 19:48:44 +02:00
Robert Müller b46a47f14b Remove unused active tooltip item variable 2023-06-12 19:48:42 +02:00
bors[bot] 4d0247a24c
Merge #6734
6734: Use `DoLabel` instead of `Text`/`TextEx` in menus, other minor refactoring of menus 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-06-11 20:36:46 +00:00
Robert Müller 2fb4a39e10 Refactor CMenus::RenderSettings
Use correct enum literal `SETTINGS_LENGTH` as array size for button containers instead of the `sizeof(apTabs)`, which does not consider the size of the array elements.

Use code for dynamic size calculation directly instead of putting it in comments.
2023-06-11 21:55:36 +02:00
Robert Müller 8d65e0ac34 Minor refactoring of settings menus
- Use `IGraphics::CORNER_NONE` instead of `0`.
- Remove redundant usage of `Localize` for an already localized string.
- Remove redundant `HSplitBottom` with zero size.
2023-06-11 21:55:36 +02:00
Robert Müller 16fd3401e2 Use DoLabel instead of Text/TextEx in menus
Reduce duplicate code for text alignment and automatic sizing.
2023-06-11 21:54:46 +02:00
bors[bot] 3040e3ada2
Merge #6732
6732: Split emoticon sending into nearby and global players r=def- a=Jupeyy

The reason for this rather overcomplicated solution is, that emotes are send to other players all the time. But just sending it to nearby players only would not work as the emoticon does not track animation time.
So sending the emoticon later would restart the emote client side.

A different fix, which we obviously don't want, is breaking compability with all older clients and move the emoticon into the snapshot.

I also changed the config vars to use milliseconds instead of seconds. I did not use ticks, since ticks are not a clear enough time unit.

**It is not clear if this will fix all network lags, as there might be other packets that also are sent to all players globally**

global means:
send them less often than nearby, but still send them. this makes players that are close to you but not in your view range still see your emote if they run into your view range with reasonably enough speed. We could also think about disabling global emoticons completely, if this fix is not good enough. the main idea was really that it doesn't look weird: e.g. if you start to spec a player and he has no emoticon

## 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: Jupeyy <jupjopjap@gmail.com>
2023-06-11 16:18:01 +00:00
Jupeyy 845ba50842 Split emoticon sending into nearby and global players 2023-06-11 13:31:50 +02:00
bors[bot] 6a53d72b35
Merge #6721
6721: Improve selection popups and dropdown menus, add dropdown menus to select screen and active controller r=def- a=Robyt3

Screenshots:
- Controls settings:
   - Before: 
![controls old](https://github.com/ddnet/ddnet/assets/23437060/8907c38a-d483-4766-84ad-49464b9760a0)
   - After: 
![controls new](https://github.com/ddnet/ddnet/assets/23437060/f021e961-ce90-4557-aef0-a1e1a4bc7ca4)
- Graphics settings (collapsed):
   - Before: 
![graphics_collapsed old](https://github.com/ddnet/ddnet/assets/23437060/d895c8d8-a72f-4da2-aa57-93d5f08be648)
   - After: 
![graphics_collapsed new](https://github.com/ddnet/ddnet/assets/23437060/e594a599-1210-4ba0-87f2-b2a824043dc4)
- Graphics settings (expanded):
   - Before: 
![graphics_expanded old](https://github.com/ddnet/ddnet/assets/23437060/cce1d8cb-4dff-4d43-a9f0-af2dbfeff27d)
   - After: 
![graphics_expanded_1 new](https://github.com/ddnet/ddnet/assets/23437060/c99c24cb-3398-4a80-9b99-3281ed62f6a7)
![graphics_expanded_2 new](https://github.com/ddnet/ddnet/assets/23437060/83fc2522-0da6-40d8-ad2b-3e3159b74308)
![graphics_expanded_3 new](https://github.com/ddnet/ddnet/assets/23437060/b00b30c4-411b-43a0-97f0-ecd47ebea516)
- The maximum dropdown menu height is limited to 40% of the screen height. The content will begin to scroll if this is exceeded:
![scrolling](https://github.com/ddnet/ddnet/assets/23437060/ac576819-f24f-4fed-82cd-a05d87f9ad71)
- If there is not enough space below the dropdown button to open the dropdown menu popup, then the popup opens to the top instead:
![alignment](https://github.com/ddnet/ddnet/assets/23437060/2f61ea30-996d-4def-8f5d-300b5008c666)

## 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
- [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-06-10 14:01:38 +00:00
bors[bot] 5c3a3cefa6
Merge #6726
6726: Fix top alignment of some popup messages r=def- a=Robyt3

The popup message has to be top- and not middle-aligned in some popups:

- First launch
- Existing player for nickname
- Warning

Likely a regression introduced by #6511.

Before:

![screenshot_2023-06-09_14-23-56](https://github.com/ddnet/ddnet/assets/23437060/0a7250d4-4522-4924-b056-463eaa67f546)

After:

![screenshot_2023-06-09_14-23-21](https://github.com/ddnet/ddnet/assets/23437060/40776b1a-6571-4e8d-bb5a-6c11a5a5dbb9)

## 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-06-10 13:30:19 +00:00
bors[bot] dcf7234bb0
Merge #6730
6730: Try linking to ntdll (fixes #6725) r=Robyt3 a=def-

<!-- 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: Dennis Felsing <dennis@felsin9.de>
2023-06-10 12:57:27 +00:00
Dennis Felsing 2c03973dac Try linking to ntdll (fixes #6725) 2023-06-10 14:13:24 +02:00
Dennis Felsing 32b78f1a84
Merge pull request #6729 from Robyt3/CAnimState-Refactoring
Minor refactoring of `CAnimState` and tee rendering functions
2023-06-10 14:05:52 +02:00
Robert Müller 883fb8818c Minor refactoring of CAnimState and tee rendering functions
- Use `nullptr` instead of `0`.
- Remove dead code.
- Mark functions and pointers as `const` when possible.
- Remove unused argument of `CRenderTools::GetRenderTeeAnimScaleAndBaseSize` function.
- Copy tee render info when rendering emote wheel instead of modifying global render info.
- Fix names of static variables.
2023-06-10 13:10:26 +02:00
Dennis Felsing 80c32061a7
Merge pull request #6728 from Robyt3/Player-Undefined-Time-Variables
Fix undefined player vote/team change time
2023-06-10 11:30:56 +02:00
Robert Müller 1172be1f80 Fix undefined player vote/team change time
The time of the last kick vote and the time of the last team change are initially in an undefined state, which causes the kick vote and team change to fail due to the delay incorrectly being applied.

Closes #6723.
2023-06-10 10:23:27 +02:00
Robert Müller 7af1fe3b52 Fix top alignment of some popup messages
The popup message has to be top- and not middle-aligned in some popups:

- First launch
- Existing player for nickname
- Warning

Likely a regression introduced by #6511.
2023-06-09 14:22:21 +02:00
Robert Müller 5b3f6e8ffd Use dropdown menu to select game controller
Instead of using one button to cycle through all controllers.
2023-06-09 14:04:35 +02:00
Robert Müller 387a71ab0d Add dropdown to select screen and show screen name 2023-06-09 14:04:34 +02:00
Robert Müller a8b54192ab Use generic selection popup for drop down menus
Move `CMenus::RenderDropDown` to `CUI::DoDropDown` and refactor by using a generic selection popup to implement the drop down menu.

This improves the usability and layout, as the drop down is now rendered as a popup above the rest of the menu, instead of taking space from the menu that holds the drop down button. The latter could cause issues when several drop down menus are open at the same time and with drop down buttons at the bottom of the menu, as the drop down cannot scroll properly.
2023-06-09 14:04:34 +02:00
Robert Müller 082c8b8a7d Extend generic selection popup
- Support scrolling. Limit maximum height to 40% of screen height.
- Allow message to be empty.
- Use `std::vector` instead of `std::set` for entries to keep the user-defined order of entries.
- Add `m_SelectionIndex` in addition to `m_pSelection` to get selected item more conveniently for some use-cases.
- Make entry height, entry padding, entry spacing, font size, and popup width configurable.
- Allow alignment of selection popup with the top/bottom of another UI element.
- Support transparent selection buttons.
2023-06-09 14:04:20 +02:00
Robert Müller f0bb4a45d0 Allow adjusting popup border/background color
Add `SPopupMenuProperties` parameter object for `DoPopupMenu`.
2023-06-09 14:02:47 +02:00
bors[bot] 7b93e41d81
Merge #6722
6722: Add highlight color when hovering DDNet/KoG type/country filters 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-06-08 14:36:01 +00:00
Robert Müller bc70726b1c Add highlight color when hovering DDNet/KoG type/country filters 2023-06-08 16:10:58 +02:00
Robert Müller 60f56f4dce Support arbitrary number of type/country filter buttons 2023-06-08 16:10:28 +02:00
Robert Müller 09835ed342 Add scroll region parameter to disable right margin
In case that a margin on the right side already exists, this allows creating a symmetric margin around the scrollbar.
2023-06-08 12:52:35 +02:00
Robert Müller f16974d1a9 Extract CScrollRegion::HEIGHT_MAGIC_FIX
Currently this must be added when calculating the required height of a UI rect for a scroll region to get a perfect fit.

It is extracted into a constant so it can be used in other parts to get list boxes with the perfect size.
2023-06-08 12:52:35 +02:00
Robert Müller abfafa314a Add IGraphics::GetScreenName
To get the screen name for each screen index.
2023-06-08 12:52:34 +02:00
bors[bot] 6bffc858fd
Merge #6720
6720: Improve scrollbar option UI and settings, improve joystick settings UI especially on 5:4 and 4:3 resolutions  r=def- a=Robyt3

Screenshots (not an exhaustive list):
- Controls settings:
   - Before:
![controls old](https://github.com/ddnet/ddnet/assets/23437060/357928bd-760c-4345-90fc-6e89a18ca96d)
   - After:
![controls new](https://github.com/ddnet/ddnet/assets/23437060/36864c11-cd23-44c7-9a94-e1fb1790ece6)
- Controls settings (5:4):
   - Before:
![controls_5-4 old](https://github.com/ddnet/ddnet/assets/23437060/4940c770-cbfe-4881-983c-278f11861166)
   - After:
![controls_5-4 new](https://github.com/ddnet/ddnet/assets/23437060/481ae686-7853-4b05-8faa-4a08ae323419)
- General settings:
   - Before:
![general old](https://github.com/ddnet/ddnet/assets/23437060/21324b77-fe49-49fe-8e71-f828a0ed6119)
   - After:
![general new](https://github.com/ddnet/ddnet/assets/23437060/2deffb9a-3cc2-4d25-8a03-c3046843f582)
- Sound settings:
   - Before:
![sound old](https://github.com/ddnet/ddnet/assets/23437060/7278bdcb-52a6-4f33-83bb-2e29ededb1ef)
   - After:
![sound new](https://github.com/ddnet/ddnet/assets/23437060/a3c03ded-88ac-45d6-aace-c76fa77778d6)
- DDNet settings:
   - Before:
![ddnet old](https://github.com/ddnet/ddnet/assets/23437060/f624cde9-f026-4c71-9037-42eaeaccb5d9)
   - After:
![ddnet new](https://github.com/ddnet/ddnet/assets/23437060/6a866cac-3315-43db-82a1-2a6aeac023a5)



## Checklist

- [X] Tested the change ingame
- [X] Provided screenshots if it is a visual change
- [X] 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: Robert Müller <robytemueller@gmail.com>
2023-06-08 09:12:18 +00:00
Robert Müller 4c9230999c Use DoScrollbarOption instead of DoScrollbarH for settings
Reduce duplicate code for handling label format, value scaling and special infinity value.

The current value is now shown for all settings. Previously it was not shown for some settings, e.g. the sound volumes.

The infinity-value is now all the way on the right side of the settings scrollbars, which makes more sense, as the values get larger when going to the right. This is also more convenient, as previously it was necessary to pass the lowest value before going to infinity, which would e.g. temporarily lag the client when selecting a low refresh rate.

Use logarithmic scrollbar for sounds volumes.

Hide scrollbar options that are disabled by checkboxes consistently. Previously this was only done for some checkboxes.
2023-06-08 11:01:57 +02:00