Not being a KWin developer, I have no idea what this does. Does it somehow adjust the colors on the screen? The options are confusing. "What does "Limited" mean? Limited to what? "Full" I would assume means "display all colors", but then what does "Automatic" do? Is that a "respect system's default settings" type of option? In general I think those are a bad idea because the user does not know what the system's default option is; when the system's active state is to display the full RGB range, then the combobox should show "Full" (assuming that's what it does).
The UI needs work here. What is this feature, what does it do, why would I want to use it, and what do its options mean?
The option is, similar to the problem it's supposed to solve, a bit of a mess :(
There's a bunch of displays, primarily but not exclusively older TVs, that require their input color values to go from 16 to 235 instead of 0 to 255. That's the "limited" option. The Full option is what it sounds like, it uses the full color from 0 to 255.
The Automatic option is where the kernel is using some heuristic in order to "find out" what the display wants. While there is some (rather stale) development at https://gitlab.freedesktop.org/drm/amd/-/issues/476 about this option, currently we sadly don't get any feedback whatsoever on what the kernel is really doing, and the kernels guess isn't all that reliable.
The only way we can more or less reliably know what it does is by setting the option explicitly ourselves... but always setting it to "Full" by default would likely result in a broken default state for even more users.
I'm not sure on how to present options like this that are far from self explanatory tbh. It's made worse by the fact that we're bound to gain a few more options in the future - color depth, HDR, gamma and maybe even more. Something like an "advanced" page per output with a short description per option could be useful, both for explaining what the things do and for not making the KCM too big and overwhelming.
For now maybe a tooltip could help? Some sort of explanation would be useful for VRR and Overscan, too.
It seems like we have three classes of display adjustment settings:
1. Settings to enable or disable features of the display hardware (refresh rate/VRR, HDR, color depth)
2. Settings to work around limitations or bugs of the display hardware (overscan, RGB range)
3. Settings to alter the display parameters according to aesthetic preferences (scaling, gamma)
I would suggest that we explicitly put settings in class #2 on separate page of the KCM, as they are infrequently or never used, depending on the user's hardware. Then there will be plenty of room to add some explanatory text beneath each option.
I would also suggest that we reduce the prominence of settings in class #1. Most people want display-specific features on by default (or else they would not have bought a display with those features) so I think it's safe to hide them away too. Possible on the same page as the #2s.
This leaves settings in class #3 as the ones we want to give more visual weighting to, because those are the ones most related to the user's subjective preferences.
Does that make sense to you?
As for this particular option, if there was more space to play with, we could have the UI laid out with explanatory messages inline like this:
RGB range: (o) Automatic
Let the system choose this display's supported color range.
( ) Limited
Use this option only if you know your display is limited to
a 16-235 RGB color range, but the "Automatic" mode
inappropriately chose the full range.
( ) Full
Use this option only if you know your display supports the
full 0-255 RGB color range but the "Automatic" mode
inappropriately chose the limited range.
That would be kinda wordy and cumbersome, but I don't see a lot of better ways to explain such an esoteric and technical feature.
Git commit 275cdc0d3548a006ec6a4c9796392bb2c86aba2a by Xaver Hugl.
Committed on 03/04/2022 at 21:46.
Pushed by ngraham into branch 'master'.
KCM: Explain what overscan and rgb range do
M +37 -20 kcm/package/contents/ui/OutputPanel.qml