From 5903df44286bc4883ddb832bf643b3abaaf19113 Mon Sep 17 00:00:00 2001 From: Adrian Lopez Date: Thu, 12 Oct 2017 13:31:54 +0200 Subject: [PATCH] New virtual profile to clone biggest screen This option set the biggest monitor with it preferred configuration and scale the others monitors to show it completely --- autorandr.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/autorandr.py b/autorandr.py index a37a624..1137c28 100755 --- a/autorandr.py +++ b/autorandr.py @@ -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): -- 2.39.2