screen_manager.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from .main_screen import MainScreen
  2. from .touch_manager import TouchManager
  3. from .screen_objects import ScreenObjectsManager
  4. import pygame
  5. import logging
  6. logger = logging.getLogger(__name__)
  7. class ScreenManager():
  8. def __init__(self, size, core, backend):
  9. self.size = size
  10. self.core = core
  11. self.backend = backend
  12. self.fonts = {}
  13. self.base_size = self.size[1] / 8
  14. self.fonts['dejavuserif'] = pygame.font.SysFont("dejavuserif", self.base_size)
  15. self.fonts['dejavusans'] = pygame.font.SysFont("dejavusans", self.base_size)
  16. self.screens = [MainScreen(size, self, "/home/ander", core,self.fonts)]
  17. self.track = None
  18. self.touch_manager = TouchManager(size)
  19. self.screen_objects_manager = ScreenObjectsManager(size,self.base_size)
  20. x = self.screen_objects_manager.add_touch_object("pause_play",self.fonts['dejavusans'],u" ll",(0,0),(255,255,255))
  21. x = x + self.base_size / 2
  22. x = self.screen_objects_manager.add_touch_object("random",self.fonts['dejavuserif'],u"\u2928",(x,0),(255,255,255))
  23. x = x + self.base_size / 2
  24. x = self.screen_objects_manager.add_touch_object("repeat",self.fonts['dejavuserif'],u"\u27F21",(x,0),(255,255,255))
  25. x = x + self.base_size / 2
  26. x = self.screen_objects_manager.add_touch_object("mute",self.fonts['dejavusans'],"Mute",(x,0),(255,255,255))
  27. x = x + self.base_size / 2
  28. self.screen_objects_manager.add_progressbar("volume",self.fonts['dejavusans'],"100", (x,0), (self.size[0],self.base_size),100, True)
  29. self.screen_objects_manager.get_touch_object("volume").set_value(self.core.playback.volume.get())
  30. self.top_bar = pygame.Surface((self.size[0],self.base_size),pygame.SRCALPHA)
  31. self.top_bar.fill((0,0,0,128))
  32. def update(self):
  33. surface = pygame.Surface(self.size)
  34. self.screens[0].update(surface)
  35. surface.blit(self.top_bar,(0,0))
  36. self.screen_objects_manager.render(surface)
  37. return surface
  38. def track_started(self, track):
  39. self.track = track
  40. self.screens[0].track_started(track.track)
  41. def event(self, event):
  42. touch_event = self.touch_manager.event(event)
  43. if touch_event is not None:
  44. if touch_event.type == TouchManager.click:
  45. objects = self.screen_objects_manager.get_touch_objects_in_pos(touch_event.current_pos)
  46. if objects is not None:
  47. for key in objects:
  48. if key == "volume":
  49. value = self.screen_objects_manager.get_touch_object(key).get_pos_value(touch_event.current_pos)
  50. self.backend.tell({'action':'volume','value':value})
  51. self.screen_objects_manager.get_touch_object(key).set_value(value)
  52. self.screens[0].touch_event(touch_event)
  53. def volume_changed(self, volume):
  54. self.screen_objects_manager.get_touch_object("volume").set_value(volume)