dot/scripts/tablet

72 lines
1.6 KiB
Text
Raw Normal View History

2021-10-09 21:20:41 +00:00
#!/usr/bin/python
import sys
2022-07-31 21:09:31 +00:00
if len(sys.argv) < 3:
print("Usage: tablet [dev number] [property number] [scale factor] [aspect ratio]")
2021-10-09 21:20:41 +00:00
#Arguments
dev = sys.argv[1]
prop = sys.argv[2]
scale = float(sys.argv[3])
tablet_ratio = (lambda s: float(s[0]) / float(s[1]))(sys.argv[4].split(":")) if len(sys.argv) > 4 else 16/9
#Layout of screens: (x, y, w, h)
2022-07-31 21:09:31 +00:00
#screens = [
# (0, 0, 1280, 1024),
# (1280, 0, 2560, 1440),
# (3840, 0, 1080, 1920),
# (4920, 0, 1080, 1920),
#]
2021-10-09 21:20:41 +00:00
screens = [
2023-02-06 12:07:49 +00:00
(0, 0, 1920, 1080),
(0, 1080, 1920, 1080),
(1920, 1080, 2560, 1440),
2021-10-09 21:20:41 +00:00
]
#TODO find this with xrandr
2023-02-06 12:07:49 +00:00
target = screens[2]
2021-10-09 21:20:41 +00:00
#Physical offset of the selected screen
offsetx = target[0]
offsety = target[1]
#Size of the full screen areas
2023-02-06 12:07:49 +00:00
sh = 1080+ 1440
sw = 1920 + 2560
2021-10-09 21:20:41 +00:00
#TODO calculate using list of screens
#Aspect ratio of the tablet, to avoid weird scaling problems
#Size of the tablet
#Prioritize the with when scaling between aspect ratios
tw = target[2]
th = tw / tablet_ratio
print(tw, "x", th)
#make a variable that will try to make the scale the same over diferent resoultions
f = target[3] / target[3]
print ("f value =", f)
#calculate the new area size
aw = tw * scale * f
ah = th * scale * f
ox = (target[2] - aw) / 2 + offsetx
oy = (target[3] - ah) / 2 + offsety
#ox = offsetx
#oy = offsety
c0 = aw / sw
c2 = ah / sh
c1 = ox / sw
c3 = oy / sh
print(str(c0), "0", str(c1), "0", str(c2), str(c3), "0 0 1")
import os
os.system(" ".join(["xinput set-prop", dev, prop, str(c0), "0", str(c1), "0", str(c2), str(c3), "0 0 1"]))
#alias tablet2="xinput set-prop 18 156 2.45 0 -0.725 0 2.45 -0.725 0 0 1"