]> git.donarmstrong.com Git - deb_pkgs/autorandr.git/commitdiff
New virtual profile to clone biggest screen
authorAdrian Lopez <adrianlzt@gmail.com>
Thu, 12 Oct 2017 11:31:54 +0000 (13:31 +0200)
committerAdrian Lopez <adrianlzt@gmail.com>
Thu, 12 Oct 2017 11:31:54 +0000 (13:31 +0200)
This option set the biggest monitor with it preferred configuration and
scale the others monitors to show it completely

autorandr.py

index a37a6240542e1ca47e90eab113b61a826603673d..1137c28af3556e99c9e04a54e17df1220c299aa0 100755 (executable)
@@ -50,6 +50,7 @@ except NameError:
 virtual_profiles = [
     # (name, description, callback)
     ("common", "Clone all connected outputs at the largest common resolution", None),
+    ("clone", "Clone all connected outputs with the largest resolution and scaled down in the others", None),
     ("horizontal", "Stack all connected outputs horizontally at their largest resolution", None),
     ("vertical", "Stack all connected outputs vertically at their largest resolution", None),
 ]
@@ -715,6 +716,20 @@ def generate_virtual_profile(configuration, modes, profile_name):
                 shift += int(mode[shift_index])
             else:
                 configuration[output].options["off"] = None
+    elif profile_name == "clone":
+        biggest_width_resolution = sorted([output_modes[0] for output, output_modes in modes.items()], key=lambda x: x["width"], reverse=True)[0]
+        for output in configuration:
+            configuration[output].options = {}
+            if output in modes and configuration[output].edid:
+                mode = sorted(modes[output], key=lambda a: int(a["width"])*int(a["height"]) + (10**6 if a["preferred"] else 0))[-1]
+                configuration[output].options["mode"] = mode["name"]
+                configuration[output].options["rate"] = mode["rate"]
+                configuration[output].options["pos"] = "0x0"
+                x_scale = float(biggest_width_resolution["width"]) / float(mode["width"])
+                y_scale = float(biggest_width_resolution["height"]) / float(mode["height"])
+                configuration[output].options["scale"] = "{}x{}".format(x_scale, y_scale)
+            else:
+                configuration[output].options["off"] = None
     return configuration
 
 def print_profile_differences(one, another):