summaryrefslogtreecommitdiff
path: root/apps/plugins/text_viewer/tv_window.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/text_viewer/tv_window.c')
-rw-r--r--apps/plugins/text_viewer/tv_window.c86
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 @@
31static int window_width; 31static int window_width;
32static int window_columns; 32static int window_columns;
33static int display_lines; 33static int display_lines;
34static int col_width;
35 34
36static int cur_window; 35static int cur_window;
37static int cur_column; 36static int cur_column;
38 37
39#ifdef HAVE_LCD_BITMAP
40static 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
57static void tv_draw_bookmarks(const struct tv_screen_pos *top_pos) 38static 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
128static void tv_change_preferences(const struct tv_preferences *oldp) 109static 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)
197bool tv_init_window(unsigned char **buf, size_t *size) 141bool 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
203void tv_finalize_window(void) 147void 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
219void tv_move_window(int window_delta, int column_delta) 153void tv_move_window(int window_delta, int column_delta)