### Eclipse Workspace Patch 1.0 #P rockbox Index: apps/settings.h =================================================================== --- apps/settings.h (revision 12887) +++ apps/settings.h (working copy) @@ -705,6 +705,13 @@ int alarm_wake_up_screen; #endif +#ifdef HAVE_LCD_BITMAP + /* custom coordinates/settings for the lists (Menus/File list) */ + int listxpos; + int listypos; + int listlines; + int listwidth; +#endif }; /** global variables **/ Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 12887) +++ apps/settings_list.c (working copy) @@ -1150,6 +1150,14 @@ {F_T_INT, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN, INT(ALARM_START_WPS), "alarm wakeup screen", ALARM_SETTING_TEXT, UNUSED}, #endif /* HAVE_RTC_ALARM */ + INT_SETTING(0, listxpos, 0, 0, "listxpos", + UNIT_INT, 0, 320, 1, NULL, NULL, NULL), + INT_SETTING(0, listypos, 0, 0, "listypos", + UNIT_INT, 0, 240, 1, NULL, NULL, NULL), + INT_SETTING(0, listlines, 0, 0, "listlines", + UNIT_INT, 0, 100, 1, NULL, NULL, NULL), + INT_SETTING(0, listwidth, 0, 0, "listwidth", + UNIT_INT, 0, 320, 1, NULL, NULL, NULL), }; const int nb_settings = sizeof(settings)/sizeof(*settings); Index: apps/gui/list.c =================================================================== --- apps/gui/list.c (revision 12887) +++ apps/gui/list.c (working copy) @@ -165,6 +165,10 @@ gui_list->display->setfont(FONT_UI); #endif gui_textarea_update_nblines(gui_list->display); + + if (global_settings.listlines) + gui_list->display->nb_lines = global_settings.listlines; + int nb_lines=gui_list->display->nb_lines; if (SHOW_LIST_TITLE) nb_lines--; @@ -251,6 +255,19 @@ partial_draw = true; } + if (global_settings.listxpos) { + screen_set_xmargin(display, global_settings.listxpos); + } + if (global_settings.listypos) { + screen_set_ymargin(display, global_settings.listypos); + } + if (global_settings.listwidth) { + display->set_custom_width(global_settings.listwidth); + } + if (global_settings.listlines) { + display->nb_lines = global_settings.listlines; + } + if (SHOW_LIST_TITLE) lines = display->nb_lines - 1; else @@ -285,9 +302,13 @@ /* position and draw the list title & icon */ if (SHOW_LIST_TITLE && !partial_draw) { + if (global_settings.listypos) { + screen_set_ymargin(display, global_settings.listypos); + } + if (gui_list->title_icon != NOICON && draw_icons) { - screen_put_iconxy(display, 0, 0, gui_list->title_icon); + screen_put_iconxy(display, global_settings.listxpos/6, 0, gui_list->title_icon); #ifdef HAVE_LCD_BITMAP text_pos = 8; /* pixels */ #else @@ -300,10 +321,14 @@ } #ifdef HAVE_LCD_BITMAP - screen_set_xmargin(display, text_pos); /* margin for title */ + screen_set_xmargin(display, global_settings.listxpos + text_pos); /* margin for title */ + if (global_settings.listwidth) { + display->set_custom_width(global_settings.listwidth - text_pos); + } + item_offset = gui_list_get_item_offset(gui_list, gui_list->title_width, text_pos); - if (item_offset > gui_list->title_width - (display->width - text_pos)) + if (item_offset > gui_list->title_width - (display->get_custom_width() - text_pos)) display->puts_offset(0, 0, gui_list->title, item_offset); else display->puts_scroll_offset(0, 0, gui_list->title, item_offset); @@ -318,6 +343,10 @@ gui_textarea_update_nblines(display); bool draw_scrollbar; + if (global_settings.listlines) { + display->nb_lines = global_settings.listlines; + } + draw_scrollbar = (global_settings.scrollbar && lines < gui_list->nb_items); @@ -323,6 +352,13 @@ draw_cursor = !global_settings.invert_cursor; text_pos = 0; /* here it's in pixels */ + + if (global_settings.listxpos) { + text_pos = global_settings.listxpos; + cursor_pos = global_settings.listxpos/6; + icon_pos = global_settings.listxpos/6+1; + } + if(draw_scrollbar || SHOW_LIST_TITLE) /* indent if there's a title */ { @@ -348,6 +384,18 @@ #ifdef HAVE_LCD_BITMAP screen_set_xmargin(display, text_pos); /* margin for list */ #endif + + if (global_settings.listypos) { + screen_set_ymargin(display, global_settings.listypos); + } else { + screen_set_ymargin(display, + (global_settings.statusbar?STATUSBAR_HEIGHT:0)); + } + if (global_settings.listwidth) { + display->set_custom_width(global_settings.listwidth-(draw_icons?8:0)); + } else { + display->set_custom_width(LCD_WIDTH); + } if (SHOW_LIST_TITLE) { @@ -387,7 +435,7 @@ if (global_settings.invert_cursor)/* Display inverted-line-style*/ { /* if text got out of view */ - if (item_offset > item_width - (display->width - text_pos)) + if (item_offset > item_width - (display->get_custom_width() - text_pos)) { /* don't scroll */ display->puts_style_offset(0, i, entry_name, @@ -402,7 +450,7 @@ } else /* if (!global_settings.invert_cursor) */ { - if (item_offset > item_width - (display->width - text_pos)) + if (item_offset > item_width - (display->get_custom_width() - text_pos)) display->puts_offset(0, i, entry_name,item_offset); else display->puts_scroll_offset(0, i, entry_name,item_offset); @@ -449,7 +497,7 @@ /* Draw the scrollbar if needed*/ if(draw_scrollbar) { - int y_start = gui_textarea_get_ystart(display); + int y_start = gui_textarea_get_ystart(display)+global_settings.listypos-(global_settings.statusbar?STATUSBAR_HEIGHT:0); if (SHOW_LIST_TITLE) y_start += display->char_height; int scrollbar_y_end = display->char_height * @@ -454,10 +502,23 @@ y_start += display->char_height; int scrollbar_y_end = display->char_height * lines + y_start; - gui_scrollbar_draw(display, 0, y_start, SCROLLBAR_WIDTH-1, + + if (global_settings.listxpos || + global_settings.listypos || + global_settings.listlines) + { + gui_scrollbar_draw(display, (global_settings.listxpos?global_settings.listxpos - SCROLLBAR_WIDTH:0), + y_start, SCROLLBAR_WIDTH-1, + scrollbar_y_end - y_start, gui_list->nb_items, + gui_list->start_item, + gui_list->start_item + lines, + VERTICAL); + } else { + gui_scrollbar_draw(display, 0, y_start, SCROLLBAR_WIDTH-1, scrollbar_y_end - y_start, gui_list->nb_items, gui_list->start_item, gui_list->start_item + lines, VERTICAL); + } } screen_set_xmargin(display, old_margin); @@ -490,6 +551,9 @@ static void scroll_down(struct gui_list *gui_list, bool paginate) { + if (global_settings.listlines) + gui_list->display->nb_lines = global_settings.listlines; + int nb_lines = gui_list->display->nb_lines; if (SHOW_LIST_TITLE) nb_lines--; @@ -523,6 +587,9 @@ static void scroll_up(struct gui_list *gui_list, bool paginate) { + if (global_settings.listlines) + gui_list->display->nb_lines = global_settings.listlines; + int item_pos = gui_list->selected_item - gui_list->start_item; int nb_lines = gui_list->display->nb_lines; if (SHOW_LIST_TITLE) @@ -577,6 +644,9 @@ */ static void gui_list_select_previous(struct gui_list * gui_list) { + if (global_settings.listlines) + gui_list->display->nb_lines = global_settings.listlines; + int nb_lines = gui_list->display->nb_lines; if (SHOW_LIST_TITLE) nb_lines--; Index: apps/gui/statusbar.c =================================================================== --- apps/gui/statusbar.c (revision 12887) +++ apps/gui/statusbar.c (working copy) @@ -163,6 +163,10 @@ { struct screen * display = bar->display; +#ifdef HAVE_LCD_BITMAP + int custom_width_orig = display->get_custom_width()-display->getxmargin(); + display->set_custom_width(LCD_WIDTH); +#endif #ifdef HAVE_LCD_CHARCELLS int val; (void)force_redraw; /* players always "redraw" */ @@ -367,6 +371,11 @@ display->icon(ICON_PARAM, param); display->icon(ICON_USB, usb); #endif /* HAVE_LCD_CHARCELLS */ + +#ifdef HAVE_LCD_BITMAP + display->set_custom_width(custom_width_orig); + display->setfont(FONT_UI); +#endif } #ifdef HAVE_LCD_BITMAP Index: apps/gui/quickscreen.c =================================================================== --- apps/gui/quickscreen.c (revision 12887) +++ apps/gui/quickscreen.c (working copy) @@ -50,10 +50,22 @@ */ static void gui_quickscreen_draw(struct gui_quickscreen * qs, struct screen * display) { + int mfont_h; + display->setfont(FONT_UI); + display->getstringsize("A", NULL, &mfont_h); + + int gsx = global_settings.listxpos; + int gsw = global_settings.listwidth; + int gsh = global_settings.listypos+global_settings.listlines*mfont_h; + int bgsx = (gsx?gsx-2:0); + + if (!gsh) gsh = display->height; + if (!gsw) gsw = display->width; + #define PUTS_CENTER (display->height/2/font_h) #define PUTS_BOTTOM (display->height/font_h) #define PUTSXY_CENTER (display->height/2) - #define PUTSXY_BOTTOM (display->height) + #define PUTSXY_BOTTOM (gsh) char buffer[30]; const unsigned char *option; @@ -74,9 +86,9 @@ option=(unsigned char *)option_select_get_text(qs->left_option, buffer, sizeof buffer); title=(unsigned char *)qs->left_option->title; - display->puts_scroll(2, PUTS_CENTER-4+!statusbar, title); - display->puts_scroll(2, PUTS_CENTER-3+!statusbar, option); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 1, + display->puts_scroll(gsx/6+2, PUTS_CENTER-4+!statusbar, title); + display->puts_scroll(gsx/6+2, PUTS_CENTER-3+!statusbar, option); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], bgsx+1, PUTSXY_CENTER-(font_h*3), 7, 8); /* Displays the second line of text */ @@ -92,9 +104,9 @@ } else { - display->putsxy(display->width - w - 12, PUTSXY_CENTER-font_h, title); + display->putsxy(gsx+gsw - w - 12, PUTSXY_CENTER-font_h, title); display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], - display->width - 8, PUTSXY_CENTER-font_h, 7, 8); + gsx+gsw - 8, PUTSXY_CENTER-font_h, 7, 8); } display->getstringsize(option, &w, NULL); if(w > display->width) @@ -100,7 +112,7 @@ if(w > display->width) display->puts_scroll(0, PUTS_CENTER-1+!statusbar, option); else - display->putsxy(display->width -w-12, PUTSXY_CENTER, option); + display->putsxy(gsx+gsw -w-12, PUTSXY_CENTER, option); /* Displays the third line of text */ option=(unsigned char *)option_select_get_text(qs->bottom_option, buffer, @@ -111,7 +123,7 @@ if(w > display->width) display->puts_scroll(0, PUTS_BOTTOM-4+!statusbar, title); else - display->putsxy(display->width/2-w/2, PUTSXY_BOTTOM-(font_h*3), title); + display->putsxy(gsx+gsw/2-w/2, PUTSXY_BOTTOM-(font_h*3), title); display->getstringsize(option, &w, NULL); if(w > display->width) @@ -117,7 +129,7 @@ if(w > display->width) display->puts_scroll(0, PUTS_BOTTOM-3+!statusbar, option); else - display->putsxy(display->width/2-w/2, PUTSXY_BOTTOM-(font_h*2), option); + display->putsxy(gsx+gsw/2-w/2, PUTSXY_BOTTOM-(font_h*2), option); display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], display->width/2-4, PUTSXY_BOTTOM-font_h, 7, 8);