view_pager.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. __author__ = 'ander'
  2. from ..screens.base_screen import BaseScreen
  3. import traceback
  4. class ViewPager:
  5. def __init__(self, size, manager):
  6. self.size = size
  7. self.objets_manager = [manager.create_objects_manager(), manager.create_objects_manager(), manager.create_objects_manager()]
  8. self.pos = 0
  9. self.manager = manager
  10. self.next = False
  11. self.direction = 0
  12. self.previous = False
  13. self.speed = self.size[0] / 15
  14. self.update = False
  15. self.update_rects = []
  16. def notify_changed(self):
  17. try:
  18. for i in range(0, 3, 1):
  19. self.manager.set_page_values(self.objets_manager[i], i)
  20. self.update = True
  21. except:
  22. traceback.print_exc()
  23. def change_to_page(self, page):
  24. self.direction = page
  25. self.update = True
  26. def should_update(self):
  27. if self.update:
  28. return BaseScreen.update_all
  29. else:
  30. if len(self.update_rects)>0:
  31. return BaseScreen.update_partial
  32. else:
  33. return BaseScreen.no_update
  34. def shift(self):
  35. if self.direction == 1:
  36. if -self.pos > self.size[0]:
  37. self.pos = 0
  38. self.direction = 0
  39. aux = self.objets_manager[0]
  40. self.objets_manager[0] = self.objets_manager[1]
  41. self.objets_manager[1] = self.objets_manager[2]
  42. self.objets_manager[2] = aux
  43. self.notify_changed()
  44. else:
  45. self.pos -= self.speed
  46. self.objets_manager[2].set_horizontal_shift(self.size[0] + self.pos)
  47. self.objets_manager[1].set_horizontal_shift(self.pos)
  48. elif self.direction == -1:
  49. if self.pos > self.size[0]:
  50. self.pos = 0
  51. self.direction = 0
  52. aux = self.objets_manager[2]
  53. self.objets_manager[2] = self.objets_manager[1]
  54. self.objets_manager[1] = self.objets_manager[0]
  55. self.objets_manager[0] = aux
  56. self.notify_changed()
  57. else:
  58. self.pos += self.speed
  59. self.objets_manager[0].set_horizontal_shift(-self.size[0] + self.pos)
  60. self.objets_manager[1].set_horizontal_shift(self.pos)
  61. def render(self, screen, update_type):
  62. if self.direction != 0:
  63. self.shift()
  64. if self.pos != 0:
  65. if self.direction == 1:
  66. self.objets_manager[2].render(screen)
  67. elif self.direction == -1:
  68. self.objets_manager[0].render(screen)
  69. else:
  70. self.update = False
  71. self.update_rects = self.objets_manager[1].get_update_rects()
  72. #if update_type == BaseScreen.update_partial:
  73. #rects += self.update_rects
  74. self.objets_manager[1].render(screen)