#! / usr / bin / python
# coding: utf-8
import gobject
from os import system
import gtk, wnck
import ode
STALE = (501,487) # values in hdaps / position in normal position
def hdaps ():
pos = list (eval (open ('/ sys / devices / platform / hdaps / position'). read ()))
pos [0] + = STALE [0]
pos [1] + = STALE [1]
if abs (pos [0]) <4: pos [0] = 0
if abs (pos [1]) <4: pos [1] = 0
if not any (pos): return 0
return pos
def find_clock (scr, body, world):
"" "trying to find the cairo-clock window, if we don’t find it, run it
and try to find again "" "
clk = None
for w in scr.get_windows ():
if w.get_application (). get_name () == 'cairo-clock':
print clk
clk = w
break
if not clk:
system ('cairo-clock &')
gobject.timeout_add (500, find_clock, scr, body, world)
else:
print clk
clk = gtk.gdk.window_foreign_new (clk.get_xid ())
gscr = clk.get_screen ()
body.setPosition ((list (clk.get_root_origin ()) + [1]))
# we found a window and start a timer that will control it
gobject.timeout_add (20, play, clk, body, world, gscr.get_width (), gscr.get_height ())
def play (clk, body, world, sw, sh):
gval = hdaps ()
if gval:
body.addForce ((gval + [0]))
world.step (0.04)
fx, fy, fz = body.getLinearVel ()
body.addForce ((-fx / 2, -fy / 2.0)) # slow down movement
# when you exit the edges of the screen, jump out from the opposite edge
bx, by, bz = body.getPosition ()
x, y = clk.get_position ()
w, h = clk.get_size ()
if x <- (w / 2): bx = sw- (w / 2)
elif x> sw- (w / 2): bx = - (w / 2)
if y <- (h / 2): by = sh- (h / 2)
elif y> sh- (h / 2): by = - (h / 2)
body.setPosition ((bx, by, bz))
clk.move (int (bx), int (by))
return true
def main ():
try:
scr = wnck.screen_get_default ()
scr.get_windows ()
world = ode.World ()
world.setGravity ((0,0,0))
body = ode.Body (world)
M = ode.Mass ()
M.setSphere (2500.0, 0.05)
M.setBox (1000,250,250,1)
M.mass = 0.5
body.setMass (M)
gobject.timeout_add (200, find_clock, scr, body, world)
gtk.main ()
except Exception, e:
print (e)
if __name__ == "__main__":
main ()
#! / usr / bin / env python
# coding: utf-8
import os, sys
from time import sleep
ROTATE_ON = 100
STALE_VALUE = 500 # first value in hdaps / position in normal position
def rotate (where):
return os.system ('xrandr - output LVDS - rotate% s'% where)
def readx ():
return int (open ('/ sys / devices / platform / hdaps / position'). read (). split (',') [0] .lstrip ('(')) + STALE_VALUE
if __name__ == '__main__':
while true:
sleep (0.1)
x = readx ()
if x <-ROTATE_ON: rotate ('right')
elif x> ROTATE_ON: rotate ('left')
else: rotate ('normal')
Source: https://habr.com/ru/post/81027/
All Articles