git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commitddc281364af16faa138bc0272f537ba20faf7c1d
parent7348ab6312
authorIsaac Freund <[email protected]>
date2020-06-16 01:15
contrib: add tiled layout in python

 contrib/tiled.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/contrib/tiled.py b/contrib/tiled.py
new file mode 100755
index 0000000..2bec975
--- /dev/null
+++ b/contrib/tiled.py
@@ -0,0 +1,68 @@
+#!/bin/env python
+
+from sys import argv
+
+# This is an implementation of the  default "tiled" layout of dwm
+#
+# With 4 views and one master, the layout looks something like this:
+#
+# +-----------------------+------------+
+# |                       |            |
+# |                       |            |
+# |                       |            |
+# |                       +------------+
+# |                       |            |
+# |                       |            |
+# |                       |            |
+# |                       +------------+
+# |                       |            |
+# |                       |            |
+# |                       |            |
+# +-----------------------+------------+
+
+# Assign the arguments to variables. The order and meaning of the arguments
+# is explained in the river-layouts(7) man page
+num_views = int(argv[1])
+master_count = int(argv[2])
+master_factor = float(argv[3])
+output_width = int(argv[4])
+output_height = int(argv[5])
+
+secondary_count = num_views - master_count
+
+# handle the cases where there are no master or no secondary views
+master_width = 0
+secondary_width = 0
+if master_count > 0 and secondary_count > 0:
+    master_width = int(master_factor * output_width)
+    secondary_width = output_width - master_width
+elif master_count > 0:
+    master_width = output_width
+elif secondary_count > 0:
+    secondary_width = output_width
+
+
+# for each view, output the location/dimensions separated by spaces on a new line
+for i in range(num_views):
+    if i < master_count:
+        # to make things pixel-perfect, we make the first master and first secondary
+        # view slightly larger if the height is not evenly divisible
+        master_height = output_height // master_count
+        master_height_rem = output_height % master_count
+
+        x = 0
+        y = i * master_height + (master_height_rem if i > 0 else 0)
+        width = master_width
+        height = master_height + (master_height_rem if i == 0 else 0)
+
+        print(x, y, width, height)
+    else:
+        secondary_height = output_height // secondary_count
+        secondary_height_rem = output_height % secondary_count
+
+        x = master_width
+        y = (i - master_count) * secondary_height + (secondary_height_rem if i > master_count else 0)
+        width = secondary_width
+        height = secondary_height + (secondary_height_rem if i == master_count else 0)
+
+        print(x, y, width, height)