Files
mopidy-touchscreen/mopidy_touchscreen/touch_manager.py
2014-07-29 14:48:13 +02:00

76 lines
2.7 KiB
Python

import pygame
import logging
logger = logging.getLogger(__name__)
class TouchManager():
click = 1
swipe = 2
up = 0
down = 1
left = 2
right = 3
def __init__(self, size):
self.down_pos = (0, 0)
self.up_pos = (0, 0)
self.screen_size = size
self.max_move_margin = self.screen_size[1] / 6
self.min_swipe_move = self.screen_size[1] / 3
self.down_button = -1
def event(self, event):
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 4:
touch_event = TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
touch_event.direction = TouchManager.up
return touch_event
elif event.button == 5:
touch_event = TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
touch_event.direction = TouchManager.down
return touch_event
elif event.button == 1 and self.down_button == 1:
return self.mouse_up(event)
else:
return None
elif event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_down(event)
return None
def mouse_down(self, event):
self.down_pos = event.pos
self.down_button = event.button
def mouse_up(self, event):
self.up_pos = event.pos
if abs(self.down_pos[0] - self.up_pos[0]) < self.max_move_margin:
if abs(self.down_pos[1] - self.up_pos[1]) < self.max_move_margin:
return TouchEvent(TouchManager.click, self.down_pos, self.up_pos, None)
elif abs(self.down_pos[1] - self.up_pos[1]) > self.min_swipe_move:
return TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
elif self.down_pos[1] - self.up_pos[1] < self.max_move_margin:
logger.error( abs(self.down_pos[1] - self.up_pos[1]))
if abs(self.down_pos[0] - self.up_pos[0]) > self.min_swipe_move:
return TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, False)
class TouchEvent():
def __init__(self, event_type, down_pos, current_pos, vertical):
self.type = event_type
self.down_pos = down_pos
self.current_pos = current_pos
if event_type is TouchManager.swipe:
if vertical:
if self.down_pos[1] < self.current_pos[1]:
self.direction = TouchManager.down
else:
self.direction = TouchManager.up
else:
if self.down_pos[0] < self.current_pos[0]:
self.direction = TouchManager.right
else:
self.direction = TouchManager.left