diff options
Diffstat (limited to 'apps/plugins/text_viewer/tv_window.c')
-rw-r--r-- | apps/plugins/text_viewer/tv_window.c | 86 |
1 files changed, 10 insertions, 76 deletions
diff --git a/apps/plugins/text_viewer/tv_window.c b/apps/plugins/text_viewer/tv_window.c index c83c6080bd..748b5b4cad 100644 --- a/apps/plugins/text_viewer/tv_window.c +++ b/apps/plugins/text_viewer/tv_window.c | |||
@@ -31,29 +31,10 @@ | |||
31 | static int window_width; | 31 | static int window_width; |
32 | static int window_columns; | 32 | static int window_columns; |
33 | static int display_lines; | 33 | static int display_lines; |
34 | static int col_width; | ||
35 | 34 | ||
36 | static int cur_window; | 35 | static int cur_window; |
37 | static int cur_column; | 36 | static int cur_column; |
38 | 37 | ||
39 | #ifdef HAVE_LCD_BITMAP | ||
40 | static bool tv_set_font(const unsigned char *font) | ||
41 | { | ||
42 | unsigned char path[MAX_PATH]; | ||
43 | |||
44 | if (font != NULL && *font != '\0') | ||
45 | { | ||
46 | rb->snprintf(path, MAX_PATH, "%s/%s.fnt", FONT_DIR, font); | ||
47 | if (rb->font_load(NULL, path) < 0) | ||
48 | { | ||
49 | rb->splash(HZ/2, "font load failed"); | ||
50 | return false; | ||
51 | } | ||
52 | } | ||
53 | return true; | ||
54 | } | ||
55 | #endif | ||
56 | |||
57 | static void tv_draw_bookmarks(const struct tv_screen_pos *top_pos) | 38 | static void tv_draw_bookmarks(const struct tv_screen_pos *top_pos) |
58 | { | 39 | { |
59 | struct tv_screen_pos bookmarks[TV_MAX_BOOKMARKS]; | 40 | struct tv_screen_pos bookmarks[TV_MAX_BOOKMARKS]; |
@@ -127,68 +108,31 @@ bool tv_traverse_lines(void) | |||
127 | 108 | ||
128 | static void tv_change_preferences(const struct tv_preferences *oldp) | 109 | static void tv_change_preferences(const struct tv_preferences *oldp) |
129 | { | 110 | { |
130 | #ifndef HAVE_LCD_BITMAP | 111 | bool need_vertical_scrollbar = false; |
131 | (void)oldp; | ||
132 | #else | ||
133 | static bool font_changing = false; | ||
134 | const unsigned char *font_str; | ||
135 | bool need_vertical_scrollbar; | ||
136 | struct tv_preferences new_prefs; | ||
137 | tv_copy_preferences(&new_prefs); | ||
138 | |||
139 | font_str = (oldp && !font_changing)? oldp->font_name : rb->global_settings->font_file; | ||
140 | |||
141 | /* change font */ | ||
142 | if (font_changing || rb->strcmp(font_str, preferences->font_name)) | ||
143 | { | ||
144 | font_changing = true; | ||
145 | if (!tv_set_font(preferences->font_name)) | ||
146 | { | ||
147 | rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH); | ||
148 | tv_set_preferences(&new_prefs); | ||
149 | return; | ||
150 | } | ||
151 | } | ||
152 | |||
153 | font_changing = false; | ||
154 | #endif | ||
155 | 112 | ||
156 | #ifdef HAVE_LCD_BITMAP | 113 | (void)oldp; |
157 | col_width = 2 * rb->font_get_width(preferences->font, ' '); | ||
158 | #else | ||
159 | col_width = 1; | ||
160 | #endif | ||
161 | |||
162 | if (cur_window >= preferences->windows) | ||
163 | cur_window = 0; | ||
164 | 114 | ||
165 | /* change viewport */ | 115 | tv_set_layout(need_vertical_scrollbar); |
166 | tv_change_viewport(); | 116 | tv_get_drawarea_info(&window_width, &window_columns, &display_lines); |
167 | 117 | ||
168 | #ifdef HAVE_LCD_BITMAP | 118 | #ifdef HAVE_LCD_BITMAP |
169 | need_vertical_scrollbar = false; | ||
170 | tv_set_layout(col_width, need_vertical_scrollbar); | ||
171 | tv_get_drawarea_info(&window_width, &window_columns, &display_lines); | ||
172 | tv_seek_top(); | 119 | tv_seek_top(); |
173 | tv_set_read_conditions(preferences->windows, window_width); | 120 | tv_set_read_conditions(preferences->windows, window_width); |
174 | if (tv_traverse_lines() && preferences->vertical_scrollbar) | 121 | if (tv_traverse_lines() && preferences->vertical_scrollbar) |
175 | { | 122 | { |
176 | need_vertical_scrollbar = true; | 123 | need_vertical_scrollbar = true; |
177 | tv_set_layout(col_width, need_vertical_scrollbar); | 124 | tv_set_layout(need_vertical_scrollbar); |
178 | tv_get_drawarea_info(&window_width, &window_columns, &display_lines); | 125 | tv_get_drawarea_info(&window_width, &window_columns, &display_lines); |
179 | } | 126 | } |
180 | tv_seek_top(); | 127 | tv_seek_top(); |
181 | #else | ||
182 | tv_set_layout(col_width); | ||
183 | tv_get_drawarea_info(&window_width, &window_columns, &display_lines); | ||
184 | #endif | 128 | #endif |
185 | 129 | ||
186 | window_columns = window_width / col_width; | ||
187 | cur_column = 0; | 130 | cur_column = 0; |
188 | 131 | ||
189 | tv_set_read_conditions(preferences->windows, window_width); | 132 | if (cur_window >= preferences->windows) |
133 | cur_window = 0; | ||
190 | 134 | ||
191 | tv_init_display(); | 135 | tv_set_read_conditions(preferences->windows, window_width); |
192 | #ifdef HAVE_LCD_BITMAP | 136 | #ifdef HAVE_LCD_BITMAP |
193 | tv_init_scrollbar(tv_get_total_text_size(), need_vertical_scrollbar); | 137 | tv_init_scrollbar(tv_get_total_text_size(), need_vertical_scrollbar); |
194 | #endif | 138 | #endif |
@@ -197,23 +141,13 @@ static void tv_change_preferences(const struct tv_preferences *oldp) | |||
197 | bool tv_init_window(unsigned char **buf, size_t *size) | 141 | bool tv_init_window(unsigned char **buf, size_t *size) |
198 | { | 142 | { |
199 | tv_add_preferences_change_listner(tv_change_preferences); | 143 | tv_add_preferences_change_listner(tv_change_preferences); |
200 | return tv_init_text_reader(buf, size); | 144 | return tv_init_display(buf, size) && tv_init_text_reader(buf, size); |
201 | } | 145 | } |
202 | 146 | ||
203 | void tv_finalize_window(void) | 147 | void tv_finalize_window(void) |
204 | { | 148 | { |
205 | tv_finalize_text_reader(); | 149 | tv_finalize_text_reader(); |
206 | 150 | tv_finalize_display(); | |
207 | #ifdef HAVE_LCD_BITMAP | ||
208 | /* restore font */ | ||
209 | if (rb->strcmp(rb->global_settings->font_file, preferences->font_name)) | ||
210 | { | ||
211 | tv_set_font(rb->global_settings->font_file); | ||
212 | } | ||
213 | |||
214 | /* undo viewport */ | ||
215 | tv_undo_viewport(); | ||
216 | #endif | ||
217 | } | 151 | } |
218 | 152 | ||
219 | void tv_move_window(int window_delta, int column_delta) | 153 | void tv_move_window(int window_delta, int column_delta) |