[mutter] get-state: Move printing functions into main MonitorConfig class
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] get-state: Move printing functions into main MonitorConfig class
- Date: Thu, 28 Jul 2022 09:37:34 +0000 (UTC)
commit d3b26a59145f681ea284ad99833d52619e85ebaa
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date: Fri Jun 3 19:08:29 2022 +0200
get-state: Move printing functions into main MonitorConfig class
Data should then be parsed in proper structures that would be used for
both printing and changing them for re-configuring the screen
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2448>
tools/get-state.py | 230 +++++++++++++++++++++++++++--------------------------
1 file changed, 117 insertions(+), 113 deletions(-)
---
diff --git a/tools/get-state.py b/tools/get-state.py
index e4c47069ca..9e941b084a 100755
--- a/tools/get-state.py
+++ b/tools/get-state.py
@@ -37,6 +37,122 @@ class MonitorConfig:
def get_current_state(self) -> GLib.Variant:
raise NotImplementedError()
+ def parse_data(self):
+ """TODO: add data parser so that can be used for reconfiguring"""
+
+ def print_data(self, level, is_last, lines, data):
+ if is_last:
+ link = '└'
+ else:
+ link = '├'
+ padding = ' '
+
+ if level >= 0:
+ indent = level
+ buffer = f'{link:{padding}>{indent * 4}}──{data}'
+ buffer = list(buffer)
+ for line in lines:
+ if line == level:
+ continue
+ index = line * 4
+ if line > 0:
+ index -= 1
+ buffer[index] = '│'
+ buffer = ''.join(buffer)
+ else:
+ buffer = data
+
+ print(buffer)
+
+ if is_last and level in lines:
+ lines.remove(level)
+ elif not is_last and level not in lines:
+ lines.append(level)
+
+ def print_properties(self, level, lines, properties):
+ property_list = list(properties)
+
+ self.print_data(level, True, lines,
+ f'Properties: ({len(property_list)})')
+ for property in property_list:
+ is_last = property == property_list[-1]
+ self.print_data(level + 1, is_last, lines,
+ f'{property} ⇒ {properties[property]}')
+
+ def print_current_state(self, short):
+ variant = self.get_current_state()
+
+ print('Serial: {}'.format(variant[0]))
+ print()
+ print('Monitors:')
+ monitors = variant[1]
+ lines = []
+ for monitor in monitors:
+ is_last = monitor == monitors[-1]
+ spec = monitor[0]
+ modes = monitor[1]
+ properties = monitor[2]
+ self.print_data(0, is_last, lines, 'Monitor {}'.format(spec[0]))
+ self.print_data(
+ 1, False, lines, f'EDID: vendor: {spec[1]}, product: {spec[2]}, serial: {spec[3]}')
+
+ mode_count = len(modes)
+ if short:
+ modes = [mode for mode in modes if len(mode[6]) > 0]
+ self.print_data(1, False, lines,
+ f'Modes ({len(modes)}, {mode_count - len(modes)} omitted)')
+ else:
+ self.print_data(1, False, lines,
+ f'Modes ({len(modes)})')
+
+ for mode in modes:
+ is_last = mode == modes[-1]
+ self.print_data(2, is_last, lines, f'{mode[0]}')
+ self.print_data(3, False, lines,
+ f'Dimension: {mode[1]}x{mode[2]}')
+ self.print_data(3, False, lines, f'Refresh rate: {mode[3]}')
+ self.print_data(3, False, lines, f'Preferred scale: {mode[4]}')
+ self.print_data(3, False, lines,
+ f'Supported scales: {mode[5]}')
+
+ mode_properties = mode[6]
+ self.print_properties(3, lines, mode_properties)
+
+ self.print_properties(1, lines, properties)
+
+ print()
+ print('Logical monitors:')
+ logical_monitors = variant[2]
+ index = 1
+ for logical_monitor in logical_monitors:
+ is_last = logical_monitor == logical_monitors[-1]
+ properties = logical_monitor[2]
+ self.print_data(0, is_last, lines, f'Logical monitor #{index}')
+ self.print_data(1, False, lines,
+ f'Position: ({logical_monitor[0]}, {logical_monitor[1]})')
+ self.print_data(1, False, lines,
+ f'Scale: {logical_monitor[2]}')
+ self.print_data(1, False, lines,
+ f'Transform: {TRANSFORM_STRINGS.get(logical_monitor[3])}')
+ self.print_data(1, False, lines,
+ f'Primary: {logical_monitor[4]}')
+ monitors = logical_monitor[5]
+ self.print_data(1, False, lines,
+ f'Monitors: ({len(monitors)})')
+ for monitor in monitors:
+ is_last = monitor == monitors[-1]
+ self.print_data(2, is_last, lines,
+ f'{monitor[0]} ({monitor[1]}, {monitor[2]}, {monitor[3]})')
+
+ properties = logical_monitor[6]
+ self.print_properties(1, lines, properties)
+
+ index += 1
+
+ properties = variant[3]
+ print()
+ self.print_properties(-1, lines, properties)
+
class MonitorConfigDBus(MonitorConfig):
def __init__(self):
@@ -86,118 +202,6 @@ class MonitorConfigFile(MonitorConfig):
return GLib.variant_parse(self.CONFIG_VARIANT_TYPE, self._data)
-def print_data(level, is_last, lines, data):
- if is_last:
- link = '└'
- else:
- link = '├'
- padding = ' '
-
- if level >= 0:
- indent = level
- buffer = f'{link:{padding}>{indent * 4}}──{data}'
- buffer = list(buffer)
- for line in lines:
- if line == level:
- continue
- index = line * 4
- if line > 0:
- index -= 1
- buffer[index] = '│'
- buffer = ''.join(buffer)
- else:
- buffer = data
-
- print(buffer)
-
- if is_last and level in lines:
- lines.remove(level)
- elif not is_last and level not in lines:
- lines.append(level)
-
-def print_properties(level, lines, properties):
- property_list = list(properties)
-
- print_data(level, True, lines, f'Properties: ({len(property_list)})')
- for property in property_list:
- is_last = property == property_list[-1]
- print_data(level + 1, is_last, lines,
- f'{property} ⇒ {properties[property]}')
-
-
-def print_current_state(monitor_config, short):
- variant = monitor_config.get_current_state()
-
- print('Serial: {}'.format(variant[0]))
- print()
- print('Monitors:')
- monitors = variant[1]
- lines = []
- for monitor in monitors:
- is_last = monitor == monitors[-1]
- spec = monitor[0]
- modes = monitor[1]
- properties = monitor[2]
- print_data(0, is_last, lines, 'Monitor {}'.format(spec[0]))
- print_data(
- 1, False, lines, f'EDID: vendor: {spec[1]}, product: {spec[2]}, serial: {spec[3]}')
-
- mode_count = len(modes)
- if short:
- modes = [mode for mode in modes if len(mode[6]) > 0]
- print_data(1, False, lines,
- f'Modes ({len(modes)}, {mode_count - len(modes)} omitted)')
- else:
- print_data(1, False, lines,
- f'Modes ({len(modes)})')
-
- for mode in modes:
- is_last = mode == modes[-1]
- print_data(2, is_last, lines, f'{mode[0]}')
- print_data(3, False, lines, f'Dimension: {mode[1]}x{mode[2]}')
- print_data(3, False, lines, f'Refresh rate: {mode[3]}')
- print_data(3, False, lines, f'Preferred scale: {mode[4]}')
- print_data(3, False, lines, f'Supported scales: {mode[5]}')
-
- mode_properties = mode[6]
- print_properties(3, lines, mode_properties)
-
- print_properties(1, lines, properties)
-
- print()
- print('Logical monitors:')
- logical_monitors = variant[2]
- index = 1
- for logical_monitor in logical_monitors:
- is_last = logical_monitor == logical_monitors[-1]
- properties = logical_monitor[2]
- print_data(0, is_last, lines, f'Logical monitor #{index}')
- print_data(1, False, lines,
- f'Position: ({logical_monitor[0]}, {logical_monitor[1]})')
- print_data(1, False, lines,
- f'Scale: {logical_monitor[2]}')
- print_data(1, False, lines,
- f'Transform: {TRANSFORM_STRINGS.get(logical_monitor[3])}')
- print_data(1, False, lines,
- f'Primary: {logical_monitor[4]}')
- monitors = logical_monitor[5]
- print_data(1, False, lines,
- f'Monitors: ({len(monitors)})')
- for monitor in monitors:
- is_last = monitor == monitors[-1]
- print_data(2, is_last, lines,
- f'{monitor[0]} ({monitor[1]}, {monitor[2]}, {monitor[3]})')
-
- properties = logical_monitor[6]
- print_properties(1, lines, properties)
-
- index += 1
-
- properties = variant[3]
- print()
- print_properties(-1, lines, properties)
-
-
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Get display state')
parser.add_argument('--file', metavar='FILE', type=str, nargs='?',
@@ -217,4 +221,4 @@ if __name__ == '__main__':
else:
monitor_config = MonitorConfigDBus()
- print_current_state(monitor_config, short=args.short)
+ monitor_config.print_current_state(short=args.short)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]