touch_manager.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. if event.button == 4:
  20. touch_event = TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
  21. touch_event.direction = TouchManager.up
  22. return touch_event
  23. elif event.button == 5:
  24. touch_event = TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
  25. touch_event.direction = TouchManager.down
  26. return touch_event
  27. else:
  28. return self.mouse_up(event)
  29. elif event.type == pygame.MOUSEBUTTONDOWN:
  30. self.mouse_down(event)
  31. return None
  32. def mouse_down(self, event):
  33. self.down_pos = event.pos
  34. def mouse_up(self, event):
  35. self.up_pos = event.pos
  36. if abs(self.down_pos[0] - self.up_pos[0]) < self.max_move_margin:
  37. if abs(self.down_pos[1] - self.up_pos[1]) < self.max_move_margin:
  38. return TouchEvent(TouchManager.click, self.down_pos, self.up_pos, None)
  39. elif abs(self.down_pos[1] - self.up_pos[1]) > self.min_swipe_move:
  40. return TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
  41. elif self.down_pos[1] - self.up_pos[1] < self.max_move_margin:
  42. logger.error( abs(self.down_pos[1] - self.up_pos[1]))
  43. if abs(self.down_pos[0] - self.up_pos[0]) > self.min_swipe_move:
  44. return TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, False)
  45. class TouchEvent():
  46. def __init__(self, event_type, down_pos, current_pos, vertical):
  47. self.type = event_type
  48. self.down_pos = down_pos
  49. self.current_pos = current_pos
  50. if event_type is TouchManager.swipe:
  51. if vertical:
  52. if self.down_pos[1] < self.current_pos[1]:
  53. self.direction = TouchManager.down
  54. else:
  55. self.direction = TouchManager.up
  56. else:
  57. if self.down_pos[0] < self.current_pos[0]:
  58. self.direction = TouchManager.right
  59. else:
  60. self.direction = TouchManager.left