diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/recorder/keyboard.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index 957f04349d..d6a76d7b08 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c | |||
@@ -95,6 +95,7 @@ | |||
95 | struct keyboard_parameters | 95 | struct keyboard_parameters |
96 | { | 96 | { |
97 | unsigned short kbd_buf[KBD_BUF_SIZE]; | 97 | unsigned short kbd_buf[KBD_BUF_SIZE]; |
98 | unsigned short max_line_len; | ||
98 | int default_lines; | 99 | int default_lines; |
99 | int nchars; | 100 | int nchars; |
100 | int font_w; | 101 | int font_w; |
@@ -156,7 +157,7 @@ static const unsigned char morse_codes[] = { | |||
156 | int load_kbd(unsigned char* filename) | 157 | int load_kbd(unsigned char* filename) |
157 | { | 158 | { |
158 | int fd, l; | 159 | int fd, l; |
159 | int i = 0; | 160 | int i = 0, line_len, max_line_len; |
160 | unsigned char buf[4]; | 161 | unsigned char buf[4]; |
161 | 162 | ||
162 | if (filename == NULL) | 163 | if (filename == NULL) |
@@ -169,6 +170,8 @@ int load_kbd(unsigned char* filename) | |||
169 | if (fd < 0) | 170 | if (fd < 0) |
170 | return 1; | 171 | return 1; |
171 | 172 | ||
173 | line_len = 0; | ||
174 | max_line_len = 0; | ||
172 | while (read(fd, buf, 1) == 1 && i < KBD_BUF_SIZE) | 175 | while (read(fd, buf, 1) == 1 && i < KBD_BUF_SIZE) |
173 | { | 176 | { |
174 | /* check how many bytes to read for this character */ | 177 | /* check how many bytes to read for this character */ |
@@ -198,6 +201,14 @@ int load_kbd(unsigned char* filename) | |||
198 | FOR_NB_SCREENS(l) | 201 | FOR_NB_SCREENS(l) |
199 | kbd_param[l].kbd_buf[i] = ch; | 202 | kbd_param[l].kbd_buf[i] = ch; |
200 | i++; | 203 | i++; |
204 | if (ch == '\n') | ||
205 | { | ||
206 | if (max_line_len < line_len) | ||
207 | max_line_len = line_len; | ||
208 | line_len = 0; | ||
209 | } | ||
210 | else | ||
211 | line_len++; | ||
201 | } | 212 | } |
202 | } | 213 | } |
203 | 214 | ||
@@ -211,6 +222,7 @@ int load_kbd(unsigned char* filename) | |||
211 | /* initialize parameters */ | 222 | /* initialize parameters */ |
212 | pm->x = pm->y = pm->page = 0; | 223 | pm->x = pm->y = pm->page = 0; |
213 | pm->default_lines = 0; | 224 | pm->default_lines = 0; |
225 | pm->max_line_len = max_line_len; | ||
214 | } | 226 | } |
215 | 227 | ||
216 | return 0; | 228 | return 0; |
@@ -354,6 +366,7 @@ int kbd_input(char* text, int buflen) | |||
354 | "òóôõöø çðþýÿ ùúûü ¼½¾¬¶¨:;"; | 366 | "òóôõöø çðþýÿ ùúûü ¼½¾¬¶¨:;"; |
355 | 367 | ||
356 | pm->default_lines = 8; | 368 | pm->default_lines = 8; |
369 | pm->max_line_len = 26; | ||
357 | } | 370 | } |
358 | else | 371 | else |
359 | #endif /* LCD_WIDTH >= 160 && LCD_HEIGHT >= 96 */ | 372 | #endif /* LCD_WIDTH >= 160 && LCD_HEIGHT >= 96 */ |
@@ -374,6 +387,7 @@ int kbd_input(char* text, int buflen) | |||
374 | "òóôõöø çðþýÿ ùúûü"; | 387 | "òóôõöø çðþýÿ ùúûü"; |
375 | 388 | ||
376 | pm->default_lines = 4; | 389 | pm->default_lines = 4; |
390 | pm->max_line_len = 18; | ||
377 | } | 391 | } |
378 | 392 | ||
379 | while (*p) | 393 | while (*p) |
@@ -882,6 +896,8 @@ static void kbd_calc_params(struct keyboard_parameters *pm, | |||
882 | /* calculate how many characters to put in a row. */ | 896 | /* calculate how many characters to put in a row. */ |
883 | icon_w = get_icon_width(sc->screen_type); | 897 | icon_w = get_icon_width(sc->screen_type); |
884 | sc_w = sc->getwidth(); | 898 | sc_w = sc->getwidth(); |
899 | if (pm->font_w < sc_w / pm->max_line_len) | ||
900 | pm->font_w = sc_w / pm->max_line_len; | ||
885 | pm->max_chars = sc_w / pm->font_w; | 901 | pm->max_chars = sc_w / pm->font_w; |
886 | pm->max_chars_text = (sc_w - icon_w * 2 - 2) / pm->text_w; | 902 | pm->max_chars_text = (sc_w - icon_w * 2 - 2) / pm->text_w; |
887 | if (pm->max_chars_text < 3 && icon_w > pm->text_w) | 903 | if (pm->max_chars_text < 3 && icon_w > pm->text_w) |