gdctl: Allow setting color mode
This allows configuring a monitor to enter BT.2100 a.k.a. HDR mode. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4192>
This commit is contained in:
parent
53ae155e03
commit
b674048184
@ -134,6 +134,12 @@ MONITOR OPTIONS
|
|||||||
|
|
||||||
Set the mode of the monitor.
|
Set the mode of the monitor.
|
||||||
|
|
||||||
|
``--color-mode``, ``-c``
|
||||||
|
|
||||||
|
Set the color mode of the monitor. Available color modes are ``default`` and
|
||||||
|
``bt2100``.
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
50
tools/gdctl
50
tools/gdctl
@ -296,6 +296,7 @@ class Monitor:
|
|||||||
properties: dict
|
properties: dict
|
||||||
current_mode: MonitorMode | None
|
current_mode: MonitorMode | None
|
||||||
preferred_mode: MonitorMode | None
|
preferred_mode: MonitorMode | None
|
||||||
|
color_mode: ColorMode | None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_variant(cls, variant):
|
def from_variant(cls, variant):
|
||||||
@ -320,6 +321,7 @@ class Monitor:
|
|||||||
)
|
)
|
||||||
|
|
||||||
display_name = properties.get("display-name", None)
|
display_name = properties.get("display-name", None)
|
||||||
|
color_mode = properties.get("color-mode", None)
|
||||||
|
|
||||||
return cls(
|
return cls(
|
||||||
connector=connector,
|
connector=connector,
|
||||||
@ -331,6 +333,7 @@ class Monitor:
|
|||||||
current_mode=current_mode,
|
current_mode=current_mode,
|
||||||
preferred_mode=preferred_mode,
|
preferred_mode=preferred_mode,
|
||||||
display_name=display_name,
|
display_name=display_name,
|
||||||
|
color_mode=color_mode,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -715,6 +718,9 @@ def create_logical_monitor(monitors_state, layout_mode, logical_monitor_args):
|
|||||||
)
|
)
|
||||||
|
|
||||||
monitor.mode = mode
|
monitor.mode = mode
|
||||||
|
monitor.color_mode = ColorMode.maybe_from_string(
|
||||||
|
monitor_args.get("color_mode", None)
|
||||||
|
)
|
||||||
|
|
||||||
monitors.append(monitor)
|
monitors.append(monitor)
|
||||||
|
|
||||||
@ -836,10 +842,17 @@ def print_config(config):
|
|||||||
)
|
)
|
||||||
print_data(
|
print_data(
|
||||||
level=4,
|
level=4,
|
||||||
is_last=True,
|
is_last=not monitor.color_mode,
|
||||||
lines=lines,
|
lines=lines,
|
||||||
data=f"Mode: {monitor.mode.name}",
|
data=f"Mode: {monitor.mode.name}",
|
||||||
)
|
)
|
||||||
|
if monitor.color_mode:
|
||||||
|
print_data(
|
||||||
|
level=4,
|
||||||
|
is_last=True,
|
||||||
|
lines=lines,
|
||||||
|
data=f"Color mode: {monitor.color_mode}",
|
||||||
|
)
|
||||||
|
|
||||||
index += 1
|
index += 1
|
||||||
|
|
||||||
@ -1076,15 +1089,23 @@ class Config:
|
|||||||
layout_mode: LayoutMode
|
layout_mode: LayoutMode
|
||||||
|
|
||||||
def generate_monitor_tuples(self, monitors):
|
def generate_monitor_tuples(self, monitors):
|
||||||
return [
|
tuples = []
|
||||||
|
for monitor in monitors:
|
||||||
|
options = {}
|
||||||
|
if monitor.color_mode:
|
||||||
|
options["color-mode"] = GLib.Variant(
|
||||||
|
"u", monitor.color_mode.value
|
||||||
|
)
|
||||||
|
|
||||||
# Variant type: (ssa{sv})
|
# Variant type: (ssa{sv})
|
||||||
(
|
tuples.append(
|
||||||
monitor.connector,
|
(
|
||||||
monitor.mode.name,
|
monitor.connector,
|
||||||
{},
|
monitor.mode.name,
|
||||||
|
options,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
for monitor in monitors
|
return tuples
|
||||||
]
|
|
||||||
|
|
||||||
def generate_logical_monitor_tuples(self):
|
def generate_logical_monitor_tuples(self):
|
||||||
tuples = []
|
tuples = []
|
||||||
@ -1232,6 +1253,11 @@ class TransformCompleter(NamedEnumCompleter):
|
|||||||
super().__init__(Transform)
|
super().__init__(Transform)
|
||||||
|
|
||||||
|
|
||||||
|
class ColorModeCompleter(NamedEnumCompleter):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(ColorMode)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = GdctlParser(
|
parser = GdctlParser(
|
||||||
description="Display control utility",
|
description="Display control utility",
|
||||||
@ -1333,6 +1359,14 @@ if __name__ == "__main__":
|
|||||||
help="Monitor mode",
|
help="Monitor mode",
|
||||||
type=str,
|
type=str,
|
||||||
).completer = MonitorModeCompleter()
|
).completer = MonitorModeCompleter()
|
||||||
|
monitor_parser.add_argument(
|
||||||
|
"--color-mode",
|
||||||
|
"-c",
|
||||||
|
action=AppendToSubGroup,
|
||||||
|
help="Color mode",
|
||||||
|
choices=[str(color_mode) for color_mode in list(ColorMode)],
|
||||||
|
type=str,
|
||||||
|
).completer = ColorModeCompleter()
|
||||||
logical_monitor_parser.add_argument(
|
logical_monitor_parser.add_argument(
|
||||||
"--primary",
|
"--primary",
|
||||||
"-p",
|
"-p",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user