touch_manager.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import pygame
  2. import logging
  3. logger = logging.getLogger(__name__)
  4. class TouchManager():
  5. click = 1
  6. swipe = 2
  7. up = 0
  8. down = 1
  9. left = 2
  10. right = 3
  11. def __init__(self,size):
  12. self.down_pos = (0, 0)
  13. self.up_pos = (0, 0)
  14. self.screen_size = size
  15. self.max_move_margin = self.screen_size[1] / 6
  16. self.min_swipe_move = self.screen_size[1] / 3
  17. def event(self, event):
  18. if event.type == pygame.MOUSEBUTTONUP:
  19. return self.mouse_up(event)
  20. elif event.type == pygame.MOUSEBUTTONDOWN:
  21. self.mouse_down(event)
  22. return None
  23. def mouse_down(self, event):
  24. self.down_pos = event.pos
  25. def mouse_up(self,event):
  26. self.up_pos = event.pos
  27. if abs(self.down_pos[0] - self.up_pos[0]) < self.max_move_margin:
  28. if abs(self.down_pos[1] - self.up_pos[1]) < self.max_move_margin:
  29. return TouchEvent(TouchManager.click, self.down_pos, self.up_pos, None)
  30. elif abs(self.down_pos[1] - self.up_pos[1]) > self.min_swipe_move:
  31. return TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
  32. elif self.down_pos[1] - self.up_pos[1] < self.max_move_margin:
  33. logger.error( abs(self.down_pos[1] - self.up_pos[1]))
  34. if abs(self.down_pos[0] - self.up_pos[0]) > self.min_swipe_move:
  35. return TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, False)
  36. class TouchEvent():
  37. def __init__(self, event_type, down_pos, current_pos, vertical):
  38. self.type = event_type
  39. self.down_pos = down_pos
  40. self.current_pos = current_pos
  41. if event_type is TouchManager.swipe:
  42. if vertical:
  43. if self.down_pos[1] < self.current_pos[1]:
  44. self.direction = TouchManager.down
  45. else:
  46. self.direction = TouchManager.up
  47. else:
  48. if self.down_pos[0] < self.current_pos[0]:
  49. self.direction = TouchManager.right
  50. else:
  51. self.direction = TouchManager.left