diff options
| author | Kevin Ferrare <kevin@rockbox.org> | 2005-11-09 01:17:57 +0000 |
|---|---|---|
| committer | Kevin Ferrare <kevin@rockbox.org> | 2005-11-09 01:17:57 +0000 |
| commit | f7c97522a874cf8136b8e5e014b1a7abb47bc7fc (patch) | |
| tree | a026afc66a257c065b9308e2436158e76a6b9212 | |
| parent | 0b00108c3eab73420c5b03cbe603b865276e13e8 (diff) | |
| download | rockbox-f7c97522a874cf8136b8e5e014b1a7abb47bc7fc.zip rockbox-f7c97522a874cf8136b8e5e014b1a7abb47bc7fc.tar.gz rockbox-f7c97522a874cf8136b8e5e014b1a7abb47bc7fc.tar.bz2 rockbox-f7c97522a874cf8136b8e5e014b1a7abb47bc7fc.tar.xz | |
Fixed the icon for unknown file types on the archos Player, and the bug when removing the last file on the screen in filetree, added some code for playlists integration with multi-screen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7800 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/filetypes.c | 2 | ||||
| -rw-r--r-- | apps/gui/list.c | 49 | ||||
| -rw-r--r-- | apps/gui/list.h | 10 | ||||
| -rw-r--r-- | apps/gui/textarea.c | 5 | ||||
| -rw-r--r-- | apps/menu.c | 1 | ||||
| -rw-r--r-- | apps/screen_access.c | 19 | ||||
| -rw-r--r-- | apps/screen_access.h | 12 | ||||
| -rw-r--r-- | apps/tree.c | 4 |
8 files changed, 88 insertions, 14 deletions
diff --git a/apps/filetypes.c b/apps/filetypes.c index 5d1c556..d5a9003 100644 --- a/apps/filetypes.c +++ b/apps/filetypes.c @@ -162,7 +162,7 @@ int filetype_get_icon(int attr) #ifdef HAVE_LCD_BITMAP return NULL; #else - return -1; + return Icon_Unknown; #endif } else diff --git a/apps/gui/list.c b/apps/gui/list.c index d566dab..cd5af40 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -55,6 +55,7 @@ void gui_list_init(struct gui_list * gui_list, gui_list->start_item = 0; gui_list->limit_scroll = false; gui_list->data=data; + gui_list->cursor_flash_state=false; } void gui_list_set_display(struct gui_list * gui_list, struct screen * display) @@ -68,6 +69,42 @@ void gui_list_set_display(struct gui_list * gui_list, struct screen * display) gui_list_put_selection_in_screen(gui_list, false); } +void gui_list_flash(struct gui_list * gui_list) +{ + struct screen * display=gui_list->display; + gui_list->cursor_flash_state=!gui_list->cursor_flash_state; + int selected_line=gui_list->selected_item-gui_list->start_item; +#ifdef HAVE_LCD_BITMAP + int cursor_xpos=global_settings.scrollbar?1:0; + int line_xpos=display->getxmargin(); + int line_ypos=display->getymargin()+display->char_height*selected_line; + if (global_settings.invert_cursor) + { + display->set_drawmode(DRMODE_COMPLEMENT); + display->fillrect(line_xpos, line_ypos, display->width, + display->char_height); + display->set_drawmode(DRMODE_SOLID); + display->invertscroll(0, selected_line); + } + else + { + if(gui_list->cursor_flash_state) + screen_clear_area(display, cursor_xpos*SCROLLBAR_WIDTH, line_ypos, + CURSOR_WIDTH, CURSOR_HEIGHT); + else + screen_put_cursorxy(display, cursor_xpos, selected_line); + } + display->update_rect(0, line_ypos,display->width, + display->char_height); +#else + if(gui_list->cursor_flash_state) + display->putc(0, selected_line, ' '); + else + screen_put_cursorxy(display, 0, selected_line); + gui_textarea_update(display); +#endif +} + void gui_list_put_selection_in_screen(struct gui_list * gui_list, bool put_from_end) { @@ -117,9 +154,7 @@ void gui_list_draw(struct gui_list * gui_list) text_pos += SCROLLBAR_WIDTH; } if(!draw_cursor) - { icon_pos--; - } else text_pos += CURSOR_WIDTH; @@ -181,7 +216,8 @@ void gui_list_draw(struct gui_list * gui_list) gui_list->callback_get_item_icon(current_item, gui_list->data, &icon); - screen_put_iconxy(display, icon_pos, i, icon); + if(icon) + screen_put_iconxy(display, icon_pos, i, icon); } } #ifdef HAVE_LCD_BITMAP @@ -429,6 +465,13 @@ void gui_synclist_limit_scroll(struct gui_synclist * lists, bool scroll) gui_list_limit_scroll(&(lists->gui_list[i]), scroll); } +void gui_synclist_flash(struct gui_synclist * lists) +{ + int i; + for(i = 0;i < NB_SCREENS;i++) + gui_list_flash(&(lists->gui_list[i])); +} + bool gui_synclist_do_button(struct gui_synclist * lists, unsigned button) { gui_synclist_limit_scroll(lists, true); diff --git a/apps/gui/list.h b/apps/gui/list.h index cb488c2..94a172f 100644 --- a/apps/gui/list.h +++ b/apps/gui/list.h @@ -93,6 +93,7 @@ struct gui_list { int nb_items; int selected_item; + bool cursor_flash_state; int start_item; /* the item that is displayed at the top of the screen */ void (*callback_get_item_icon) @@ -236,6 +237,14 @@ extern void gui_list_del_item(struct gui_list * gui_list); (gui_list)->limit_scroll=scroll /* + * One call on 2, the selected lune will either blink the cursor or + * invert/display normal the selected line + * - gui_list : the list structure + */ +extern void gui_list_flash(struct gui_list * gui_list); + + +/* * This part handles as many lists as there are connected screens * (the api is similar to the ones above) * The lists on the screens are synchronized ; @@ -278,6 +287,7 @@ extern void gui_synclist_select_previous_page(struct gui_synclist * lists, extern void gui_synclist_add_item(struct gui_synclist * lists); extern void gui_synclist_del_item(struct gui_synclist * lists); extern void gui_synclist_limit_scroll(struct gui_synclist * lists, bool scroll); +extern void gui_synclist_flash(struct gui_synclist * lists); /* * Do the action implied by the given button, diff --git a/apps/gui/textarea.c b/apps/gui/textarea.c index c496026..d8e730f 100644 --- a/apps/gui/textarea.c +++ b/apps/gui/textarea.c @@ -24,10 +24,7 @@ void gui_textarea_clear(struct screen * display) #ifdef HAVE_LCD_BITMAP int y_start = gui_textarea_get_ystart(display); int y_end = gui_textarea_get_yend(display); - - display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - display->fillrect(0, y_start, display->width, y_end - y_start); - display->set_drawmode(DRMODE_SOLID); + screen_clear_area(display, 0, y_start, display->width, y_end - y_start); display->stop_scroll(); screen_set_ymargin(display, y_start); #else diff --git a/apps/menu.c b/apps/menu.c index b682bec..474593b 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -168,7 +168,6 @@ int menu_show(int m) #ifdef MENU_RC_EXIT_MENU case MENU_RC_EXIT_MENU: #endif - //lcd_stop_scroll(); exit = true; break; diff --git a/apps/screen_access.c b/apps/screen_access.c index 44d560f..5dde0cb 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c @@ -65,6 +65,7 @@ void screen_init(struct screen * screen, enum screen_type screen_type) screen->scroll_delay=&lcd_remote_scroll_delay; screen->scroll_step=&lcd_remote_scroll_step; screen->puts_scroll_style=&lcd_remote_puts_scroll_style; + screen->invertscroll=&lcd_remote_invertscroll; #endif /* HAVE_LCD_BITMAP */ #ifdef HAVE_LCD_CHARCELLS @@ -114,6 +115,7 @@ void screen_init(struct screen * screen, enum screen_type screen_type) screen->scroll_delay=&lcd_scroll_delay; screen->scroll_step=&lcd_scroll_step; screen->puts_scroll_style=&lcd_puts_scroll_style; + screen->invertscroll=&lcd_invertscroll; #endif /* HAVE_LCD_BITMAP */ #ifdef HAVE_LCD_CHARCELLS @@ -150,8 +152,17 @@ void screen_init(struct screen * screen, enum screen_type screen_type) void screen_access_init(void) { - screen_init(&screens[0], SCREEN_MAIN); -#if defined(HAVE_REMOTE_LCD) && !defined(ROCKBOX_HAS_LOGF) - screen_init(&screens[1], SCREEN_REMOTE); -#endif + int i; + for(i=0;i<NB_SCREENS;i++) + screen_init(&screens[i], i); +} + +#ifdef HAVE_LCD_BITMAP +void screen_clear_area(struct screen * display, int xstart, int ystart, + int width, int height) +{ + display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); + display->fillrect(xstart, ystart, width, height); + display->set_drawmode(DRMODE_SOLID); } +#endif diff --git a/apps/screen_access.h b/apps/screen_access.h index 08e0ef0..5b30cb0 100644 --- a/apps/screen_access.h +++ b/apps/screen_access.h @@ -83,6 +83,7 @@ struct screen void (*drawline)(int x1, int y1, int x2, int y2); void (*vline)(int x, int y1, int y2); void (*hline)(int x1, int x2, int y); + void (*invertscroll) (int x, int y); #endif /* HAVE_LCD_BITMAP */ #ifdef HAVE_LCD_CHARCELLS @@ -136,6 +137,17 @@ extern void screen_init(struct screen * screen, enum screen_type screen_type); #define screen_set_ymargin(screen, ymargin) \ (screen)->setmargins((screen)->getxmargin(), ymargin); +#ifdef HAVE_LCD_BITMAP +/* + * Clear only a given area of the screen + * - screen : the screen structure + * - xstart, ystart : where the area starts + * - width, height : size of the area + */ +void screen_clear_area(struct screen * display, int xstart, int ystart, + int width, int height); +#endif + /* * Initializes the whole screen_access api */ diff --git a/apps/tree.c b/apps/tree.c index c1b53cf..0e91a58 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -337,6 +337,9 @@ static int update_dir(void) } } gui_synclist_set_nb_items(&tree_lists, tc.filesindir); + if( tc.selected_item >= tc.filesindir) + tc.selected_item=tc.filesindir-1; + gui_synclist_select_item(&tree_lists, tc.selected_item); gui_synclist_draw(&tree_lists); gui_syncstatusbar_draw(&statusbars, true); @@ -799,7 +802,6 @@ static bool dirbrowse(void) } onplay_result = onplay(buf, attr, curr_context); } - switch (onplay_result) { case ONPLAY_OK: |