Try to guess scale mode

This commit is contained in:
Roberto Alsina 2020-02-03 16:04:08 -03:00
parent 71b596eacb
commit 97f37415f3

View File

@ -247,16 +247,33 @@ class Window(QObject):
for name, monitor in self.xrandr_info.items(): for name, monitor in self.xrandr_info.items():
self.ui.screenCombo.addItem(name) self.ui.screenCombo.addItem(name)
mon_item = MonitorItem(data=monitor, window=self, name=name,) mon_item = MonitorItem(data=monitor, window=self, name=name,)
# mon_item.setPos(monitor["pos_x"], monitor["pos_y"])
self.scene.addItem(mon_item) self.scene.addItem(mon_item)
monitor["item"] = mon_item monitor["item"] = mon_item
self.ui.screenCombo.setCurrentText(self.choose_a_monitor()) self.ui.screenCombo.setCurrentText(self.choose_a_monitor())
self.adjust_view() self.adjust_view()
self.scale_changed() # Trigger scale labels update self.scale_changed() # Trigger scale labels update
def detect_scaling_mode(self, monitor): def detect_scale_mode(self, monitor):
"""Given a monitor's data, try to guess what scaling """Given a monitor's data, try to guess what scaling
mode it's using.""" mode it's using.
TODO: detect "Automatic: physical dimensions"
"""
if not monitor["current_mode"]: # Disabled, whatever
return None
mod_x, mod_y = [int(x) for x in monitor["current_mode"].split("x")]
scale_x = monitor["res_x"] / mod_x
scale_y = monitor["res_y"] / mod_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"
def choose_a_monitor(self): def choose_a_monitor(self):
"""Choose what monitor to select by default. """Choose what monitor to select by default.
@ -417,6 +434,10 @@ class Window(QObject):
self.ui.replicaOf.setCurrentText(mon) self.ui.replicaOf.setCurrentText(mon)
self.ui.modes.blockSignals(False) self.ui.modes.blockSignals(False)
guessed_scale_mode = self.detect_scale_mode(self.xrandr_info[name])
self.ui.scaleModeCombo.setCurrentText(guessed_scale_mode)
self.scale_mode_changed()
def scale_changed(self): def scale_changed(self):
self.ui.horizontalScaleLabel.setText( self.ui.horizontalScaleLabel.setText(
f"{int(self.ui.horizontalScale.value()/10)}%" f"{int(self.ui.horizontalScale.value()/10)}%"