diff --git a/mopidy_touchscreen/library_screen.py b/mopidy_touchscreen/library_screen.py index a4b549f..7380578 100644 --- a/mopidy_touchscreen/library_screen.py +++ b/mopidy_touchscreen/library_screen.py @@ -45,8 +45,8 @@ class LibraryScreen(): self.current_directory = directory self.lookup_uri(directory) - def update(self, screen): - self.list_view.render(screen) + def update(self, screen, update_all): + self.list_view.render(screen) def touch_event(self, touch_event): clicked = self.list_view.touch_event(touch_event) diff --git a/mopidy_touchscreen/list_view.py b/mopidy_touchscreen/list_view.py index 5a38e79..eab3aef 100644 --- a/mopidy_touchscreen/list_view.py +++ b/mopidy_touchscreen/list_view.py @@ -60,6 +60,8 @@ class ListView(): i += 1 z += 1 + + def render(self, surface): self.screen_objects.render(surface) diff --git a/mopidy_touchscreen/main_screen.py b/mopidy_touchscreen/main_screen.py index 6fb263a..067d3b0 100644 --- a/mopidy_touchscreen/main_screen.py +++ b/mopidy_touchscreen/main_screen.py @@ -27,6 +27,7 @@ class MainScreen(): self.cache = cache self.image = None self.artists = None + self.image_now_loaded = False self.touch_text_manager = ScreenObjectsManager() current_track = self.core.playback.current_track.get() if current_track is None: @@ -34,11 +35,8 @@ class MainScreen(): else: self.track_started(current_track) - def update(self, screen): + def update(self, screen, update_all): if self.track is not None: - if self.image is not None: - screen.blit(self.image, ( - self.base_size / 2, self.base_size + self.base_size / 2)) self.touch_text_manager.get_touch_object( "time_progress").set_value( self.core.playback.time_position.get() / 1000) @@ -47,7 +45,12 @@ class MainScreen(): self.core.playback.time_position.get() / 1000)) + "/" + time.strftime('%M:%S', time.gmtime( self.track.length / 1000))) - self.touch_text_manager.render(screen) + if update_all: + if self.image_now_loaded: + if self.image is not None: + screen.blit(self.image, (self.base_size / 2, self.base_size + self.base_size / 2)) + self.image_now_loaded = False + self.touch_text_manager.render(screen) return screen def track_started(self, track): @@ -212,6 +215,7 @@ class MainScreen(): self.get_cover_folder() + self.get_image_file_name()).convert(), (size, size)) + self.image_now_loaded = True def touch_event(self, event): if event.type == InputManager.click: diff --git a/mopidy_touchscreen/menu_screen.py b/mopidy_touchscreen/menu_screen.py index 46b13c9..08dfb61 100644 --- a/mopidy_touchscreen/menu_screen.py +++ b/mopidy_touchscreen/menu_screen.py @@ -47,11 +47,11 @@ class MenuScreen(): (0, self.base_size * 4), None) self.screen_objects.set_touch_object("ip", button) - def update(self, screen): + def update(self, screen, update_all): self.screen_objects.render(screen) def get_dirty_area(self): - self.screen_objects.get_dirty_area() + return self.screen_objects.get_dirty_area() def touch_event(self, event): if event.type == InputManager.click: diff --git a/mopidy_touchscreen/playlist_screen.py b/mopidy_touchscreen/playlist_screen.py index 3b4b2b8..ac24045 100644 --- a/mopidy_touchscreen/playlist_screen.py +++ b/mopidy_touchscreen/playlist_screen.py @@ -16,8 +16,8 @@ class PlaylistScreen(): def get_dirty_area(self): return self.list_view.get_dirty_area() - def update(self, screen): - self.list_view.render(screen) + def update(self, screen, update_all): + self.list_view.render(screen) def playlists_loaded(self): self.playlists_strings = [] diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index 607c772..fcc7187 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/mopidy_touchscreen/screen_manager.py @@ -43,6 +43,7 @@ class ScreenManager(): self.down_bar_objects = ScreenObjectsManager() self.selected_zone = self.top_bar_objects self.dirty_area = [] + self.screen_changed = True # Top bar self.top_bar = pygame.Surface((self.size[0], self.base_size), @@ -135,11 +136,12 @@ class ScreenManager(): def update(self): surface = pygame.Surface(self.size) surface.fill([200,200,200]) - self.screens[self.current_screen].update(surface) + self.screens[self.current_screen].update(surface, self.screen_changed) surface.blit(self.top_bar, (0, 0)) surface.blit(self.down_bar, (0, self.base_size * 7)) self.top_bar_objects.render(surface) self.down_bar_objects.render(surface) + self.screen_changed = False return surface def track_started(self, track): @@ -263,6 +265,7 @@ class ScreenManager(): self.core.tracklist.single.get()) def change_screen(self, new_screen): + self.screen_changed = True self.down_bar_objects.get_touch_object( "menu_" + str(self.current_screen)).set_active(False) self.current_screen = new_screen diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py index cfa462d..9ea0cfd 100644 --- a/mopidy_touchscreen/screen_objects.py +++ b/mopidy_touchscreen/screen_objects.py @@ -38,6 +38,7 @@ class ScreenObjectsManager(): def get_touch_object(self, key): return self.touch_objects[key] + def render(self, surface): for key in self.text_objects: if self.text_objects[key].update(): @@ -369,6 +370,7 @@ class Progressbar(TouchObject): return x * self.max / self.size[0] def set_text(self, text): + self.dirty = True self.text.set_text(text, True) diff --git a/mopidy_touchscreen/tracklist.py b/mopidy_touchscreen/tracklist.py index e000800..b60c296 100644 --- a/mopidy_touchscreen/tracklist.py +++ b/mopidy_touchscreen/tracklist.py @@ -17,8 +17,8 @@ class Tracklist(): def get_dirty_area(self): return self.list_view.get_dirty_area() - def update(self, screen): - self.list_view.render(screen) + def update(self, screen, update_all): + self.list_view.render(screen) def tracklist_changed(self): self.update_list()