summaryrefslogtreecommitdiff
path: root/scripts/tablet
blob: 0965395196c73177c4614dec2d9801ea189d4d86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/python
import sys

if len(sys.argv) < 3:
    print("Usage: tablet [dev number] [property number] [scale factor] [aspect ratio]")

#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)
#screens = [
#	(0, 0, 1280, 1024),
#	(1280, 0, 2560, 1440),
#	(3840, 0, 1080, 1920),
#	(4920, 0, 1080, 1920),
#]

screens = [
	(0, 0, 1280, 1024),
	(1280, 0, 2560, 1440),
	(3840, 0, 1920, 1080),
	(5760, 0, 1920, 1080),
]

#TODO find this with xrandr

target = screens[1]

#Physical offset of the selected screen
offsetx = target[0]
offsety = target[1]

#Size of the full screen areas
sh = 1920
sw = 1280 + 2560 + 1080 + 1080
#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"