You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
4.7 KiB
198 lines
4.7 KiB
#this import statement allows access to the karamba functions
|
|
import karamba
|
|
|
|
#import os
|
|
import string
|
|
import math
|
|
import re
|
|
|
|
import xcursor
|
|
|
|
linkePupille = ""
|
|
rechtePupille = ""
|
|
|
|
init = 0
|
|
|
|
#old curser pos
|
|
x_old = -1
|
|
y_old = -1
|
|
|
|
#widget size
|
|
w_width = 167
|
|
w_height = 111
|
|
|
|
#widget pos
|
|
w_x = 10
|
|
w_y = 850
|
|
|
|
#eye center
|
|
lx, ly = 39, 55
|
|
rx, ry = 126, 55
|
|
|
|
#eye size
|
|
la, lb = 25, 38
|
|
ra, rb = 25, 38
|
|
|
|
#pupille size
|
|
lp_width, lp_height = 11, 17
|
|
rp_width, rp_height = 11, 17
|
|
|
|
def pupille(mouse_x, mouse_y, eye_center_x, eye_center_y, eye_a, eye_b, widget_x, widget_y):
|
|
x = mouse_x - eye_center_x - widget_x
|
|
y = mouse_y - eye_center_y - widget_y
|
|
#print(x, y)
|
|
|
|
r = math.sqrt(x * x + y * y)
|
|
phi = math.atan2(y, x)
|
|
#print(phi * math.pi)
|
|
|
|
eye_x = eye_a * math.cos(phi)
|
|
eye_y = eye_b * math.sin(phi)
|
|
|
|
eye_r = math.sqrt(eye_x * eye_x + eye_y * eye_y)
|
|
|
|
if eye_r < r:
|
|
return int(eye_x + eye_center_x), int(eye_y + eye_center_y)
|
|
|
|
return int(x + eye_center_x), int(y + eye_center_y)
|
|
|
|
|
|
#this is called when you widget is initialized
|
|
def initWidget(widget):
|
|
global init
|
|
global linkePupille
|
|
global rechtePupille
|
|
init = 0
|
|
linkePupille = ""
|
|
rechtePupille = ""
|
|
|
|
#this is called everytime your widget is updated
|
|
#the update inverval is specified in the .theme file
|
|
def widgetUpdated(widget):
|
|
global init
|
|
global linkePupille
|
|
global rechtePupille
|
|
|
|
global w_width
|
|
global w_height
|
|
|
|
global w_x
|
|
global w_y
|
|
|
|
global lx
|
|
global ly
|
|
global la
|
|
global lb
|
|
|
|
global lp_width
|
|
global lp_height
|
|
|
|
global rx
|
|
global ry
|
|
global ra
|
|
global rb
|
|
|
|
global rp_width
|
|
global rp_height
|
|
|
|
global x_old
|
|
global y_old
|
|
|
|
if init == 0:
|
|
theme_path = karamba.getThemePath(widget) + "/"
|
|
|
|
# read widget coordinates from eyes.theme
|
|
# f = open(theme_path + "eyes.theme")
|
|
|
|
# karamba_line = ""
|
|
#while re.compile('KARAMBA').search(karamba_line) == None:
|
|
# karamba_line = f.readline()
|
|
|
|
#w_x = int(re.compile('X=([0-9]+)').search(karamba_line).group(1))
|
|
#w_y = int(re.compile('Y=([0-9]+)').search(karamba_line).group(1))
|
|
|
|
#f.close()
|
|
|
|
#karamba.createWidgetMask(widget, theme_path + "pics/mask.png")
|
|
|
|
linkePupille = karamba.createImage(widget, 15, 30, theme_path + "pics/pupille.png")
|
|
rechtePupille = karamba.createImage(widget, 100, 30, theme_path + "pics/pupille.png")
|
|
init = 1
|
|
|
|
karamba.redrawWidget(widget)
|
|
|
|
# query mouse-cursor position
|
|
x, y = xcursor.position()
|
|
|
|
#fp = os.popen("./xpos")
|
|
#output = fp.read()
|
|
#x, y = output.split()
|
|
|
|
#print(x, y)
|
|
|
|
if x != x_old or y != y_old:
|
|
x_old, y_old = x, y
|
|
# Get Widget Position
|
|
w_x, w_y = karamba.getWidgetPosition(widget)
|
|
|
|
# Calc left pupille
|
|
xp, yp = pupille (int(x), int(y), lx, ly, la, lb, w_x, w_y)
|
|
|
|
xp = xp - lp_width // 2
|
|
yp = yp - lp_height // 2
|
|
#print(xp, yp)
|
|
|
|
karamba.moveImage(widget, linkePupille, xp, yp)
|
|
|
|
# Calc right pupille
|
|
xp, yp = pupille (int(x), int(y), rx, ry, ra, rb, w_x, w_y)
|
|
|
|
xp = xp - rp_width // 2
|
|
yp = yp - rp_height // 2
|
|
#print(xp, yp)
|
|
|
|
karamba.moveImage(widget, rechtePupille, xp, yp)
|
|
|
|
karamba.redrawWidget(widget)
|
|
|
|
#This gets called everytime our widget is clicked.
|
|
#Notes:
|
|
# widget = reference to our widget
|
|
# x = x position (relative to our widget)
|
|
# y = y position (relative to our widget)
|
|
# botton = button clicked:
|
|
# 1 = Left Mouse Button
|
|
# 2 = Middle Mouse Button
|
|
# 3 = Right Mouse Button, but this will never happen
|
|
# because the right mouse button brings up the
|
|
# Karamba menu.
|
|
# 4,5 = Scroll wheel up and down
|
|
def widgetClicked(widget, x, y, button):
|
|
pass
|
|
|
|
#This gets called everytime our widget is clicked.
|
|
#Notes
|
|
# widget = reference to our widget
|
|
# x = x position (relative to our widget)
|
|
# y = y position (relative to our widget)
|
|
# botton = button being held:
|
|
# 0 = No Mouse Button
|
|
# 1 = Left Mouse Button
|
|
# 2 = Middle Mouse Button
|
|
# 3 = Right Mouse Button, but this will never happen
|
|
# because the right mouse button brings up the
|
|
# Karamba menu.
|
|
def widgetMouseMoved(widget, x, y, button):
|
|
#Warning: Don't do anything too intensive here
|
|
#You don't want to run some complex piece of code everytime the mouse moves
|
|
pass
|
|
#global linkePupille
|
|
|
|
#karamba.moveImage(widget, linkePupille, x, y)
|
|
#karamba.redrawWidget(widget)
|
|
|
|
|
|
# This will be printed when the widget loads.
|
|
print("Loaded Karamba Eyes")
|
|
|