diff options
-rw-r--r-- | apps/gui/viewport.c | 64 |
1 files changed, 25 insertions, 39 deletions
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index e90426a132..cf81f7d009 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c | |||
@@ -72,30 +72,35 @@ static int theme_stack_top[NB_SCREENS]; /* the last item added */ | |||
72 | static struct viewport_stack_item theme_stack[NB_SCREENS][VPSTACK_DEPTH]; | 72 | static struct viewport_stack_item theme_stack[NB_SCREENS][VPSTACK_DEPTH]; |
73 | static bool is_theme_enabled(enum screen_type screen); | 73 | static bool is_theme_enabled(enum screen_type screen); |
74 | 74 | ||
75 | static void evt_toggle(bool enable, unsigned short id, | ||
76 | void (*handler)(unsigned short id, void *data)) | ||
77 | { | ||
78 | if (enable) | ||
79 | add_event(id, handler); | ||
80 | else | ||
81 | remove_event(id, handler); | ||
82 | } | ||
75 | 83 | ||
76 | static void toggle_events(bool enable) | 84 | static void toggle_events(bool enable) |
77 | { | 85 | { |
78 | if (enable) | 86 | evt_toggle(enable, GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); |
79 | { | 87 | evt_toggle(enable, PLAYBACK_EVENT_TRACK_CHANGE, do_sbs_update_callback); |
80 | add_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); | 88 | evt_toggle(enable, PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, do_sbs_update_callback); |
81 | #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) | 89 | #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) |
82 | add_event(LCD_EVENT_ACTIVATION, do_sbs_update_callback); | 90 | evt_toggle(enable, LCD_EVENT_ACTIVATION, do_sbs_update_callback); |
83 | #endif | 91 | #endif |
84 | add_event(PLAYBACK_EVENT_TRACK_CHANGE, do_sbs_update_callback); | 92 | } |
85 | add_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, do_sbs_update_callback); | 93 | |
86 | } | 94 | static void set_clear_update_valid_vp(enum screen_type screen, struct viewport *vp) |
87 | else | 95 | { |
96 | if (vp->width && vp->height) | ||
88 | { | 97 | { |
89 | #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) | 98 | screens[screen].set_viewport(vp); |
90 | remove_event(LCD_EVENT_ACTIVATION, do_sbs_update_callback); | 99 | screens[screen].clear_viewport(); |
91 | #endif | 100 | screens[screen].update_viewport(); |
92 | remove_event(PLAYBACK_EVENT_TRACK_CHANGE, do_sbs_update_callback); | ||
93 | remove_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, do_sbs_update_callback); | ||
94 | remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); | ||
95 | } | 101 | } |
96 | } | 102 | } |
97 | 103 | ||
98 | |||
99 | static void toggle_theme(enum screen_type screen, bool force) | 104 | static void toggle_theme(enum screen_type screen, bool force) |
100 | { | 105 | { |
101 | bool enable_event = false; | 106 | bool enable_event = false; |
@@ -129,41 +134,22 @@ static void toggle_theme(enum screen_type screen, bool force) | |||
129 | deadspace.y = 0; | 134 | deadspace.y = 0; |
130 | deadspace.width = screens[screen].lcdwidth; | 135 | deadspace.width = screens[screen].lcdwidth; |
131 | deadspace.height = user.y; | 136 | deadspace.height = user.y; |
132 | if (deadspace.width && deadspace.height) | 137 | set_clear_update_valid_vp(screen, &deadspace); |
133 | { | ||
134 | screens[screen].set_viewport(&deadspace); | ||
135 | screens[screen].clear_viewport(); | ||
136 | screens[screen].update_viewport(); | ||
137 | } | ||
138 | /* below */ | 138 | /* below */ |
139 | deadspace.y = user.y + user.height; | 139 | deadspace.y = user.y + user.height; |
140 | deadspace.height = screens[screen].lcdheight - deadspace.y; | 140 | deadspace.height = screens[screen].lcdheight - deadspace.y; |
141 | if (deadspace.width && deadspace.height) | 141 | set_clear_update_valid_vp(screen, &deadspace); |
142 | { | ||
143 | screens[screen].set_viewport(&deadspace); | ||
144 | screens[screen].clear_viewport(); | ||
145 | screens[screen].update_viewport(); | ||
146 | } | ||
147 | /* left */ | 142 | /* left */ |
148 | deadspace.x = 0; | 143 | deadspace.x = 0; |
149 | deadspace.y = 0; | 144 | deadspace.y = 0; |
150 | deadspace.width = user.x; | 145 | deadspace.width = user.x; |
151 | deadspace.height = screens[screen].lcdheight; | 146 | deadspace.height = screens[screen].lcdheight; |
152 | if (deadspace.width && deadspace.height) | 147 | set_clear_update_valid_vp(screen, &deadspace); |
153 | { | ||
154 | screens[screen].set_viewport(&deadspace); | ||
155 | screens[screen].clear_viewport(); | ||
156 | screens[screen].update_viewport(); | ||
157 | } | ||
158 | /* below */ | 148 | /* below */ |
159 | deadspace.x = user.x + user.width; | 149 | deadspace.x = user.x + user.width; |
160 | deadspace.width = screens[screen].lcdwidth - deadspace.x; | 150 | deadspace.width = screens[screen].lcdwidth - deadspace.x; |
161 | if (deadspace.width && deadspace.height) | 151 | set_clear_update_valid_vp(screen, &deadspace); |
162 | { | 152 | |
163 | screens[screen].set_viewport(&deadspace); | ||
164 | screens[screen].clear_viewport(); | ||
165 | screens[screen].update_viewport(); | ||
166 | } | ||
167 | screens[screen].set_viewport(last_vp); | 153 | screens[screen].set_viewport(last_vp); |
168 | } | 154 | } |
169 | intptr_t force = first_boot?0:1; | 155 | intptr_t force = first_boot?0:1; |