touch_screen.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import pykka
  2. import traceback
  3. import logging
  4. from threading import Thread
  5. import pygame
  6. from .screen_manager import ScreenManager
  7. from mopidy import core
  8. logger = logging.getLogger(__name__)
  9. class TouchScreen(pykka.ThreadingActor, core.CoreListener):
  10. def __init__(self, config, core):
  11. super(TouchScreen, self).__init__()
  12. self.backend = pykka.ActorRegistry.get_by_class_name("TouchScreenBackend")[0]
  13. logger.error(self.backend)
  14. self.core = core
  15. self.running = False
  16. self.screen_size = (config['touchscreen']['screen_width'], config['touchscreen']['screen_height'])
  17. self.cache_dir = config['touchscreen']['cache_dir']
  18. self.fullscreen = config['touchscreen']['fullscreen']
  19. pygame.init()
  20. pygame.mouse.set_visible(config['touchscreen']['cursor'])
  21. self.screen_manager = ScreenManager(self.screen_size,self.core, self.backend, self.cache_dir)
  22. def start_thread(self):
  23. clock = pygame.time.Clock()
  24. if self.fullscreen:
  25. screen = pygame.display.set_mode(self.screen_size, pygame.FULLSCREEN)
  26. else:
  27. screen = pygame.display.set_mode(self.screen_size)
  28. while self.running:
  29. clock.tick(15)
  30. screen.blit(self.screen_manager.update(), (0, 0))
  31. pygame.display.flip()
  32. for event in pygame.event.get():
  33. if event.type == pygame.QUIT:
  34. self.running = False
  35. elif event.type == pygame.KEYUP and event.key == pygame.K_q:
  36. self.running = False
  37. else:
  38. self.screen_manager.event(event)
  39. pygame.quit()
  40. def on_start(self):
  41. try:
  42. self.running = True
  43. thread = Thread(target=self.start_thread)
  44. thread.start()
  45. except:
  46. traceback.print_exc()
  47. def on_stop(self):
  48. self.running = False
  49. def track_playback_started(self, tl_track):
  50. try:
  51. self.screen_manager.track_started(tl_track)
  52. except:
  53. traceback.print_exc()
  54. def volume_changed(self, volume):
  55. self.screen_manager.volume_changed(volume)
  56. def playback_state_changed(self,old_state, new_state):
  57. self.screen_manager.playback_state_changed(old_state, new_state)
  58. def tracklist_changed(self):
  59. try:
  60. self.screen_manager.tracklist_changed()
  61. except:
  62. traceback.print_exc()
  63. def track_playback_ended(self, tl_track, time_position):
  64. self.screen_manager.track_playback_ended(tl_track, time_position)
  65. def options_changed(self):
  66. try:
  67. self.screen_manager.options_changed()
  68. except:
  69. traceback.print_exc()
  70. def playlists_loaded(self):
  71. self.screen_manager.playlists_loaded()