From 7ad61c53c4e2e7e7d953a4dfb2174020752a44e4 Mon Sep 17 00:00:00 2001 From: Ander <9and3r@gmail.com> Date: Wed, 14 Jan 2015 01:04:21 +0100 Subject: [PATCH] Text that does not fit will be showed again before disapiaring all text --- mopidy_touchscreen/dynamic_background.py | 2 +- mopidy_touchscreen/screen_manager.py | 19 +++++++--- mopidy_touchscreen/screen_objects.py | 47 +++++++++++++++++------- 3 files changed, 47 insertions(+), 21 deletions(-) diff --git a/mopidy_touchscreen/dynamic_background.py b/mopidy_touchscreen/dynamic_background.py index 6322175..bb02880 100644 --- a/mopidy_touchscreen/dynamic_background.py +++ b/mopidy_touchscreen/dynamic_background.py @@ -30,9 +30,9 @@ class DynamicBackground(): def set_target_color(self, color): if color is not None: - self.target = get_similar_valid_color(color) self.auto_mode = False self.target_current_same = False + self.target = get_similar_valid_color(color) else: self.auto_mode = True self.target = get_valid_color() diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index b478a02..6b0ffbe 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/mopidy_touchscreen/screen_manager.py @@ -145,6 +145,13 @@ class ScreenManager(): objects = self.down_bar_objects.get_touch_objects_in_pos(event.current_pos) return self.click_on_objects(objects, event) else: + if event.type == InputManager.key: + if event.direction == InputManager.right: + self.change_screen(self.current_screen+1) + return True + elif event.direction == InputManager.left: + self.change_screen(self.current_screen-1) + return True return False def volume_changed(self, volume): @@ -163,12 +170,12 @@ class ScreenManager(): self.screens[main_screen_index].options_changed() 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 - self.down_bar_objects.get_touch_object( - "menu_" + str(new_screen)).set_active(True) + if new_screen > -1 and new_screen < len(self.screens): + self.down_bar_objects.get_touch_object( + "menu_" + str(self.current_screen)).set_active(False) + self.current_screen = new_screen + self.down_bar_objects.get_touch_object( + "menu_" + str(new_screen)).set_active(True) def click_on_objects(self, objects, event): if objects is not None: diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py index 5e2cfd3..91d97a0 100644 --- a/mopidy_touchscreen/screen_objects.py +++ b/mopidy_touchscreen/screen_objects.py @@ -215,7 +215,8 @@ class BaseItem(): class TextItem(BaseItem): - scroll_speed = 2 + scroll_speed = 5 + def __init__(self, font, text, pos, size, center=False): self.font = font @@ -235,6 +236,8 @@ class TextItem(BaseItem): size[0]: self.fit_horizontal = False self.step = 0 + self.step_2 = None + self.scroll_white_gap = self.size[1] * 4 else: self.fit_horizontal = True if self.pos[1] + self.box.get_rect().height > pos[1] + \ @@ -253,10 +256,15 @@ class TextItem(BaseItem): def update(self): if not self.fit_horizontal: - if self.step > self.box.get_rect().width: - self.step = -self.size[0] + self.step = self.step + TextItem.scroll_speed + if self.step_2 is None: + if (self.box.get_rect().width - self.step + self.scroll_white_gap) < self.size[0]: + self.step_2 = self.box.get_rect().width - self.step + self.scroll_white_gap else: - self.step = self.step + TextItem.scroll_speed + self.step_2 = self.step_2 - TextItem.scroll_speed + if self.step_2 < 0: + self.step = 0 - self.step_2 + self.step_2 = None return True else: return BaseItem.update(self) @@ -268,7 +276,10 @@ class TextItem(BaseItem): surface.blit(self.box, self.pos, area=pygame.Rect(self.step, 0, self.size[0], self.size[1])) - + if self.step_2 is not None: + surface.blit(self.box, (self.pos[0]+self.step_2, self.pos[1]), + area=pygame.Rect(0, 0, self.size[0] - self.step_2, + self.size[1])) def set_text(self, text, change_size): if text != self.text: @@ -302,6 +313,7 @@ class TouchAndTextItem(TouchObject, TextItem): TouchObject.__init__(self, pos, self.size) self.active_color = (0, 150, 255) self.selected_color = (150, 0, 255) + self.normal_box = self.box self.active_box = self.font.render(text, True, self.active_color) self.selected_box = self.font.render(text, True, @@ -312,21 +324,28 @@ class TouchAndTextItem(TouchObject, TextItem): def set_text(self, text, change_size): TextItem.set_text(self, text, change_size) + self.normal_box = self.box self.active_box = self.font.render(text, True, self.active_color) self.selected_box = self.font.render(text, True, self.selected_color) - def render(self, surface): - if not self.fit_horizontal: - self.rect = pygame.Rect(self.step, 0, self.size[0], - self.size[1]) - if self.selected: - surface.blit(self.selected_box, (self.pos[0]+self.margin, self.pos[1]), area=self.rect) - elif self.active: - surface.blit(self.active_box, (self.pos[0]+self.margin, self.pos[1]), area=self.rect) + def set_active(self, active): + TouchObject.set_active(self, active) + if self.active: + self.box = self.active_box else: - surface.blit(self.box, (self.pos[0]+self.margin, self.pos[1]), area=self.rect) + self.box = self.normal_box + + def set_selected(self, selected): + TouchObject.set_selected(self, selected) + if self.selected: + self.box = self.selected_box + else: + self.box = self.normal_box + + def render(self, surface): + TextItem.render(self, surface) class Progressbar(TouchObject):