touch_screen.py 2.9 KB

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