From: <mcm...@us...> - 2005-08-28 11:11:58
|
Update of /cvsroot/sc2/sc2/src/sc2code In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28043/src/sc2code Modified Files: setupmenu.c Log Message: Refactored setup menu to use generic widgets Index: setupmenu.c =================================================================== RCS file: /cvsroot/sc2/sc2/src/sc2code/setupmenu.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** setupmenu.c 17 May 2005 02:38:03 -0000 1.12 --- setupmenu.c 28 Aug 2005 11:11:49 -0000 1.13 *************** *** 36,61 **** int anim_frame_count; DWORD NextTime; - int category; - int option; } SETUP_MENU_STATE; typedef SETUP_MENU_STATE *PSETUP_MENU_STATE; - typedef struct { - const char *optname; - const char *tooltip[3]; - } OPTION; - - typedef struct { - const char *category; - int numopts; - OPTION *options; - int selected; - } MENU_CATEGORY; - static BOOLEAN DoSetupMenu (PSETUP_MENU_STATE pInputState); - static STAMP bkgStamp = { {0, 0}, NULL }; ! static OPTION scaler_opts[] = { { "None", { "No scaling.", --- 36,46 ---- int anim_frame_count; DWORD NextTime; } SETUP_MENU_STATE; typedef SETUP_MENU_STATE *PSETUP_MENU_STATE; static BOOLEAN DoSetupMenu (PSETUP_MENU_STATE pInputState); ! static CHOICE_OPTION scaler_opts[] = { { "None", { "No scaling.", *************** *** 84,88 **** } } }; ! static OPTION scanlines_opts[] = { { "Disabled", { "Do not attempt to simulate an interlaced display.", --- 69,73 ---- } } }; ! static CHOICE_OPTION scanlines_opts[] = { { "Disabled", { "Do not attempt to simulate an interlaced display.", *************** *** 96,100 **** } } }; ! static OPTION music_opts[] = { { "PC", { "Uses the music from the Original PC version.", --- 81,85 ---- } } }; ! static CHOICE_OPTION music_opts[] = { { "PC", { "Uses the music from the Original PC version.", *************** *** 108,112 **** } } }; ! static OPTION menu_opts[] = { { "Text", { "In-game menus resemble the Original PC version.", --- 93,97 ---- } } }; ! static CHOICE_OPTION menu_opts[] = { { "Text", { "In-game menus resemble the Original PC version.", *************** *** 120,124 **** } } }; ! static OPTION font_opts[] = { { "Gradients", { "Certain menu texts and dialogs use gradients,", --- 105,109 ---- } } }; ! static CHOICE_OPTION font_opts[] = { { "Gradients", { "Certain menu texts and dialogs use gradients,", *************** *** 132,136 **** } } }; ! static OPTION scan_opts[] = { { "Text", { "Displays planet scan information as text,", --- 117,121 ---- } } }; ! static CHOICE_OPTION scan_opts[] = { { "Text", { "Displays planet scan information as text,", *************** *** 144,148 **** } } }; ! static OPTION scroll_opts[] = { { "Per-Page", { "When fast-forwarding or rewinding conversations", --- 129,133 ---- } } }; ! static CHOICE_OPTION scroll_opts[] = { { "Per-Page", { "When fast-forwarding or rewinding conversations", *************** *** 156,160 **** } } }; ! static OPTION subtitles_opts[] = { { "Disabled", { "Do not subtitle alien speech.", --- 141,145 ---- } } }; ! static CHOICE_OPTION subtitles_opts[] = { { "Disabled", { "Do not subtitle alien speech.", *************** *** 168,172 **** } } }; ! static OPTION resdriver_opts[] = { { "320x240", { "320x240 resolution.", --- 153,157 ---- } } }; ! static CHOICE_OPTION resdriver_opts[] = { { "320x240", { "320x240 resolution.", *************** *** 208,212 **** }; ! static OPTION bpp_opts[] = { { "16", { "16-bit color depth.", --- 193,197 ---- }; ! static CHOICE_OPTION bpp_opts[] = { { "16", { "16-bit color depth.", *************** *** 225,234 **** } } }; - //static char *title_str = "Ur-Quan Masters Setup"; - //static char *subtitle_str = "Graphics Options"; - static const char *title_str = "Use arrows and fire to select options"; - static const char *subtitle_str = "Press cancel when done"; - static const char **tooltip; - #ifdef HAVE_OPENGL #define RES_OPTS 6 --- 210,213 ---- *************** *** 239,253 **** #define NUM_OPTS 9 ! static MENU_CATEGORY cmdline_opts[] = { ! { "Resolution", RES_OPTS, resdriver_opts, 0 }, ! { "Color depth", 3, bpp_opts, 0 }, ! { "Scaler", 5, scaler_opts, 0 }, ! { "Scanlines", 2, scanlines_opts, 0 }, ! { "Menu Style", 2, menu_opts, 0 }, ! { "Font Style", 2, font_opts, 0 }, ! { "Scan Style", 2, scan_opts, 0 }, ! { "Scroll Style", 2, scroll_opts, 0 }, ! { "Subtitles", 2, subtitles_opts, 0 }, ! { NULL, 0, NULL, 0 } }; #define NUM_STEPS 20 --- 218,255 ---- #define NUM_OPTS 9 ! #define CHOICE_PREFACE NULL, Widget_HandleEventChoice, Widget_ReceiveFocusChoice, Widget_DrawChoice, Widget_HeightChoice, Widget_WidthFullScreen ! ! static WIDGET_CHOICE cmdline_opts[] = { ! { CHOICE_PREFACE, "Resolution", RES_OPTS, resdriver_opts, 0, 0}, ! { CHOICE_PREFACE, "Color depth", 3, bpp_opts, 0, 0 }, ! { CHOICE_PREFACE, "Scaler", 5, scaler_opts, 0, 0 }, ! { CHOICE_PREFACE, "Scanlines", 2, scanlines_opts, 0, 0 }, ! { CHOICE_PREFACE, "Menu Style", 2, menu_opts, 0, 0 }, ! { CHOICE_PREFACE, "Font Style", 2, font_opts, 0, 0 }, ! { CHOICE_PREFACE, "Scan Style", 2, scan_opts, 0, 0 }, ! { CHOICE_PREFACE, "Scroll Style", 2, scroll_opts, 0, 0 }, ! { CHOICE_PREFACE, "Subtitles", 2, subtitles_opts, 0, 0 } }; ! ! static WIDGET *opt_widgets[] = { ! (WIDGET *)(&cmdline_opts[0]), ! (WIDGET *)(&cmdline_opts[1]), ! (WIDGET *)(&cmdline_opts[2]), ! (WIDGET *)(&cmdline_opts[3]), ! (WIDGET *)(&cmdline_opts[4]), ! (WIDGET *)(&cmdline_opts[5]), ! (WIDGET *)(&cmdline_opts[6]), ! (WIDGET *)(&cmdline_opts[7]), ! (WIDGET *)(&cmdline_opts[8]) } ; ! ! static WIDGET_MENU_SCREEN menu = { ! NULL, Widget_HandleEventMenuScreen, Widget_ReceiveFocusMenuScreen, ! Widget_DrawMenuScreen, Widget_HeightFullScreen, Widget_WidthFullScreen, ! // "Ur-Quan Masters Setup", ! // "Graphics Options", ! "Use arrows and fire to select options", ! "Press cancel when done", ! { {0, 0}, NULL }, ! 9, opt_widgets, ! 0 }; #define NUM_STEPS 20 *************** *** 298,416 **** } - static void - DrawMenu (PSETUP_MENU_STATE pInputState) - { - RECT r; - COLOR title, oldtext; - COLOR inactive, default_color, selected; - FONT oldfont = SetContextFont (StarConFont); - FONTEFFECT oldFontEffect = SetContextFontEffect (0, 0, 0); - TEXT t; - MENU_CATEGORY *menu; - int cat_index; - - r.corner.x = 2; - r.corner.y = 2; - r.extent.width = SCREEN_WIDTH - 4; - r.extent.height = SCREEN_HEIGHT - 4; - - title = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F); - selected = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x00), 0x0E); - inactive = BUILD_COLOR (MAKE_RGB15 (0x18, 0x18, 0x1F), 0x07); - default_color = title; - - if (!bkgStamp.frame) - { - bkgStamp.origin.x = 0; - bkgStamp.origin.y = 0; - bkgStamp.frame = CaptureDrawable (LoadCelFile (MENU_BKG)); - } - - DrawStamp (&bkgStamp); - - oldtext = SetContextForeGroundColor (title); - t.baseline.x = r.corner.x + (r.extent.width >> 1); - t.baseline.y = r.corner.y + 8; - t.pStr = title_str; - t.align = ALIGN_CENTER; - t.valign = VALIGN_BOTTOM; - t.CharCount = ~0; - font_DrawText (&t); - t.baseline.y += 8; - t.pStr = subtitle_str; - font_DrawText (&t); - - t.baseline.y += 8; - menu = cmdline_opts; - cat_index = 0; - - while (menu->category) - { - int i, home_x, home_y; - - t.baseline.x = r.corner.x; // + (r.extent.width / 8); - t.baseline.y += 16; - t.align = ALIGN_LEFT; - t.pStr = menu->category; - if (pInputState->category == cat_index) - { - SetContextForeGroundColor (selected); - } - else - { - SetContextForeGroundColor (title); - } - font_DrawText (&t); - - home_x = t.baseline.x + 3 * (r.extent.width / 8); - home_y = t.baseline.y; - t.align = ALIGN_CENTER; - for (i = 0; i < menu->numopts; i++) - { - t.baseline.x = home_x + ((i % 3) * (r.extent.width / 4)); - t.baseline.y = home_y + (8 * (i / 3)); - t.pStr = menu->options[i].optname; - if ((pInputState->category == cat_index) && - (pInputState->option == i)) - { - SetContextForeGroundColor (selected); - tooltip = menu->options[i].tooltip; - } - else if (i == menu->selected) - { - SetContextForeGroundColor (default_color); - } - else - { - SetContextForeGroundColor (inactive); - } - font_DrawText (&t); - } - menu++; - cat_index++; - } - t.baseline.x = r.corner.x + (r.extent.width >> 1); - t.baseline.y = r.corner.y + (r.extent.height - 32); - t.pStr = tooltip[0]; - SetContextForeGroundColor (title); - font_DrawText(&t); - t.baseline.y += 8; - t.pStr = tooltip[1]; - font_DrawText(&t); - t.baseline.y += 8; - t.pStr = tooltip[2]; - font_DrawText(&t); - - SetContextFontEffect (oldFontEffect.type, oldFontEffect.from, oldFontEffect.to); - SetContextFont (oldfont); - SetContextForeGroundColor (oldtext); - } - static BOOLEAN DoSetupMenu (PSETUP_MENU_STATE pInputState) { - int opt, cat; - MENU_CATEGORY *menu = cmdline_opts; - if (!pInputState->initialized) { --- 300,306 ---- *************** *** 418,471 **** SetTransitionSource (NULL); pInputState->NextTime = GetTimeCounter (); - pInputState->category = 0; SetDefaults (); ! pInputState->option = menu[0].selected; } BatchGraphics (); ! DrawMenu (pInputState); ! cat = pInputState->category; ! opt = pInputState->option; if (PulsedInputState.key[KEY_MENU_UP]) { ! cat--; ! if (cat < 0) ! { ! cat = NUM_OPTS-1; ! } ! /* Preserve column if possible */ ! opt = menu[cat].selected; } else if (PulsedInputState.key[KEY_MENU_DOWN]) { ! cat++; ! if (cat >= NUM_OPTS) ! { ! cat = 0; ! } ! opt = menu[cat].selected; } else if (PulsedInputState.key[KEY_MENU_LEFT]) { ! opt--; ! if (opt < 0) ! { ! opt = menu[cat].numopts - 1; ! } } else if (PulsedInputState.key[KEY_MENU_RIGHT]) { ! opt++; ! if (opt >= menu[cat].numopts) ! { ! opt = 0; ! } } - pInputState->category = cat; - pInputState->option = opt; if (PulsedInputState.key[KEY_MENU_SELECT]) { ! cmdline_opts[cat].selected = opt; } --- 308,343 ---- SetTransitionSource (NULL); pInputState->NextTime = GetTimeCounter (); SetDefaults (); ! (*menu.receiveFocus) ((WIDGET *)(&menu), WIDGET_EVENT_DOWN); ! } ! if (!menu.bgStamp.frame) ! { ! menu.bgStamp.origin.x = 0; ! menu.bgStamp.origin.y = 0; ! menu.bgStamp.frame = CaptureDrawable (LoadCelFile (MENU_BKG)); } BatchGraphics (); ! (*menu.draw)((WIDGET *)(&menu), 0, 0); if (PulsedInputState.key[KEY_MENU_UP]) { ! Widget_Event (WIDGET_EVENT_UP); } else if (PulsedInputState.key[KEY_MENU_DOWN]) { ! Widget_Event (WIDGET_EVENT_DOWN); } else if (PulsedInputState.key[KEY_MENU_LEFT]) { ! Widget_Event (WIDGET_EVENT_LEFT); } else if (PulsedInputState.key[KEY_MENU_RIGHT]) { ! Widget_Event (WIDGET_EVENT_RIGHT); } if (PulsedInputState.key[KEY_MENU_SELECT]) { ! Widget_Event (WIDGET_EVENT_SELECT); } |