touch_manager.py 2.7 KB

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