#!/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"