diff options
| author | Björn Stenberg <bjorn@haxx.se> | 2002-10-02 11:37:37 +0000 |
|---|---|---|
| committer | Björn Stenberg <bjorn@haxx.se> | 2002-10-02 11:37:37 +0000 |
| commit | f97594443d38bb34c63b653886247a64f4a2069f (patch) | |
| tree | d2df5e3a1b8dc884d6cdade49d27eaa5863d910d | |
| parent | 3a1d3623c4605f155816af943baf09e0a7db4ff6 (diff) | |
| download | rockbox-f97594443d38bb34c63b653886247a64f4a2069f.zip rockbox-f97594443d38bb34c63b653886247a64f4a2069f.tar.gz rockbox-f97594443d38bb34c63b653886247a64f4a2069f.tar.bz2 rockbox-f97594443d38bb34c63b653886247a64f4a2069f.tar.xz | |
ON now acts as page scroll modifier. OFF/STOP exits.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2474 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/viewer.c | 169 |
1 files changed, 131 insertions, 38 deletions
diff --git a/apps/viewer.c b/apps/viewer.c index d986ce2..1572cbe 100644 --- a/apps/viewer.c +++ b/apps/viewer.c @@ -42,6 +42,8 @@ static int file_size; static char buffer[BUFFER_SIZE+1]; static int buffer_pos; /* Position of the buffer in the file */ +static char display_lines; /* number of lines on the display */ +static char display_columns; /* number of columns on the display */ static int begin_line; /* Index of the first line displayed on the lcd */ static int end_line; /* Index of the last line displayed on the lcd */ static int begin_line_pos; /* Position of the first_line in the bufffer */ @@ -53,17 +55,16 @@ static int end_line_pos; /* Position of the last_line in the buffer */ * buffer size (only happens with very long lines). */ -static int display_line_count(void) +static void display_line_count(void) { #ifdef HAVE_LCD_BITMAP - int fh; - fh = font_get(FONT_UI)->height; - if (global_settings.statusbar) - return (LCD_HEIGHT - STATUSBAR_HEIGHT) / fh; - else - return LCD_HEIGHT/fh; + int w,h; + lcd_getstringsize("M", &w, &h); + display_lines = LCD_HEIGHT / h; + display_columns = LCD_WIDTH / w; #else - return 2; + display_lines = 2; + display_columns = 11; #endif } @@ -127,11 +128,10 @@ static void viewer_draw(int col) line_pos = begin_line_pos; - for (i=0; - i<=end_line-begin_line && - line_pos!=OUTSIDE_BUFFER && - line_pos!=OUTSIDE_FILE; - i++) { + for (i=0; i <= end_line - begin_line; i++) { + if (line_pos == OUTSIDE_BUFFER || + line_pos == OUTSIDE_FILE) + break; str = buffer + line_pos + 1; for (j=0; j<col && *str!=0; ++j) str++; @@ -178,7 +178,6 @@ static bool viewer_init(char* file) { int i; int ret; - int disp_lines; fd = open(file, O_RDONLY); if (fd==-1) @@ -192,8 +191,8 @@ static bool viewer_init(char* file) end_line = -1; end_line_pos = -1; fill_buffer(0); - disp_lines = display_line_count(); - for (i=0; i<disp_lines; ++i) { + display_line_count(); + for (i=0; i<display_lines; ++i) { ret = find_next_line(end_line_pos); if (ret!=OUTSIDE_FILE && ret!=OUTSIDE_BUFFER) { end_line_pos = ret; @@ -214,15 +213,20 @@ static void viewer_scroll_down(void) int ret; ret = find_next_line(end_line_pos); - if (ret==OUTSIDE_BUFFER) { - begin_line_pos = find_next_line(begin_line_pos); - fill_buffer(begin_line_pos+buffer_pos); - end_line_pos = find_next_line(end_line_pos); - } else if (ret==OUTSIDE_FILE) { - return; - } else { - begin_line_pos = find_next_line(begin_line_pos); - end_line_pos = ret; + switch ( ret ) { + case OUTSIDE_BUFFER: + begin_line_pos = find_next_line(begin_line_pos); + fill_buffer(begin_line_pos+buffer_pos); + end_line_pos = find_next_line(end_line_pos); + break; + + case OUTSIDE_FILE: + return; + + default: + begin_line_pos = find_next_line(begin_line_pos); + end_line_pos = ret; + break; } begin_line++; end_line++; @@ -233,31 +237,110 @@ static void viewer_scroll_up(void) int ret; ret = find_prev_line(begin_line_pos); - if (ret==OUTSIDE_BUFFER) { - end_line_pos = find_prev_line(end_line_pos); - fill_buffer(buffer_pos+end_line_pos-BUFFER_SIZE); - begin_line_pos = find_prev_line(begin_line_pos); - } else if (ret==OUTSIDE_FILE) { - return; - } else { - end_line_pos = find_prev_line(end_line_pos); - begin_line_pos = ret; + switch ( ret ) { + case OUTSIDE_BUFFER: + end_line_pos = find_prev_line(end_line_pos); + fill_buffer(buffer_pos+end_line_pos-BUFFER_SIZE); + begin_line_pos = find_prev_line(begin_line_pos); + break; + + case OUTSIDE_FILE: + return; + + default: + end_line_pos = find_prev_line(end_line_pos); + begin_line_pos = ret; + break; } begin_line--; end_line--; } +static int pagescroll(int col) +{ + bool exit = false; + int i; + + while (!exit) { + switch (button_get(true)) { +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_ON | BUTTON_UP: + case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT: +#else + case BUTTON_ON | BUTTON_LEFT: + case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT: +#endif + for (i=0; i<display_lines; i++) + viewer_scroll_up(); + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_ON | BUTTON_DOWN: + case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT: +#else + case BUTTON_ON | BUTTON_RIGHT: + case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT: +#endif + for (i=0; i<display_lines; i++) + viewer_scroll_down(); + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_ON | BUTTON_LEFT: + case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT: +#else + case BUTTON_ON | BUTTON_MENU | BUTTON_LEFT: + case BUTTON_ON | BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: +#endif + col -= display_columns; + if (col < 0) + col = 0; + break; + +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_ON | BUTTON_RIGHT: + case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT: +#else + case BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT: + case BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: +#endif + col += display_columns; + break; + + case BUTTON_ON | BUTTON_REL: +#ifdef HAVE_RECORDER_KEYPAD + case BUTTON_ON | BUTTON_DOWN | BUTTON_REL: + case BUTTON_ON | BUTTON_UP | BUTTON_REL: +#else + case BUTTON_ON | BUTTON_RIGHT | BUTTON_REL: + case BUTTON_ON | BUTTON_LEFT | BUTTON_REL: + case BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT | BUTTON_REL: + case BUTTON_ON | BUTTON_MENU | BUTTON_LEFT | BUTTON_REL: +#endif + exit = true; + break; + } + if ( !exit ) + viewer_draw(col); + } + + return col; +} bool viewer_run(char* file) { + bool exit=false; int button; int col = 0; int ok; + int oldmask; #ifdef HAVE_LCD_BITMAP /* no margins */ lcd_setmargins(0, 0); #endif + oldmask = button_set_release(~0); + ok = viewer_init(file); if (!ok) { lcd_clear_display(); @@ -269,20 +352,19 @@ bool viewer_run(char* file) } viewer_draw(col); - while(1) { + while (!exit) { button = button_get(true); switch ( button ) { #ifdef HAVE_RECORDER_KEYPAD case BUTTON_F1: - case BUTTON_ON: + case BUTTON_OFF: #else case BUTTON_STOP: - case BUTTON_ON: #endif viewer_exit(); - return true; + exit = true; break; #ifdef HAVE_RECORDER_KEYPAD @@ -315,6 +397,8 @@ bool viewer_run(char* file) case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: #endif col--; + if (col < 0) + col = 0; viewer_draw(col); break; @@ -329,6 +413,13 @@ bool viewer_run(char* file) viewer_draw(col); break; + case BUTTON_ON: +#ifdef HAVE_PLAYER_KEYPAD + case BUTTON_ON | BUTTON_MENU: +#endif + col = pagescroll(col); + break; + case SYS_USB_CONNECTED: usb_screen(); #ifdef HAVE_LCD_CHARCELLS @@ -338,5 +429,7 @@ bool viewer_run(char* file) return true; } } + button_set_release(oldmask); + return false; } |