From 2d96383521e1056200f0a7826c42f40cede80042 Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 18 Jan 2008 11:39:59 +0000 Subject: [PATCH] make menu more keyboard aware; improve skinnability git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3169 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/gfx/menu/default/skinvalues.txt | 142 ++++++++++++---- data/gfx/menu/xaw/skinvalues.txt | 136 +++++++++++---- data/qcsrc/menu-div0test/item/checkbox.c | 4 - data/qcsrc/menu-div0test/item/inputbox.c | 13 +- data/qcsrc/menu-div0test/menu.qc | 2 +- data/qcsrc/menu-div0test/nexuiz/campaign.c | 26 ++- .../nexuiz/dialog_multiplayer_create.c | 3 + .../dialog_multiplayer_create_mutators.c | 3 +- data/qcsrc/menu-div0test/nexuiz/maplist.c | 39 ++++- data/qcsrc/menu-div0test/nexuiz/serverlist.c | 26 ++- .../menu-div0test/skin-customizables.inc | 155 +++++++++++++----- data/qcsrc/menu-div0test/skin.qh | 2 +- 12 files changed, 412 insertions(+), 139 deletions(-) diff --git a/data/gfx/menu/default/skinvalues.txt b/data/gfx/menu/default/skinvalues.txt index 033eda919..a9dbc056c 100644 --- a/data/gfx/menu/default/skinvalues.txt +++ b/data/gfx/menu/default/skinvalues.txt @@ -1,50 +1,122 @@ -ALPHAS_MAINMENU '0.6 0.8 0.9' -ALPHA_DISABLED 0.2 -ALPHA_BEHIND 0.3 -COLOR_BUTTON_C '1 1 1' -COLOR_BUTTON_D '1 1 1' -COLOR_BUTTON_F '1 1 1' -COLOR_BUTTON_N '1 1 1' -COLOR_CHECKBOX_C '1 1 1' -COLOR_CHECKBOX_D '1 1 1' -COLOR_CHECKBOX_F '1 1 1' -COLOR_CHECKBOX_N '1 1 1' -COLOR_DIALOG_MAPINFO '0.7 0.7 1' +// font sizes (used for everything) +FONTSIZE_NORMAL 12 +HEIGHT_NORMAL 1.5 +FONTSIZE_TITLE 24 +HEIGHT_TITLE 1.5 + +// the individual dialog background colors COLOR_DIALOG_MULTIPLAYER '0.7 0.7 1' -COLOR_DIALOG_MUTATORS '0.7 0.7 1' -COLOR_DIALOG_QUIT '1 0 0' COLOR_DIALOG_SETTINGS '0.7 0.7 1' COLOR_DIALOG_TEAMSELECT '1 1 1' +COLOR_DIALOG_QUIT '1 0 0' +COLOR_DIALOG_MUTATORS '0.7 0.7 1' +COLOR_DIALOG_MAPINFO '0.7 0.7 1' COLOR_DIALOG_USERBIND '0.7 0.7 1' COLOR_DIALOG_SINGLEPLAYER '1 1 0.7' -COLOR_INPUTBOX_F '1 1 1' + +// mouse +// uses "cursor" images +SIZE_CURSOR '32 32 0' +OFFSET_CURSOR '0 0 0' +ALPHA_CURSOR_INTRO 0 + +// general +// uses "background" images +ALPHA_DISABLED 0.2 +ALPHA_BEHIND 0.5 + +// item: button +// uses "button" images +// uses "buttongray" images +COLOR_BUTTON_N '1 1 1' +COLOR_BUTTON_C '1 1 1' +COLOR_BUTTON_F '1 1 1' +COLOR_BUTTON_D '1 1 1' + +// item: campaign +ALPHA_CAMPAIGN_SELECTABLE 0.8 +COLOR_CAMPAIGN_SELECTABLE '1 1 1' +ALPHA_CAMPAIGN_CURRENT 1 +COLOR_CAMPAIGN_CURRENT '1 1 0' +ALPHA_CAMPAIGN_FUTURE 0.2 +COLOR_CAMPAIGN_FUTURE '1 1 1' +ALPHA_CAMPAIGN_DESCRIPTION 0.7 + +// item: checkbox +// uses "checkbox" images +COLOR_CHECKBOX_N '1 1 1' +COLOR_CHECKBOX_C '1 1 1' +COLOR_CHECKBOX_F '1 1 1' +COLOR_CHECKBOX_D '1 1 1' + +// item: crosshair button +// uses "crosshairbutton" images + +// item: dialog +// uses "border" images +// uses "closebutton" images +MARGIN_TOP 8 +MARGIN_LEFT 8 +MARGIN_COLUMNS 4 +MARGIN_ROWS 4 + +// item: input box +// uses "inputbox" images COLOR_INPUTBOX_N '1 1 1' -COLOR_MAPLIST_AUTHOR '0.4 0.4 0.7' +COLOR_INPUTBOX_F '1 1 1' +MARGIN_INPUTBOX 0.02 + +// item: list box +COLOR_LISTBOX_SELECTED '0 0 1' +ALPHA_LISTBOX_SELECTED 0.5 + +// item: map list COLOR_MAPLIST_TITLE '1 1 1' +COLOR_MAPLIST_AUTHOR '0.4 0.4 0.7' +COLOR_MAPLIST_INCLUDEDBG '0 0 0' +ALPHA_MAPLIST_INCLUDEDFG 1 +ALPHA_MAPLIST_INCLUDEDBG 0.5 +ALPHA_MAPLIST_NOTINCLUDEDFG 0.4 + +// item: nexposee +ALPHAS_MAINMENU '0.6 0.8 0.9' + +// item: player color button +// uses "colorbutton" images +// uses "color" images + +// item: player name editor +// uses "charmap" images +// uses "charmapbutton" images + +// item: radio button +// uses "radiobutton" images +COLOR_RADIOBUTTON_N '1 1 1' COLOR_RADIOBUTTON_C '1 1 1' -COLOR_RADIOBUTTON_D '1 1 1' COLOR_RADIOBUTTON_F '1 1 1' -COLOR_RADIOBUTTON_N '1 1 1' -COLOR_SCROLLBAR_F '1 1 1' +COLOR_RADIOBUTTON_D '1 1 1' + +// item: scrollbar +// uses "scrollbar" images COLOR_SCROLLBAR_N '1 1 1' +COLOR_SCROLLBAR_F '1 1 1' COLOR_SCROLLBAR_S '1 1 1' +WIDTH_SCROLLBAR 16 + +// item: server list +ALPHA_SERVERLIST_FULL 0.2 +ALPHA_SERVERLIST_EMPTY 0.5 +COLOR_SERVERLIST_LOWPING '0 1 0' +COLOR_SERVERLIST_MEDPING '1 1 0' +COLOR_SERVERLIST_HIGHPING '1 0 0' +ALPHA_SERVERLIST_HIGHPING 0.2 + +// item: slider +// uses "slider" images +COLOR_SLIDER_N '1 1 1' COLOR_SLIDER_C '1 1 1' -COLOR_SLIDER_D '1 1 1' COLOR_SLIDER_F '1 1 1' -COLOR_SLIDER_N '1 1 1' +COLOR_SLIDER_D '1 1 1' COLOR_SLIDER_S '1 1 1' -FONTSIZE_NORMAL 12 -FONTSIZE_TITLE 24 -HEIGHT_NORMAL 1.5 -HEIGHT_TITLE 1.5 -MARGIN_COLUMNS 4 -MARGIN_INPUTBOX 0.02 -MARGIN_LEFT 8 -MARGIN_ROWS 4 -MARGIN_TOP 8 -TOLERANCE_SLIDER '0.2 2 0' -WIDTH_SCROLLBAR 16 WIDTH_SLIDERTEXT 0.333333333333 -SIZE_CURSOR '32 32 0' -OFFSET_CURSOR '0 0 0' -ALPHA_CURSOR_INTRO 0 +TOLERANCE_SLIDER '0.2 2 0' diff --git a/data/gfx/menu/xaw/skinvalues.txt b/data/gfx/menu/xaw/skinvalues.txt index a4820cdf6..c8ceb9c08 100644 --- a/data/gfx/menu/xaw/skinvalues.txt +++ b/data/gfx/menu/xaw/skinvalues.txt @@ -1,14 +1,10 @@ -ALPHAS_MAINMENU '1 1 1' -ALPHA_DISABLED 0.2 -ALPHA_BEHIND 1 -COLOR_BUTTON_C '1 1 1' -COLOR_BUTTON_D '1 1 1' -COLOR_BUTTON_F '1 1 1' -COLOR_BUTTON_N '1 1 1' -COLOR_CHECKBOX_C '1 1 1' -COLOR_CHECKBOX_D '1 1 1' -COLOR_CHECKBOX_F '1 1 1' -COLOR_CHECKBOX_N '1 1 1' +// font sizes (used for everything) +FONTSIZE_NORMAL 12 +HEIGHT_NORMAL 1.5 +FONTSIZE_TITLE 24 +HEIGHT_TITLE 1.5 + +// the individual dialog background colors COLOR_DIALOG_MAPINFO '1 1 1' COLOR_DIALOG_MULTIPLAYER '1 1 1' COLOR_DIALOG_MUTATORS '1 1 1' @@ -17,34 +13,110 @@ COLOR_DIALOG_SETTINGS '1 1 1' COLOR_DIALOG_TEAMSELECT '1 1 1' COLOR_DIALOG_USERBIND '1 1 1' COLOR_DIALOG_SINGLEPLAYER '1 1 1' -COLOR_INPUTBOX_F '1 1 1' + +// mouse +// uses cursor.tga +SIZE_CURSOR '32 32 0' +OFFSET_CURSOR '0 0 0' +ALPHA_CURSOR_INTRO 1 + +// general +// uses background.tga +ALPHA_DISABLED 0.2 +ALPHA_BEHIND 1 + +// item: button +// uses button.tga +// uses buttongray.tga +COLOR_BUTTON_N '1 1 1' +COLOR_BUTTON_C '1 1 1' +COLOR_BUTTON_F '1 1 1' +COLOR_BUTTON_D '1 1 1' + +// item: campaign +ALPHA_CAMPAIGN_SELECTABLE 0.8 +COLOR_CAMPAIGN_SELECTABLE '1 1 1' +ALPHA_CAMPAIGN_CURRENT 1 +COLOR_CAMPAIGN_CURRENT '1 1 0' +ALPHA_CAMPAIGN_FUTURE 0.2 +COLOR_CAMPAIGN_FUTURE '1 1 1' +ALPHA_CAMPAIGN_DESCRIPTION 0.7 + +// item: checkbox +// uses checkbox.tga +COLOR_CHECKBOX_N '1 1 1' +COLOR_CHECKBOX_C '1 1 1' +COLOR_CHECKBOX_F '1 1 1' +COLOR_CHECKBOX_D '1 1 1' + +// item: crosshair button +// uses crosshairbutton.tga + +// item: dialog +// uses border.tga +// uses closebutton.tga +MARGIN_TOP 8 +MARGIN_LEFT 8 +MARGIN_COLUMNS 4 +MARGIN_ROWS 4 + +// item: input box +// uses inputbox.tga COLOR_INPUTBOX_N '1 1 1' -COLOR_MAPLIST_AUTHOR '0.5 0.5 0.5' +COLOR_INPUTBOX_F '1 1 1' +MARGIN_INPUTBOX 0.02 + +// item: list box +COLOR_LISTBOX_SELECTED '0 0 1' +ALPHA_LISTBOX_SELECTED 0.5 + +// item: map list COLOR_MAPLIST_TITLE '1 1 1' +COLOR_MAPLIST_AUTHOR '0.5 0.5 0.5' +COLOR_MAPLIST_INCLUDEDBG '0 0 0' +ALPHA_MAPLIST_INCLUDEDFG 1 +ALPHA_MAPLIST_INCLUDEDBG 0.5 +ALPHA_MAPLIST_NOTINCLUDEDFG 0.4 + +// item: nexposee +ALPHAS_MAINMENU '1 1 1' + +// item: player color button +// uses colorbutton.tga +// uses color.tga + +// item: player name editor +// uses charmap.tga +// uses charmapbutton.tga + +// item: radio button +// uses radiobutton.tga +COLOR_RADIOBUTTON_N '1 1 1' COLOR_RADIOBUTTON_C '1 1 1' -COLOR_RADIOBUTTON_D '1 1 1' COLOR_RADIOBUTTON_F '1 1 1' -COLOR_RADIOBUTTON_N '1 1 1' -COLOR_SCROLLBAR_F '1 1 1' +COLOR_RADIOBUTTON_D '1 1 1' + +// item: scrollbar +// uses scrollbar.tga COLOR_SCROLLBAR_N '1 1 1' +COLOR_SCROLLBAR_F '1 1 1' COLOR_SCROLLBAR_S '1 1 1' +WIDTH_SCROLLBAR 16 + +// item: server list +ALPHA_SERVERLIST_FULL 0.2 +ALPHA_SERVERLIST_EMPTY 0.5 +COLOR_SERVERLIST_LOWPING '0 1 0' +COLOR_SERVERLIST_MEDPING '1 1 0' +COLOR_SERVERLIST_HIGHPING '1 0 0' +ALPHA_SERVERLIST_HIGHPING 0.2 + +// item: slider +// uses slider.tga +COLOR_SLIDER_N '1 1 1' COLOR_SLIDER_C '1 1 1' -COLOR_SLIDER_D '1 1 1' COLOR_SLIDER_F '1 1 1' -COLOR_SLIDER_N '1 1 1' +COLOR_SLIDER_D '1 1 1' COLOR_SLIDER_S '1 1 1' -FONTSIZE_NORMAL 12 -FONTSIZE_TITLE 24 -HEIGHT_NORMAL 1.5 -HEIGHT_TITLE 1.5 -MARGIN_COLUMNS 4 -MARGIN_INPUTBOX 0.02 -MARGIN_LEFT 8 -MARGIN_ROWS 4 -MARGIN_TOP 8 -TOLERANCE_SLIDER '0.2 2 0' -WIDTH_SCROLLBAR 16 WIDTH_SLIDERTEXT 0.333333333333 -SIZE_CURSOR '32 32 0' -OFFSET_CURSOR '0.5 0.5 0' -ALPHA_CURSOR_INTRO 1 +TOLERANCE_SLIDER '0.2 2 0' diff --git a/data/qcsrc/menu-div0test/item/checkbox.c b/data/qcsrc/menu-div0test/item/checkbox.c index a633eaded..40fa6675b 100644 --- a/data/qcsrc/menu-div0test/item/checkbox.c +++ b/data/qcsrc/menu-div0test/item/checkbox.c @@ -31,10 +31,6 @@ void configureCheckBoxCheckBox(entity me, string txt, float sz, string gfx) me.configureButton(me, txt, sz, gfx); me.align = 0; } -void showNotifyCheckBox(entity me) -{ - me.focusable = !me.disabled; -} void drawCheckBox(entity me) { float s; diff --git a/data/qcsrc/menu-div0test/item/inputbox.c b/data/qcsrc/menu-div0test/item/inputbox.c index b9b0cea85..7afd04517 100644 --- a/data/qcsrc/menu-div0test/item/inputbox.c +++ b/data/qcsrc/menu-div0test/item/inputbox.c @@ -8,6 +8,7 @@ CLASS(InputBox) EXTENDS(Label) METHOD(InputBox, mouseRelease, float(entity, vector)) METHOD(InputBox, mousePress, float(entity, vector)) METHOD(InputBox, mouseDrag, float(entity, vector)) + METHOD(InputBox, showNotify, void(entity)) ATTRIB(InputBox, src, string, string_null) @@ -15,6 +16,7 @@ CLASS(InputBox) EXTENDS(Label) ATTRIB(InputBox, scrollPos, float, 0) // widths ATTRIB(InputBox, focusable, float, 1) + ATTRIB(InputBox, disabled, float, 0) ATTRIB(InputBox, lastChangeTime, float, 0) ATTRIB(InputBox, dragScrollTimer, float, 0) ATTRIB(InputBox, dragScrollPos, vector, '0 0 0') @@ -131,9 +133,13 @@ void drawInputBox(entity me) if(me.pressed) me.mouseDrag(me, me.dragScrollPos); // simulate mouseDrag event + me.focusable = !me.disabled; + if(me.disabled) + draw_alpha *= me.disabledAlpha; + if(me.src) { - if(me.focused) + if(me.focused && !me.disabled) draw_ButtonPicture('0 0 0', strcat(me.src, "_f"), '1 1 0', me.colorF, 1); else draw_ButtonPicture('0 0 0', strcat(me.src, "_n"), '1 1 0', me.color, 1); @@ -222,4 +228,9 @@ void drawInputBox(entity me) draw_ClearClip(); } + +void showNotifyInputBox(entity me) +{ + me.focusable = !me.disabled; +} #endif diff --git a/data/qcsrc/menu-div0test/menu.qc b/data/qcsrc/menu-div0test/menu.qc index 6fe57648d..0ee204089 100644 --- a/data/qcsrc/menu-div0test/menu.qc +++ b/data/qcsrc/menu-div0test/menu.qc @@ -79,7 +79,7 @@ void() m_init_delayed = Skin_ApplySetting(argv(0), argv(1)); fclose(fh); - draw_setMousePointer("cursor", SKINSIZE_CURSOR, SKINOFFSET_CURSOR); + draw_setMousePointer(SKINGFX_CURSOR, SKINSIZE_CURSOR, SKINOFFSET_CURSOR); conwidth = conheight = -1; draw_reset(); diff --git a/data/qcsrc/menu-div0test/nexuiz/campaign.c b/data/qcsrc/menu-div0test/nexuiz/campaign.c index 80cfbb793..2917dd789 100644 --- a/data/qcsrc/menu-div0test/nexuiz/campaign.c +++ b/data/qcsrc/menu-div0test/nexuiz/campaign.c @@ -7,6 +7,7 @@ CLASS(NexuizCampaignList) EXTENDS(NexuizListBox) METHOD(NexuizCampaignList, clickListBoxItem, void(entity, float, vector)) METHOD(NexuizCampaignList, resizeNotify, void(entity, vector, vector, vector, vector)) METHOD(NexuizCampaignList, setSelected, void(entity, float)) + METHOD(NexuizCampaignList, keyDown, float(entity, float, float, float)) ATTRIB(NexuizCampaignList, realFontSize, vector, '0 0 0') ATTRIB(NexuizCampaignList, columnPreviewOrigin, float, 0) @@ -193,22 +194,22 @@ void drawListBoxItemNexuizCampaignList(entity me, float i, vector absSize, float if(i < me.campaignIndex) { - theAlpha = 1; - theColor = '1 1 1'; + theAlpha = SKINALPHA_CAMPAIGN_SELECTABLE; + theColor = SKINCOLOR_CAMPAIGN_SELECTABLE; } else if(i == me.campaignIndex) { - theAlpha = 1; - theColor = '1 1 0'; + theAlpha = SKINALPHA_CAMPAIGN_CURRENT; + theColor = SKINCOLOR_CAMPAIGN_CURRENT; } else { - theAlpha = 0.2; - theColor = '1 1 1'; + theAlpha = SKINALPHA_CAMPAIGN_FUTURE; + theColor = SKINCOLOR_CAMPAIGN_FUTURE; } if(isSelected) - draw_Fill('0 0 0', '1 1 0', '0 0 1', 0.5); + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); s = ftos(p); draw_Picture(me.columnPreviewOrigin * eX, strcat("/maps/", campaign_mapname[i]), me.columnPreviewSize * eX + eY, '1 1 1', theAlpha); @@ -229,7 +230,7 @@ void drawListBoxItemNexuizCampaignList(entity me, float i, vector absSize, float for(j = 0; j < n; ++j) if(argv(j) != "") { - draw_Text(o, argv(j), me.realFontSize, theColor, theAlpha * 0.7, 0); + draw_Text(o, argv(j), me.realFontSize, theColor, theAlpha * SKINALPHA_CAMPAIGN_DESCRIPTION, 0); o_y += me.realFontSize_y; } else @@ -248,4 +249,13 @@ void setSelectedNexuizCampaignList(entity me, float i) // prevent too late items from being played setSelectedListBox(me, min(i, me.campaignIndex)); } + +float keyDownNexuizCampaignList(entity me, float scan, float ascii, float shift) +{ + if(scan == K_ENTER || scan == K_SPACE) + CampaignList_LoadMap(me, me); + else + return keyDownListBox(me, scan, ascii, shift); + return 1; +} #endif diff --git a/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create.c b/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create.c index 16b715522..e37af7068 100644 --- a/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create.c +++ b/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create.c @@ -140,8 +140,11 @@ void fillNexuizServerCreateTab(entity me) me.TDempty(me, 0.2); me.TD(me, 1, 0.8, e = makeNexuizTextLabel(0, "Bot names:")); me.TD(me, 1, 0.7, e = makeNexuizInputBox(1, "bot_prefix")); + setDependent(e, "bot_number", 0, -1); me.TD(me, 1, 0.6, e = makeNexuizTextLabel(0.5, "Spellbinder")); + setDependent(e, "bot_number", 0, -1); me.TD(me, 1, 0.7, e = makeNexuizInputBox(1, "bot_suffix")); + setDependent(e, "bot_number", 0, -1); me.TR(me); me.TR(me); me.TD(me, 1, 1, e = makeNexuizButton("Mutators...", '0 0 0')); diff --git a/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create_mutators.c b/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create_mutators.c index 9b3257f01..c8a849739 100644 --- a/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create_mutators.c +++ b/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_create_mutators.c @@ -85,10 +85,11 @@ void fillNexuizMutatorsDialog(entity me) me.TD(me, 1, 2, e = makeNexuizRadioButton(1, "g_rocketarena", string_null, "Rocket launcher arena")); me.gotoXY(me, me.rows - 2, 0); - s = makeNexuizSlider(80, 400, 40, "sv_gravity"); + s = makeNexuizSlider(80, 400, 8, "sv_gravity"); s.valueDigits = 0; s.valueDisplayMultiplier = 0.125; // show gravity in percent me.TD(me, 1, 1, e = makeNexuizSliderCheckBox(800, 1, s, "Low gravity")); + e.savedValue = 200; // good on silvercity me.TD(me, 1, 3, s); me.gotoXY(me, me.rows - 1, 0); diff --git a/data/qcsrc/menu-div0test/nexuiz/maplist.c b/data/qcsrc/menu-div0test/nexuiz/maplist.c index 1daecbddb..803fb1390 100644 --- a/data/qcsrc/menu-div0test/nexuiz/maplist.c +++ b/data/qcsrc/menu-div0test/nexuiz/maplist.c @@ -7,6 +7,7 @@ CLASS(NexuizMapList) EXTENDS(NexuizListBox) METHOD(NexuizMapList, clickListBoxItem, void(entity, float, vector)) METHOD(NexuizMapList, resizeNotify, void(entity, vector, vector, vector, vector)) METHOD(NexuizMapList, refilter, void(entity)) + METHOD(NexuizMapList, keyDown, float(entity, float, float, float)) ATTRIB(NexuizMapList, realFontSize, vector, '0 0 0') ATTRIB(NexuizMapList, columnPreviewOrigin, float, 0) @@ -153,25 +154,22 @@ void drawListBoxItemNexuizMapList(entity me, float i, vector absSize, float isSe // layout: Ping, Map name, Map name, NP, TP, MP string s; float p; - vector theColor; float theAlpha; float included; - theColor = '1 1 1'; - if(!MapInfo_Get_ByID(i)) return; included = me.g_maplistCacheQuery(me, i); if(included) - theAlpha = 1; + theAlpha = SKINALPHA_MAPLIST_INCLUDEDFG; else - theAlpha = 0.4; + theAlpha = SKINALPHA_MAPLIST_NOTINCLUDEDFG; if(isSelected) - draw_Fill('0 0 0', '1 1 0', '0 0 1', 0.5); + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); else if(included) - draw_Fill('0 0 0', '1 1 0', '0 0 0', 0.5); + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_MAPLIST_INCLUDEDBG, SKINALPHA_MAPLIST_INCLUDEDBG); s = ftos(p); draw_Picture(me.columnPreviewOrigin * eX, strcat("/maps/", MapInfo_Map_bspname), me.columnPreviewSize * eX + eY, '1 1 1', theAlpha); @@ -253,4 +251,31 @@ void MapList_LoadMap(entity btn, entity me) me.refilter(me); } } + +float keyDownNexuizMapList(entity me, float scan, float ascii, float shift) +{ + if(scan == K_ENTER) + { + // pop up map info screen + main.mapInfoDialog.loadMapInfo(main.mapInfoDialog, me.selectedItem); + DialogOpenButton_Click_withCoords(NULL, main.mapInfoDialog, me.origin + eX * (me.columnNameOrigin * me.size_x) + eY * ((me.itemHeight * me.selectedItem - me.scrollPos) * me.size_y), eY * me.itemAbsSize_y + eX * (me.itemAbsSize_x * me.columnNameSize)); + } + else if(scan == K_SPACE) + { + me.g_maplistCacheToggle(me, me.selectedItem); + } + else if(ascii == 43) // + + { + if not(me.g_maplistCacheQuery(me, me.selectedItem)) + me.g_maplistCacheToggle(me, me.selectedItem); + } + else if(ascii == 45) // - + { + if(me.g_maplistCacheQuery(me, me.selectedItem)) + me.g_maplistCacheToggle(me, me.selectedItem); + } + else + return keyDownListBox(me, scan, ascii, shift); + return 1; +} #endif diff --git a/data/qcsrc/menu-div0test/nexuiz/serverlist.c b/data/qcsrc/menu-div0test/nexuiz/serverlist.c index af552edb7..d93e3807f 100644 --- a/data/qcsrc/menu-div0test/nexuiz/serverlist.c +++ b/data/qcsrc/menu-div0test/nexuiz/serverlist.c @@ -6,6 +6,7 @@ CLASS(NexuizServerList) EXTENDS(NexuizListBox) METHOD(NexuizServerList, drawListBoxItem, void(entity, float, vector, float)) METHOD(NexuizServerList, clickListBoxItem, void(entity, float, vector)) METHOD(NexuizServerList, resizeNotify, void(entity, vector, vector, vector, vector)) + METHOD(NexuizServerList, keyDown, float(entity, float, float, float)) ATTRIB(NexuizServerList, realFontSize, vector, '0 0 0') ATTRIB(NexuizServerList, realUpperMargin, float, 0) @@ -323,29 +324,29 @@ void drawListBoxItemNexuizServerList(entity me, float i, vector absSize, float i float theAlpha; if(isSelected) - draw_Fill('0 0 0', '1 1 0', '0 0 1', 0.5); + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); if(gethostcachenumber(SLIST_FIELD_NUMPLAYERS, i) >= gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i)) - theAlpha = 0.2; + theAlpha = SKINALPHA_SERVERLIST_FULL; else if not(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i)) - theAlpha = 0.5; + theAlpha = SKINALPHA_SERVERLIST_EMPTY; else theAlpha = 1; p = gethostcachenumber(SLIST_FIELD_PING, i); if(p < 50) - theColor = eX * (p / 50) + eY; + theColor = SKINCOLOR_SERVERLIST_LOWPING + (SKINCOLOR_SERVERLIST_MEDPING - SKINCOLOR_SERVERLIST_LOWPING) * (p / 50); else if(p < 150) - theColor = eX + eY * ((150 - p) / 100); + theColor = SKINCOLOR_SERVERLIST_MEDPING + (SKINCOLOR_SERVERLIST_HIGHPING - SKINCOLOR_SERVERLIST_MEDPING) * ((p - 50) / 100); else if(p < 650) { - theColor = eX; - theAlpha *= 0.1 + 0.9 * (650 - p) / 500; + theColor = SKINCOLOR_SERVERLIST_HIGHPING; + theAlpha *= 1 + (SKINALPHA_SERVERLIST_HIGHPING - 1) * ((p - 150) / 500); } else { theColor = eX; - theAlpha *= 0.1; + theAlpha *= SKINALPHA_SERVERLIST_HIGHPING; } s = ftos(p); @@ -357,4 +358,13 @@ void drawListBoxItemNexuizServerList(entity me, float i, vector absSize, float i s = strcat(ftos(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i)), "/", ftos(gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i))); draw_Text(me.realUpperMargin * eY + (me.columnPlayersOrigin + (me.columnPlayersSize - draw_TextWidth(s, 0) * me.realFontSize_x) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha, 0); } + +float keyDownNexuizServerList(entity me, float scan, float ascii, float shift) +{ + if(scan == K_ENTER || scan == K_SPACE) + ServerList_Connect_Click(NULL, me); + else + return keyDownListBox(me, scan, ascii, shift); + return 1; +} #endif diff --git a/data/qcsrc/menu-div0test/skin-customizables.inc b/data/qcsrc/menu-div0test/skin-customizables.inc index b718bacde..9164d97ca 100644 --- a/data/qcsrc/menu-div0test/skin-customizables.inc +++ b/data/qcsrc/menu-div0test/skin-customizables.inc @@ -1,82 +1,155 @@ +#if 0 +"Perl code to convert this to a skinvalues.txt file."; +while() +{ + chomp; + if(/^\s*(?:SKINFLOAT|SKINVECTOR)\(([A-Z_]+), ([-'0-9. ]+)\);$/) + { + printf "%-31s %s\n", $1, $2; + } + elsif(/^\s*SKINSTRING\(([A-Z_]+), "(.*)"\);$/) + { + printf "// uses \"$2\" images\n"; + } + elsif(/^$/) + { + print "\n"; + } + elsif(/^\s+\/\/ (.*)$/) + { + print "// $1\n"; + } + elsif(/^SKINBEGIN$|^SKINEND$|^#endif$/) + { + } + else + { + print "!!! $_\n"; + } +} +__DATA__ +#endif SKINBEGIN + // font sizes (used for everything) SKINFLOAT(FONTSIZE_NORMAL, 12); SKINFLOAT(HEIGHT_NORMAL, 1.5); - SKINFLOAT(FONTSIZE_TITLE, 24); SKINFLOAT(HEIGHT_TITLE, 1.5); + // the individual dialog background colors + SKINVECTOR(COLOR_DIALOG_MULTIPLAYER, '0.7 0.7 1'); + SKINVECTOR(COLOR_DIALOG_SETTINGS, '0.7 0.7 1'); + SKINVECTOR(COLOR_DIALOG_TEAMSELECT, '1 1 1'); + SKINVECTOR(COLOR_DIALOG_QUIT, '1 0 0'); + SKINVECTOR(COLOR_DIALOG_MUTATORS, '0.7 0.7 1'); + SKINVECTOR(COLOR_DIALOG_MAPINFO, '0.7 0.7 1'); + SKINVECTOR(COLOR_DIALOG_USERBIND, '0.7 0.7 1'); + SKINVECTOR(COLOR_DIALOG_SINGLEPLAYER, '1 1 0.7'); + + // mouse + SKINSTRING(GFX_CURSOR, "cursor"); + SKINVECTOR(SIZE_CURSOR, '32 32 0'); + SKINVECTOR(OFFSET_CURSOR, '0 0 0'); + SKINFLOAT(ALPHA_CURSOR_INTRO, 0); + + // general + SKINSTRING(GFX_BACKGROUND, "background"); + SKINFLOAT(ALPHA_DISABLED, 0.2); + SKINFLOAT(ALPHA_BEHIND, 0.5); + + // item: button SKINSTRING(GFX_BUTTON, "button"); + SKINSTRING(GFX_BUTTON_GRAY, "buttongray"); SKINVECTOR(COLOR_BUTTON_N, '1 1 1'); SKINVECTOR(COLOR_BUTTON_C, '1 1 1'); SKINVECTOR(COLOR_BUTTON_F, '1 1 1'); SKINVECTOR(COLOR_BUTTON_D, '1 1 1'); - SKINSTRING(GFX_BUTTON_GRAY, "buttongray"); + // item: campaign + SKINFLOAT(ALPHA_CAMPAIGN_SELECTABLE, 0.8); + SKINVECTOR(COLOR_CAMPAIGN_SELECTABLE, '1 1 1'); + SKINFLOAT(ALPHA_CAMPAIGN_CURRENT, 1); + SKINVECTOR(COLOR_CAMPAIGN_CURRENT, '1 1 0'); + SKINFLOAT(ALPHA_CAMPAIGN_FUTURE, 0.2); + SKINVECTOR(COLOR_CAMPAIGN_FUTURE, '1 1 1'); + SKINFLOAT(ALPHA_CAMPAIGN_DESCRIPTION, 0.7); + // item: checkbox SKINSTRING(GFX_CHECKBOX, "checkbox"); SKINVECTOR(COLOR_CHECKBOX_N, '1 1 1'); SKINVECTOR(COLOR_CHECKBOX_C, '1 1 1'); SKINVECTOR(COLOR_CHECKBOX_F, '1 1 1'); SKINVECTOR(COLOR_CHECKBOX_D, '1 1 1'); + // item: crosshair button + SKINSTRING(GFX_CROSSHAIRBUTTON, "crosshairbutton"); + + // item: dialog SKINSTRING(GFX_DIALOGBORDER, "border"); SKINSTRING(GFX_CLOSEBUTTON, "closebutton"); SKINFLOAT(MARGIN_TOP, 8); SKINFLOAT(MARGIN_LEFT, 8); SKINFLOAT(MARGIN_COLUMNS, 4); SKINFLOAT(MARGIN_ROWS, 4); - SKINVECTOR(COLOR_DIALOG_MULTIPLAYER, '0.7 0.7 1'); - SKINVECTOR(COLOR_DIALOG_SETTINGS, '0.7 0.7 1'); - SKINVECTOR(COLOR_DIALOG_TEAMSELECT, '1 1 1'); - SKINVECTOR(COLOR_DIALOG_QUIT, '1 0 0'); - SKINVECTOR(COLOR_DIALOG_MUTATORS, '0.7 0.7 1'); - SKINVECTOR(COLOR_DIALOG_MAPINFO, '0.7 0.7 1'); - SKINVECTOR(COLOR_DIALOG_USERBIND, '0.7 0.7 1'); - SKINVECTOR(COLOR_DIALOG_SINGLEPLAYER, '1 1 0.7'); - - SKINSTRING(GFX_SLIDER, "slider"); - SKINVECTOR(COLOR_SLIDER_N, '1 1 1'); - SKINVECTOR(COLOR_SLIDER_C, '1 1 1'); - SKINVECTOR(COLOR_SLIDER_F, '1 1 1'); - SKINVECTOR(COLOR_SLIDER_D, '1 1 1'); - SKINVECTOR(COLOR_SLIDER_S, '1 1 1'); - SKINFLOAT(WIDTH_SLIDERTEXT, 0.333333333333); - SKINVECTOR(TOLERANCE_SLIDER, '0.2 2 0'); - - SKINSTRING(GFX_RADIOBUTTON, "radiobutton"); - SKINVECTOR(COLOR_RADIOBUTTON_N, '1 1 1'); - SKINVECTOR(COLOR_RADIOBUTTON_C, '1 1 1'); - SKINVECTOR(COLOR_RADIOBUTTON_F, '1 1 1'); - SKINVECTOR(COLOR_RADIOBUTTON_D, '1 1 1'); - - SKINSTRING(GFX_COLORBUTTON, "colorbutton"); - SKINSTRING(GFX_COLORBUTTON_COLOR, "color"); - SKINSTRING(GFX_CROSSHAIRBUTTON, "crosshairbutton"); - SKINSTRING(GFX_SCROLLBAR, "scrollbar"); - SKINVECTOR(COLOR_SCROLLBAR_N, '1 1 1'); - SKINVECTOR(COLOR_SCROLLBAR_F, '1 1 1'); - SKINVECTOR(COLOR_SCROLLBAR_S, '1 1 1'); - SKINFLOAT(WIDTH_SCROLLBAR, 16); + // item: input box SKINSTRING(GFX_INPUTBOX, "inputbox"); SKINVECTOR(COLOR_INPUTBOX_N, '1 1 1'); SKINVECTOR(COLOR_INPUTBOX_F, '1 1 1'); SKINFLOAT(MARGIN_INPUTBOX, 0.02); + // item: list box + SKINVECTOR(COLOR_LISTBOX_SELECTED, '0 0 1'); + SKINFLOAT(ALPHA_LISTBOX_SELECTED, 0.5); + + // item: map list SKINVECTOR(COLOR_MAPLIST_TITLE, '1 1 1'); SKINVECTOR(COLOR_MAPLIST_AUTHOR, '0.4 0.4 0.7'); + SKINVECTOR(COLOR_MAPLIST_INCLUDEDBG, '0 0 0'); + SKINFLOAT(ALPHA_MAPLIST_INCLUDEDFG, 1); + SKINFLOAT(ALPHA_MAPLIST_INCLUDEDBG, 0.5); + SKINFLOAT(ALPHA_MAPLIST_NOTINCLUDEDFG, 0.4); - SKINFLOAT(ALPHA_DISABLED, 0.2); - SKINFLOAT(ALPHA_BEHIND, 0.5); + // item: nexposee + SKINVECTOR(ALPHAS_MAINMENU, '0.6 0.8 0.9'); + + // item: player color button + SKINSTRING(GFX_COLORBUTTON, "colorbutton"); + SKINSTRING(GFX_COLORBUTTON_COLOR, "color"); + // item: player name editor SKINSTRING(GFX_CHARMAP, "charmap"); SKINSTRING(GFX_CHARMAP_SELECTED, "charmapbutton"); - SKINSTRING(GFX_BACKGROUND, "background"); + // item: radio button + SKINSTRING(GFX_RADIOBUTTON, "radiobutton"); + SKINVECTOR(COLOR_RADIOBUTTON_N, '1 1 1'); + SKINVECTOR(COLOR_RADIOBUTTON_C, '1 1 1'); + SKINVECTOR(COLOR_RADIOBUTTON_F, '1 1 1'); + SKINVECTOR(COLOR_RADIOBUTTON_D, '1 1 1'); - SKINVECTOR(ALPHAS_MAINMENU, '0.6 0.8 0.9'); + // item: scrollbar + SKINSTRING(GFX_SCROLLBAR, "scrollbar"); + SKINVECTOR(COLOR_SCROLLBAR_N, '1 1 1'); + SKINVECTOR(COLOR_SCROLLBAR_F, '1 1 1'); + SKINVECTOR(COLOR_SCROLLBAR_S, '1 1 1'); + SKINFLOAT(WIDTH_SCROLLBAR, 16); - SKINVECTOR(SIZE_CURSOR, '32 32 0'); - SKINVECTOR(OFFSET_CURSOR, '0 0 0'); - SKINFLOAT(ALPHA_CURSOR_INTRO, 0); + // item: server list + SKINFLOAT(ALPHA_SERVERLIST_FULL, 0.2); + SKINFLOAT(ALPHA_SERVERLIST_EMPTY, 0.5); + SKINVECTOR(COLOR_SERVERLIST_LOWPING, '0 1 0'); + SKINVECTOR(COLOR_SERVERLIST_MEDPING, '1 1 0'); + SKINVECTOR(COLOR_SERVERLIST_HIGHPING, '1 0 0'); + SKINFLOAT(ALPHA_SERVERLIST_HIGHPING, 0.2); + + // item: slider + SKINSTRING(GFX_SLIDER, "slider"); + SKINVECTOR(COLOR_SLIDER_N, '1 1 1'); + SKINVECTOR(COLOR_SLIDER_C, '1 1 1'); + SKINVECTOR(COLOR_SLIDER_F, '1 1 1'); + SKINVECTOR(COLOR_SLIDER_D, '1 1 1'); + SKINVECTOR(COLOR_SLIDER_S, '1 1 1'); + SKINFLOAT(WIDTH_SLIDERTEXT, 0.333333333333); + SKINVECTOR(TOLERANCE_SLIDER, '0.2 2 0'); SKINEND diff --git a/data/qcsrc/menu-div0test/skin.qh b/data/qcsrc/menu-div0test/skin.qh index c22b027aa..96463be3e 100644 --- a/data/qcsrc/menu-div0test/skin.qh +++ b/data/qcsrc/menu-div0test/skin.qh @@ -14,7 +14,7 @@ #define SKINVECTOR(name,def) case #name: SKIN##name = stov(value); break #define SKINFLOAT(name,def) case #name: SKIN##name = stof(value); break #define SKINSTRING(name,def) break -#define SKINEND default: print("Invalid key in skin file: ", key, "\n"); } } +#define SKINEND case "": break; case "//": break; default: print("Invalid key in skin file: ", key, "\n"); } } #include "skin-customizables.inc" #undef SKINEND #undef SKINSTRING -- 2.39.2