mirror of
https://github.com/ralsina/xrandroll.git
synced 2024-11-21 10:32:23 +00:00
implemented guess_scale_mode and orientation parsing
This commit is contained in:
parent
ba7cf07550
commit
a66e69f5f6
@ -62,6 +62,7 @@ class Monitor:
|
||||
pos_y = 0
|
||||
enabled = False
|
||||
primary = False
|
||||
orientation = "normal"
|
||||
|
||||
def __init__(self, data):
|
||||
"""Initialize a monitor object out of data from xrandr --verbose.
|
||||
@ -79,6 +80,8 @@ class Monitor:
|
||||
self.enabled = "+" in self.header
|
||||
if self.enabled:
|
||||
self.pos_x, self.pos_y = parse.search("+{:d}+{:d}", self.header)
|
||||
self.res_x, self.res_y = parse.search("{:d}x{:d}", self.header)
|
||||
self.orientation = parse.search("{:w} (normal left inverted", self.header)[0]
|
||||
|
||||
modes_data = _split_by_lines_matching("^ [^ ]", data)
|
||||
if modes_data:
|
||||
@ -98,10 +101,35 @@ class Monitor:
|
||||
return f"Monitor: {self.output}"
|
||||
|
||||
def get_current_mode_name(self):
|
||||
for k, v in self.modes.values():
|
||||
for k, v in self.modes.items():
|
||||
if v.current:
|
||||
return k
|
||||
return None
|
||||
|
||||
def get_current_mode(self):
|
||||
return self.modes[self.get_current_mode_name()]
|
||||
|
||||
def set_current_mode(self, mode_name):
|
||||
for k, v in self.modes.items():
|
||||
v.current = k == mode_name
|
||||
|
||||
def guess_scale_mode(self):
|
||||
"""Given a monitor's data, try to guess what scaling
|
||||
mode it's using.
|
||||
|
||||
TODO: detect "Automatic: physical dimensions"
|
||||
"""
|
||||
if not self.enabled:
|
||||
return None
|
||||
mode = self.get_current_mode()
|
||||
scale_x = self.res_x / mode.res_x
|
||||
scale_y = self.res_y / mode.res_y
|
||||
|
||||
if 1 == scale_x == scale_y:
|
||||
print("Scale mode looks like 1x1")
|
||||
return "Disabled (1x1)"
|
||||
elif scale_x == scale_y:
|
||||
print("Looks like Manual, same in both dimensions")
|
||||
return "Manual, same in both dimensions"
|
||||
else:
|
||||
return "Manual"
|
||||
|
Loading…
Reference in New Issue
Block a user