diff -Naur rockbox-19442/apps/action.h _000/apps/action.h --- rockbox-19442/apps/action.h 2008-12-15 10:19:52.000000000 +0900 +++ _000/apps/action.h 2008-12-15 13:25:58.000000000 +0900 @@ -194,7 +194,7 @@ ACTION_QS_LEFT, ACTION_QS_RIGHT, ACTION_QS_DOWN, - ACTION_QS_DOWNINV, /* why is this not called up?? :p */ + ACTION_QS_UP, /* pitchscreen */ /* obviously ignore if you dont have thise screen */ diff -Naur rockbox-19442/apps/gui/quickscreen.c _000/apps/gui/quickscreen.c --- rockbox-19442/apps/gui/quickscreen.c 2008-12-15 12:40:51.937500000 +0900 +++ _000/apps/gui/quickscreen.c 2008-12-15 13:25:56.562500000 +0900 @@ -61,17 +61,13 @@ const int screen = 0; #endif - int char_height, i, width, pad = 0; - int left_width, right_width, bottom_lines = 2; + int char_height, i; + int left_width, right_width, bottom_lines = 3, top_lines = 0; unsigned char *s; int nb_lines = viewport_get_nb_lines(parent); char_height = parent->height/nb_lines; - /* center the icons VP first */ vp_icons[screen] = *parent; - vp_icons[screen].width = CENTER_ICONAREA_WIDTH; /* abosulte smallest allowed */ - vp_icons[screen].x = parent->x; - vp_icons[screen].x += (parent->width-CENTER_ICONAREA_WIDTH)/2; vps[screen][QUICKSCREEN_BOTTOM] = *parent; if (nb_lines <= MIN_LINES) /* make the bottom item use 1 line */ @@ -86,6 +82,19 @@ vps[screen][QUICKSCREEN_BOTTOM].y -= char_height; } + vps[screen][QUICKSCREEN_TOP] = *parent; + if (nb_lines <= MIN_LINES) /* make the top item use 1 line */ + top_lines = 1; + else + top_lines = 2; + vps[screen][QUICKSCREEN_TOP].height = top_lines*char_height; + vps[screen][QUICKSCREEN_TOP].y = + top_lines*char_height; + if (nb_lines >= MAX_NEEDED_LINES) + { + vps[screen][QUICKSCREEN_TOP].y -= char_height; + } + /* adjust the left/right items widths to fit the screen nicely */ s = P2STR(ID2P(qs->items[QUICKSCREEN_LEFT]->lang_id)); left_width = display->getstringsize(s, NULL, NULL); @@ -93,37 +102,9 @@ right_width = display->getstringsize(s, NULL, NULL); nb_lines -= bottom_lines; - width = MAX(left_width, right_width); - if (width*2 + vp_icons[screen].width > display->lcdwidth) - width = (display->lcdwidth - vp_icons[screen].width)/2; - else /* add more gap in icons vp */ - { - int excess = display->lcdwidth - vp_icons[screen].width - width*2; - if (excess > CENTER_MARGIN*4) - { - pad = CENTER_MARGIN; - excess -= CENTER_MARGIN*2; - } - vp_icons[screen].x -= excess/2; - vp_icons[screen].width += excess; - } vps[screen][QUICKSCREEN_LEFT] = *parent; - vps[screen][QUICKSCREEN_LEFT].x = parent->x + pad; - vps[screen][QUICKSCREEN_LEFT].width = width; - vps[screen][QUICKSCREEN_RIGHT] = *parent; - vps[screen][QUICKSCREEN_RIGHT].x = parent->x + parent->width - width - pad; - vps[screen][QUICKSCREEN_RIGHT].width = width; - - /* shrink the icons vp by a few pixels if there is room so the arrows - aren't drawn right next to the text */ - if (vp_icons[screen].width > CENTER_ICONAREA_WIDTH+8) - { - vp_icons[screen].width -= 8; - vp_icons[screen].x += 4; - } - - + vps[screen][QUICKSCREEN_LEFT].x = parent->x; if (nb_lines <= MIN_LINES) i = 0; else @@ -140,6 +121,49 @@ vp_icons[screen].y = vps[screen][QUICKSCREEN_LEFT].y + (char_height/2); vp_icons[screen].height = vps[screen][QUICKSCREEN_BOTTOM].y - vp_icons[screen].y; + if (MAX(left_width, right_width)*2 > parent->width - CENTER_ICONAREA_WIDTH) + { + /* scrolling needed */ + int center = (parent->width - CENTER_ICONAREA_WIDTH)/2; + int width = MIN(center, MIN(left_width, right_width)); + vps[screen][QUICKSCREEN_LEFT].width = width; + vps[screen][QUICKSCREEN_RIGHT].width = width; + vps[screen][QUICKSCREEN_RIGHT].x = parent->x+parent->width - width; + vp_icons[screen].x = parent->x + center; + vp_icons[screen].width = CENTER_ICONAREA_WIDTH; + } + else + { + int width, pad = 0; + if (left_width > right_width) + width = left_width; + else + width = right_width; + width += CENTER_MARGIN; + if (width*2 < parent->width/2) + { + width += parent->width/6; + /* add some padding on the edges */ + pad = CENTER_MARGIN; + } + vps[screen][QUICKSCREEN_LEFT].width = width; + vps[screen][QUICKSCREEN_RIGHT].width = width; + vps[screen][QUICKSCREEN_RIGHT].x = parent->x + parent->width - width; + vp_icons[screen].x = parent->x + width; + if (pad) + { + vp_icons[screen].x += pad; + vps[screen][QUICKSCREEN_LEFT].x += pad; + vps[screen][QUICKSCREEN_RIGHT].x -= pad; + /* need to add the pad to the bottom to make it all centered nicely */ + vps[screen][QUICKSCREEN_BOTTOM].x += pad; + vps[screen][QUICKSCREEN_BOTTOM].width -= pad; + vps[screen][QUICKSCREEN_TOP].x += pad; + vps[screen][QUICKSCREEN_TOP].width -= pad; + } + vp_icons[screen].width = vps[screen][QUICKSCREEN_RIGHT].x - (vps[screen][QUICKSCREEN_LEFT].x+width); + + } } static void quickscreen_draw_text(char *s, int item, bool title, @@ -156,11 +180,14 @@ case QUICKSCREEN_BOTTOM: x = (vp->width - w)/2; break; + case QUICKSCREEN_TOP: + x = (vp->width - w)/2; + break; case QUICKSCREEN_LEFT: - x = 0; + x = 12; break; case QUICKSCREEN_RIGHT: - x = vp->width - w; + x = vp->width - w - 12; break; } if (w>vp->width) @@ -213,14 +240,20 @@ display->update_viewport(); } /* draw the icons */ - display->set_viewport(&vp_icons[screen]); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], - vp_icons[screen].width - 8, 0, 7, 8); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 0, 0, 7, 8); - display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], - (vp_icons[screen].width/2) - 4, - vp_icons[screen].height - 7, 7, 8); display->set_viewport(parent); + display->mono_bitmap(bitmap_icons_7x8[Icon_UpArrow], + parent->width/2 - 3, + 2, 7, 8); + display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], + parent->width /2 - 3, + parent->height - 10, 7, 8); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], + parent->width - 10, + parent->height /2 - 4, 7, 8); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], + 2, + parent->height /2 - 4, 7, 8); + display->set_viewport(parent); display->update(); } @@ -250,10 +283,13 @@ break; case ACTION_QS_DOWN: - case ACTION_QS_DOWNINV: item = QUICKSCREEN_BOTTOM; break; + case ACTION_QS_UP: + item = QUICKSCREEN_TOP; + break; + case ACTION_QS_RIGHT: item = QUICKSCREEN_RIGHT; break; @@ -291,6 +327,7 @@ cond_talk_ids(VOICE_QUICKSCREEN); talk_qs_option((struct settings_list *)qs->items[QUICKSCREEN_LEFT], true); talk_qs_option((struct settings_list *)qs->items[QUICKSCREEN_BOTTOM], true); + talk_qs_option((struct settings_list *)qs->items[QUICKSCREEN_TOP], true); talk_qs_option((struct settings_list *)qs->items[QUICKSCREEN_RIGHT], true); while (true) { button = get_action(CONTEXT_QUICKSCREEN,HZ/5); @@ -344,6 +381,9 @@ qs.items[QUICKSCREEN_BOTTOM] = get_setting(global_settings.qs_item_bottom, find_setting(&global_settings.dirfilter, NULL)); + qs.items[QUICKSCREEN_TOP] = + get_setting(global_settings.qs_item_top, + find_setting(&global_settings.brightness, NULL)); qs.callback = NULL; if (gui_syncquickscreen_run(&qs, button_enter)) @@ -381,6 +421,8 @@ find_setting(&global_settings.statusbar, NULL); qs.items[QUICKSCREEN_BOTTOM] = find_setting(&global_settings.flip_display, NULL); + qs.items[QUICKSCREEN_TOP] = + find_setting(&global_settings.brightness, NULL); qs.callback = NULL; if (gui_syncquickscreen_run(&qs, button_enter)) { @@ -429,6 +471,9 @@ case QUICKSCREEN_BOTTOM: global_settings.qs_item_bottom = i; break; + case QUICKSCREEN_TOP: + global_settings.qs_item_top = i; + break; default: /* shut the copiler up */ break; } diff -Naur rockbox-19442/apps/gui/quickscreen.h _000/apps/gui/quickscreen.h --- rockbox-19442/apps/gui/quickscreen.h 2008-12-15 10:19:56.000000000 +0900 +++ _000/apps/gui/quickscreen.h 2008-12-15 13:25:56.562500000 +0900 @@ -33,6 +33,7 @@ QUICKSCREEN_LEFT = 0, QUICKSCREEN_RIGHT, QUICKSCREEN_BOTTOM, + QUICKSCREEN_TOP, QUICKSCREEN_ITEM_COUNT, }; diff -Naur rockbox-19442/apps/keymaps/keymap-gigabeat-s.c _000/apps/keymaps/keymap-gigabeat-s.c --- rockbox-19442/apps/keymaps/keymap-gigabeat-s.c 2008-12-15 10:19:56.000000000 +0900 +++ _000/apps/keymaps/keymap-gigabeat-s.c 2008-12-15 13:25:58.000000000 +0900 @@ -222,8 +222,8 @@ }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_UP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff -Naur rockbox-19442/apps/lang/english.lang _000/apps/lang/english.lang --- rockbox-19442/apps/lang/english.lang 2008-12-15 10:19:57.000000000 +0900 +++ _000/apps/lang/english.lang 2008-12-15 13:26:43.984375000 +0900 @@ -12244,3 +12244,20 @@ quickscreen: "Set as Bottom Quickscreen Item" + + id: LANG_TOP_QS_ITEM + desc: used for the submenu name for the quickscreen items + user: + + *: none + quickscreen: "Set as Top Quickscreen Item" + + + *: none + quickscreen: "Set as Top Quickscreen Item" + + + *: none + quickscreen: "Set as Top Quickscreen Item" + + diff -Naur rockbox-19442/apps/menu.c _000/apps/menu.c --- rockbox-19442/apps/menu.c 2008-12-15 12:40:51.953125000 +0900 +++ _000/apps/menu.c 2008-12-15 13:25:56.593750000 +0900 @@ -468,7 +468,8 @@ ID2P(LANG_RESET_SETTING), ID2P(LANG_LEFT_QS_ITEM), ID2P(LANG_BOTTOM_QS_ITEM), - ID2P(LANG_RIGHT_QS_ITEM)); + ID2P(LANG_RIGHT_QS_ITEM), + ID2P(LANG_TOP_QS_ITEM)); #endif MENUITEM_STRINGLIST(notquickscreen_able_option, ID2P(LANG_ONPLAY_MENU_TITLE), NULL, @@ -501,6 +502,9 @@ case 3: /* set as right QS item */ set_as_qs_item(setting, QUICKSCREEN_RIGHT); break; + case 4: /* set as top QS item */ + set_as_qs_item(setting, QUICKSCREEN_TOP); + break; #endif } /* swicth(do_menu()) */ redraw_lists = true; diff -Naur rockbox-19442/apps/settings.h _000/apps/settings.h --- rockbox-19442/apps/settings.h 2008-12-15 12:43:00.000000000 +0900 +++ _000/apps/settings.h 2008-12-15 13:25:58.000000000 +0900 @@ -785,6 +785,7 @@ int qs_item_left; int qs_item_right; int qs_item_bottom; + int qs_item_top; #endif }; diff -Naur rockbox-19442/apps/settings_list.c _000/apps/settings_list.c --- rockbox-19442/apps/settings_list.c 2008-12-15 12:43:00.000000000 +0900 +++ _000/apps/settings_list.c 2008-12-15 13:39:54.875000000 +0900 @@ -1458,6 +1467,10 @@ &global_settings.dirfilter, "qs bottom", qs_load_from_cfg, qs_write_to_cfg, qs_is_changed, qs_set_default), + CUSTOM_SETTING(0, qs_item_top, LANG_TOP_QS_ITEM, + &global_settings.brightness, "qs top", + qs_load_from_cfg, qs_write_to_cfg, + qs_is_changed, qs_set_default), #endif /* Customizable list */ #ifdef HAVE_LCD_BITMAP