Fix major issues with last commit - tidy up window callbacks to dodge EVENT_WINDOW_ACTIVATED where it's unnecessary or erroneous to respond to, fix compiling error
This commit is contained in:
parent
88d1b32914
commit
7e92589332
|
@ -3,6 +3,7 @@ D1X-Rebirth Changelog
|
|||
20100120
|
||||
--------
|
||||
arch/include/event.h, arch/sdl/event.c, arch/sdl/window.c, main/automap.c, main/game.c, main/gamecntl.c, main/kconfig.c, main/menu.c, main/net_ipx.c, main/net_udp.c, main/newmenu.c, main/state.c: Add EVENT_WINDOW_ACTIVATED, change EVENT_DRAW to EVENT_WINDOW_DRAW and EVENT_CLOSE to EVENT_WINDOW_CLOSE
|
||||
main/automap.c, main/game.c, main/gamecntl.c, main/kconfig.c, main/newmenu.c: Fix major issues with last commit - tidy up window callbacks to dodge EVENT_WINDOW_ACTIVATED where it's unnecessary or erroneous to respond to
|
||||
|
||||
20100119
|
||||
--------
|
||||
|
|
|
@ -351,41 +351,11 @@ extern int set_segment_depths(int start_seg, ubyte *segbuf);
|
|||
|
||||
#define MAP_BACKGROUND_FILENAME "MAP.PCX"
|
||||
|
||||
int automap_handler(window *wind, d_event *event, automap *am)
|
||||
int automap_idle(window *wind, d_event *event, automap *am)
|
||||
{
|
||||
vms_matrix tempm;
|
||||
int c;
|
||||
|
||||
if (event->type == EVENT_WINDOW_DRAW)
|
||||
{
|
||||
draw_automap(am);
|
||||
return 1;
|
||||
}
|
||||
else if (event->type == EVENT_WINDOW_CLOSE)
|
||||
{
|
||||
#ifdef OGL
|
||||
gr_free_bitmap_data(&am->automap_background);
|
||||
#endif
|
||||
d_free(am->edges);
|
||||
d_free(am->drawingListBright);
|
||||
|
||||
game_flush_inputs();
|
||||
|
||||
if (am->pause_game)
|
||||
{
|
||||
start_time();
|
||||
digi_resume_digi_sounds();
|
||||
}
|
||||
|
||||
Screen_mode=-1; set_screen_mode(SCREEN_GAME);
|
||||
init_cockpit();
|
||||
last_drawn_cockpit = -1;
|
||||
game_flush_inputs();
|
||||
d_free(am);
|
||||
window_set_visible(Game_wind, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( am->leave_mode==0 && Controls.automap_state && (timer_get_fixed_seconds()-am->entry_time)>LEAVE_TIME)
|
||||
am->leave_mode = 1;
|
||||
|
||||
|
@ -444,7 +414,7 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
|||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case KEY_ALTED+KEY_F: // Alt+F shows full map, if cheats enabled
|
||||
if (Cheats_enabled)
|
||||
{
|
||||
|
@ -456,9 +426,9 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
|||
}
|
||||
break;
|
||||
#ifndef NDEBUG
|
||||
case KEY_DEBUGGED+KEY_F: {
|
||||
case KEY_DEBUGGED+KEY_F: {
|
||||
int i;
|
||||
|
||||
|
||||
for (i=0; i<=Highest_segment_index; i++ )
|
||||
Automap_visited[i] = 1;
|
||||
automap_build_edge_list(am);
|
||||
|
@ -469,20 +439,20 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
|||
break;
|
||||
#endif
|
||||
|
||||
case KEY_F9:
|
||||
case KEY_F9:
|
||||
if (am->segment_limit > 1) {
|
||||
am->segment_limit--;
|
||||
adjust_segment_limit(am, am->segment_limit);
|
||||
}
|
||||
break;
|
||||
case KEY_F10:
|
||||
case KEY_F10:
|
||||
if (am->segment_limit < am->max_segments_away) {
|
||||
am->segment_limit++;
|
||||
adjust_segment_limit(am, am->segment_limit);
|
||||
}
|
||||
break;
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
gr_toggle_fullscreen();
|
||||
break;
|
||||
}
|
||||
|
@ -537,6 +507,49 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
|||
}
|
||||
am->t1 = am->t2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int automap_handler(window *wind, d_event *event, automap *am)
|
||||
{
|
||||
switch (event->type)
|
||||
{
|
||||
case EVENT_IDLE:
|
||||
return automap_idle(wind, event, am);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
draw_automap(am);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
#ifdef OGL
|
||||
gr_free_bitmap_data(&am->automap_background);
|
||||
#endif
|
||||
d_free(am->edges);
|
||||
d_free(am->drawingListBright);
|
||||
|
||||
game_flush_inputs();
|
||||
|
||||
if (am->pause_game)
|
||||
{
|
||||
start_time();
|
||||
digi_resume_digi_sounds();
|
||||
}
|
||||
|
||||
Screen_mode=-1; set_screen_mode(SCREEN_GAME);
|
||||
init_cockpit();
|
||||
last_drawn_cockpit = -1;
|
||||
game_flush_inputs();
|
||||
d_free(am);
|
||||
window_set_visible(Game_wind, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
163
main/game.c
163
main/game.c
|
@ -990,79 +990,101 @@ window *game_setup(void)
|
|||
|
||||
void game_render_frame();
|
||||
|
||||
window *Game_wind = NULL;
|
||||
|
||||
// Event handler for the game
|
||||
int game_handler(window *wind, d_event *event, void *data)
|
||||
{
|
||||
data = data;
|
||||
|
||||
if (event->type == EVENT_WINDOW_DRAW)
|
||||
switch (event->type)
|
||||
{
|
||||
if (force_cockpit_redraw) { //screen need redrawing?
|
||||
init_cockpit();
|
||||
force_cockpit_redraw=0;
|
||||
}
|
||||
game_render_frame();
|
||||
|
||||
return 1;
|
||||
case EVENT_IDLE:
|
||||
// GAME LOOP!
|
||||
Config_menu_flag = 0;
|
||||
|
||||
calc_frame_time();
|
||||
|
||||
ReadControls(); // will have its own event(s) eventually
|
||||
if (window_get_front() != wind)
|
||||
return 1;
|
||||
|
||||
GameProcessFrame();
|
||||
|
||||
//see if redbook song needs to be restarted
|
||||
RBACheckFinishedHook(); // Handle RedBook Audio Repeating.
|
||||
|
||||
if (Config_menu_flag) {
|
||||
if (!(Game_mode&GM_MULTI)) palette_save();
|
||||
do_options_menu();
|
||||
if (!(Game_mode&GM_MULTI)) palette_restore();
|
||||
}
|
||||
|
||||
if ( (Function_mode != FMODE_GAME) && GameArg.SysAutoDemo && (Newdemo_state != ND_STATE_NORMAL) ) {
|
||||
int choice, fmode;
|
||||
fmode = Function_mode;
|
||||
Function_mode = FMODE_GAME;
|
||||
choice=nm_messagebox( NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_AUTODEMO );
|
||||
Function_mode = fmode;
|
||||
if (choice==0) {
|
||||
GameArg.SysAutoDemo = 0;
|
||||
newdemo_stop_playback();
|
||||
Function_mode = FMODE_MENU;
|
||||
} else {
|
||||
Function_mode = FMODE_GAME;
|
||||
}
|
||||
}
|
||||
|
||||
if ( (Function_mode != FMODE_GAME ) && (Newdemo_state != ND_STATE_PLAYBACK ) && (Function_mode!=FMODE_EDITOR))
|
||||
{
|
||||
int choice, fmode;
|
||||
fmode = Function_mode;
|
||||
Function_mode = FMODE_GAME;
|
||||
choice=nm_messagebox( NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME );
|
||||
Function_mode = fmode;
|
||||
if (choice != 0)
|
||||
Function_mode = FMODE_GAME;
|
||||
}
|
||||
|
||||
if (Function_mode != FMODE_GAME)
|
||||
longjmp(LeaveGame,0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
if (force_cockpit_redraw) { //screen need redrawing?
|
||||
init_cockpit();
|
||||
force_cockpit_redraw=0;
|
||||
}
|
||||
game_render_frame();
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
digi_stop_all();
|
||||
|
||||
if ( (Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED) )
|
||||
newdemo_stop_recording();
|
||||
|
||||
#ifdef NETWORK
|
||||
multi_leave_game();
|
||||
#endif
|
||||
|
||||
if ( Newdemo_state == ND_STATE_PLAYBACK )
|
||||
newdemo_stop_playback();
|
||||
|
||||
clear_warn_func(game_show_warning); //don't use this func anymore
|
||||
game_disable_cheats();
|
||||
Game_wind = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
else if (event->type == EVENT_WINDOW_CLOSE)
|
||||
// Will have abort dialog here...
|
||||
return 1;
|
||||
|
||||
// GAME LOOP!
|
||||
Config_menu_flag = 0;
|
||||
|
||||
calc_frame_time();
|
||||
|
||||
ReadControls(); // will have its own event(s) eventually
|
||||
if (window_get_front() != wind)
|
||||
return 1;
|
||||
|
||||
GameProcessFrame();
|
||||
|
||||
//see if redbook song needs to be restarted
|
||||
RBACheckFinishedHook(); // Handle RedBook Audio Repeating.
|
||||
|
||||
if (Config_menu_flag) {
|
||||
if (!(Game_mode&GM_MULTI)) palette_save();
|
||||
do_options_menu();
|
||||
if (!(Game_mode&GM_MULTI)) palette_restore();
|
||||
}
|
||||
|
||||
if ( (Function_mode != FMODE_GAME) && GameArg.SysAutoDemo && (Newdemo_state != ND_STATE_NORMAL) ) {
|
||||
int choice, fmode;
|
||||
fmode = Function_mode;
|
||||
Function_mode = FMODE_GAME;
|
||||
choice=nm_messagebox( NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_AUTODEMO );
|
||||
Function_mode = fmode;
|
||||
if (choice==0) {
|
||||
GameArg.SysAutoDemo = 0;
|
||||
newdemo_stop_playback();
|
||||
Function_mode = FMODE_MENU;
|
||||
} else {
|
||||
Function_mode = FMODE_GAME;
|
||||
}
|
||||
}
|
||||
|
||||
if ( (Function_mode != FMODE_GAME ) && (Newdemo_state != ND_STATE_PLAYBACK ) && (Function_mode!=FMODE_EDITOR)
|
||||
) {
|
||||
int choice, fmode;
|
||||
fmode = Function_mode;
|
||||
Function_mode = FMODE_GAME;
|
||||
choice=nm_messagebox( NULL, 2, TXT_YES, TXT_NO, TXT_ABORT_GAME );
|
||||
Function_mode = fmode;
|
||||
if (choice != 0)
|
||||
Function_mode = FMODE_GAME;
|
||||
}
|
||||
|
||||
if (Function_mode != FMODE_GAME)
|
||||
longjmp(LeaveGame,0);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
window *Game_wind = NULL;
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
//this function is the game. called when game mode selected. runs until
|
||||
//editor mode or exit selected
|
||||
|
@ -1072,24 +1094,9 @@ void game()
|
|||
|
||||
if ( setjmp(LeaveGame)==0 ) {
|
||||
|
||||
while (1)
|
||||
while (Game_wind)
|
||||
event_process();
|
||||
}
|
||||
|
||||
digi_stop_all();
|
||||
|
||||
if ( (Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED) )
|
||||
newdemo_stop_recording();
|
||||
|
||||
#ifdef NETWORK
|
||||
multi_leave_game();
|
||||
#endif
|
||||
|
||||
if ( Newdemo_state == ND_STATE_PLAYBACK )
|
||||
newdemo_stop_playback();
|
||||
|
||||
clear_warn_func(game_show_warning); //don't use this func anymore
|
||||
game_disable_cheats();
|
||||
|
||||
window_close(Game_wind);
|
||||
}
|
||||
|
|
|
@ -228,50 +228,56 @@ int pause_handler(window *wind, d_event *event, char *msg)
|
|||
{
|
||||
int key;
|
||||
|
||||
if (event->type == EVENT_WINDOW_DRAW)
|
||||
switch (event->type)
|
||||
{
|
||||
show_boxed_message(msg, 1);
|
||||
return 1;
|
||||
}
|
||||
else if (event->type == EVENT_WINDOW_CLOSE)
|
||||
{
|
||||
game_flush_inputs();
|
||||
reset_cockpit();
|
||||
start_time();
|
||||
if (EXT_MUSIC_ON)
|
||||
ext_music_resume();
|
||||
digi_resume_all();
|
||||
d_free(msg);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
timer_delay2(50);
|
||||
|
||||
key = key_inkey();
|
||||
|
||||
switch (key) {
|
||||
case 0:
|
||||
case EVENT_IDLE:
|
||||
timer_delay2(50);
|
||||
|
||||
key = key_inkey();
|
||||
|
||||
switch (key) {
|
||||
case 0:
|
||||
break;
|
||||
case KEY_ESC:
|
||||
//Function_mode = FMODE_MENU; // Don't like this, just press escape twice (kreatordxx)
|
||||
window_close(wind);
|
||||
break;
|
||||
case KEY_F1:
|
||||
show_help();
|
||||
break;
|
||||
case KEY_PAUSE:
|
||||
window_close(wind);
|
||||
break;
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
gr_toggle_fullscreen();
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
break;
|
||||
case KEY_ESC:
|
||||
//Function_mode = FMODE_MENU; // Don't like this, just press escape twice (kreatordxx)
|
||||
window_close(wind);
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
show_boxed_message(msg, 1);
|
||||
break;
|
||||
case KEY_F1:
|
||||
show_help();
|
||||
break;
|
||||
case KEY_PAUSE:
|
||||
window_close(wind);
|
||||
break;
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
gr_toggle_fullscreen();
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
game_flush_inputs();
|
||||
reset_cockpit();
|
||||
start_time();
|
||||
if (EXT_MUSIC_ON)
|
||||
ext_music_resume();
|
||||
digi_resume_all();
|
||||
d_free(msg);
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
129
main/kconfig.c
129
main/kconfig.c
|
@ -504,7 +504,7 @@ int get_item_height(kc_item *item)
|
|||
void nm_draw_background1(char * filename);
|
||||
void kc_drawquestion( kc_menu *menu, kc_item *item );
|
||||
|
||||
void kconfig_sub_draw_table(kc_menu *menu)
|
||||
void kconfig_draw(kc_menu *menu)
|
||||
{
|
||||
grs_canvas * save_canvas = grd_curcanv;
|
||||
grs_font * save_font;
|
||||
|
@ -642,48 +642,13 @@ void kconfig_start_changing(kc_menu *menu)
|
|||
menu->changing = 1;
|
||||
}
|
||||
|
||||
int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
||||
int kconfig_idle(window *wind, d_event *event, kc_menu *menu)
|
||||
{
|
||||
grs_canvas * save_canvas = grd_curcanv;
|
||||
int i,k;
|
||||
#ifdef NEWMENU_MOUSE
|
||||
int mx, my, mz, x1, x2, y1, y2;
|
||||
#endif
|
||||
|
||||
if (event->type == EVENT_WINDOW_DRAW)
|
||||
{
|
||||
kconfig_sub_draw_table(menu);
|
||||
return 1;
|
||||
}
|
||||
else if (event->type == EVENT_WINDOW_CLOSE)
|
||||
{
|
||||
game_flush_inputs();
|
||||
newmenu_hide_cursor();
|
||||
if (menu->time_stopped)
|
||||
start_time();
|
||||
d_free(menu);
|
||||
|
||||
// Update save values...
|
||||
|
||||
for (i=0; i<NUM_KEY_CONTROLS; i++ )
|
||||
PlayerCfg.KeySettings[0][i] = kc_keyboard[i].value;
|
||||
|
||||
if ( CONTROL_USING_JOYSTICK )
|
||||
{
|
||||
for (i=0; i<NUM_JOYSTICK_CONTROLS; i++ )
|
||||
PlayerCfg.KeySettings[CONTROL_JOYSTICK][i] = kc_joystick[i].value;
|
||||
}
|
||||
if ( CONTROL_USING_MOUSE )
|
||||
{
|
||||
for (i=0; i<NUM_MOUSE_CONTROLS; i++ )
|
||||
PlayerCfg.KeySettings[CONTROL_MOUSE][i] = kc_mouse[i].value;
|
||||
}
|
||||
|
||||
for (i=0; i<NUM_D1X_CONTROLS; i++)
|
||||
PlayerCfg.KeySettingsD1X[i] = kc_d1x[i].value;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (menu->changing)
|
||||
timer_delay(f0_1/10);
|
||||
|
@ -722,7 +687,7 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef NETWORK
|
||||
if ( !menu->time_stopped )
|
||||
if (multi_menu_poll() == -1)
|
||||
|
@ -772,47 +737,47 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case KEY_DELETE:
|
||||
case KEY_DELETE:
|
||||
menu->items[menu->citem].value=255;
|
||||
break;
|
||||
case KEY_UP:
|
||||
case KEY_PAD8:
|
||||
case KEY_UP:
|
||||
case KEY_PAD8:
|
||||
#ifdef TABLE_CREATION
|
||||
if (menu->items[menu->citem].u==-1) menu->items[menu->citem].u=find_next_item_up( menu->items,menu->nitems, menu->citem);
|
||||
#endif
|
||||
menu->citem = menu->items[menu->citem].u;
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
case KEY_PAD2:
|
||||
case KEY_DOWN:
|
||||
case KEY_PAD2:
|
||||
#ifdef TABLE_CREATION
|
||||
if (menu->items[menu->citem].d==-1) menu->items[menu->citem].d=find_next_item_down( menu->items,menu->nitems, menu->citem);
|
||||
#endif
|
||||
menu->citem = menu->items[menu->citem].d;
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
case KEY_PAD4:
|
||||
case KEY_LEFT:
|
||||
case KEY_PAD4:
|
||||
#ifdef TABLE_CREATION
|
||||
if (menu->items[menu->citem].l==-1) menu->items[menu->citem].l=find_next_item_left( menu->items,menu->nitems, menu->citem);
|
||||
#endif
|
||||
menu->citem = menu->items[menu->citem].l;
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
case KEY_PAD6:
|
||||
case KEY_RIGHT:
|
||||
case KEY_PAD6:
|
||||
#ifdef TABLE_CREATION
|
||||
if (menu->items[menu->citem].r==-1) menu->items[menu->citem].r=find_next_item_right( menu->items,menu->nitems, menu->citem);
|
||||
#endif
|
||||
menu->citem = menu->items[menu->citem].r;
|
||||
break;
|
||||
case KEY_ENTER:
|
||||
case KEY_PADENTER:
|
||||
case KEY_ENTER:
|
||||
case KEY_PADENTER:
|
||||
kconfig_start_changing(menu);
|
||||
break;
|
||||
case -2:
|
||||
case KEY_ESC:
|
||||
case -2:
|
||||
case KEY_ESC:
|
||||
window_close(wind);
|
||||
break;
|
||||
#ifdef TABLE_CREATION
|
||||
case KEY_F12: {
|
||||
case KEY_F12: {
|
||||
FILE * fp;
|
||||
for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
|
||||
kc_keyboard[i].u = find_next_item_up( kc_keyboard,NUM_KEY_CONTROLS, i);
|
||||
|
@ -891,17 +856,17 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
|||
}
|
||||
break;
|
||||
#endif
|
||||
case 0: // some other event
|
||||
case 0: // some other event
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef NEWMENU_MOUSE
|
||||
gr_set_current_canvas(window_get_canvas(wind));
|
||||
|
||||
|
||||
if ( (menu->mouse_state && !menu->omouse_state) || (menu->mouse_state && menu->omouse_state) ) {
|
||||
int item_height;
|
||||
|
||||
|
@ -936,13 +901,61 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
|||
menu->changing = 0;
|
||||
gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
|
||||
game_flush_inputs();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
gr_set_current_canvas(save_canvas);
|
||||
#endif // NEWMENU_MOUSE
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case EVENT_IDLE:
|
||||
return kconfig_idle(wind, event, menu);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
kconfig_draw(menu);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
game_flush_inputs();
|
||||
newmenu_hide_cursor();
|
||||
if (menu->time_stopped)
|
||||
start_time();
|
||||
d_free(menu);
|
||||
|
||||
// Update save values...
|
||||
|
||||
for (i=0; i<NUM_KEY_CONTROLS; i++ )
|
||||
PlayerCfg.KeySettings[0][i] = kc_keyboard[i].value;
|
||||
|
||||
if ( CONTROL_USING_JOYSTICK )
|
||||
{
|
||||
for (i=0; i<NUM_JOYSTICK_CONTROLS; i++ )
|
||||
PlayerCfg.KeySettings[CONTROL_JOYSTICK][i] = kc_joystick[i].value;
|
||||
}
|
||||
if ( CONTROL_USING_MOUSE )
|
||||
{
|
||||
for (i=0; i<NUM_MOUSE_CONTROLS; i++ )
|
||||
PlayerCfg.KeySettings[CONTROL_MOUSE][i] = kc_mouse[i].value;
|
||||
}
|
||||
|
||||
for (i=0; i<NUM_D1X_CONTROLS; i++)
|
||||
PlayerCfg.KeySettingsD1X[i] = kc_d1x[i].value;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
372
main/newmenu.c
372
main/newmenu.c
|
@ -549,117 +549,16 @@ int newmenu_get_citem(newmenu *menu)
|
|||
return menu->citem;
|
||||
}
|
||||
|
||||
int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||
int newmenu_idle(window *wind, d_event *event, newmenu *menu)
|
||||
{
|
||||
int old_choice, i, tw, th, k = -1, sx, sy;
|
||||
int old_choice, i, k = -1;
|
||||
grs_canvas *menu_canvas = window_get_canvas(wind), *save_canvas = grd_curcanv;
|
||||
int string_width, string_height, average_width;
|
||||
char *Temp,TempVal;
|
||||
#ifdef NEWMENU_MOUSE
|
||||
int mx=0, my=0, mz=0, x1 = 0, x2, y1, y2;
|
||||
#endif
|
||||
int rval = 0;
|
||||
|
||||
if (event->type == EVENT_WINDOW_CLOSE)
|
||||
{
|
||||
// Don't allow cancel here - handle item selected events / key events instead
|
||||
if (menu->subfunction)
|
||||
(*menu->subfunction)(menu, event, menu->userdata);
|
||||
|
||||
newmenu_hide_cursor();
|
||||
game_flush_inputs();
|
||||
|
||||
if (menu->time_stopped)
|
||||
start_time();
|
||||
|
||||
if ( menu->sound_stopped )
|
||||
digi_resume_digi_sounds();
|
||||
|
||||
// d_free(menu); // have to wait until newmenus use a separate event loop
|
||||
|
||||
return 1; // always close
|
||||
}
|
||||
|
||||
if (event->type == EVENT_WINDOW_DRAW)
|
||||
{
|
||||
int ty;
|
||||
|
||||
gr_set_current_canvas( NULL );
|
||||
#ifdef OGL
|
||||
nm_draw_background1(menu->filename);
|
||||
#endif
|
||||
if (menu->filename == NULL)
|
||||
nm_draw_background(menu->x-(menu->is_scroll_box?FSPACX(5):0),menu->y,menu->x+menu->w,menu->y+menu->h);
|
||||
|
||||
gr_set_current_canvas( menu_canvas );
|
||||
|
||||
ty = BORDERY;
|
||||
|
||||
if ( menu->title ) {
|
||||
gr_set_curfont(HUGE_FONT);
|
||||
gr_set_fontcolor( BM_XRGB(31,31,31), -1 );
|
||||
gr_get_string_size(menu->title,&string_width,&string_height,&average_width );
|
||||
tw = string_width;
|
||||
th = string_height;
|
||||
gr_printf( 0x8000, ty, menu->title );
|
||||
}
|
||||
|
||||
if ( menu->subtitle ) {
|
||||
gr_set_curfont(MEDIUM3_FONT);
|
||||
gr_set_fontcolor( BM_XRGB(21,21,21), -1 );
|
||||
gr_get_string_size(menu->subtitle,&string_width,&string_height,&average_width );
|
||||
tw = string_width;
|
||||
th = (menu->title?th:0);
|
||||
gr_printf( 0x8000, ty+th, menu->subtitle );
|
||||
}
|
||||
|
||||
if (menu->tiny_mode)
|
||||
gr_set_curfont(GAME_FONT);
|
||||
else
|
||||
gr_set_curfont(MEDIUM1_FONT);
|
||||
|
||||
// Redraw everything...
|
||||
for (i=menu->scroll_offset; i<menu->max_displayable+menu->scroll_offset; i++ )
|
||||
{
|
||||
menu->items[i].y-=(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
draw_item( &menu->items[i], (i==menu->citem && !menu->all_text),menu->tiny_mode );
|
||||
menu->items[i].y+=(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
|
||||
}
|
||||
|
||||
if (menu->is_scroll_box)
|
||||
{
|
||||
menu->last_scroll_check=menu->scroll_offset;
|
||||
gr_set_curfont(MEDIUM2_FONT);
|
||||
|
||||
sy=menu->items[menu->scroll_offset].y-(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
sx=menu->items[menu->scroll_offset].x-FSPACX(11);
|
||||
|
||||
|
||||
if (menu->scroll_offset!=0)
|
||||
nm_rstring( FSPACX(11), sx, sy, UP_ARROW_MARKER );
|
||||
else
|
||||
nm_rstring( FSPACX(11), sx, sy, " " );
|
||||
|
||||
sy=menu->items[menu->scroll_offset+menu->max_displayable-1].y-(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
sx=menu->items[menu->scroll_offset+menu->max_displayable-1].x-FSPACX(11);
|
||||
|
||||
if (menu->scroll_offset+menu->max_displayable<menu->nitems)
|
||||
nm_rstring( FSPACX(11), sx, sy, DOWN_ARROW_MARKER );
|
||||
else
|
||||
nm_rstring( FSPACX(11), sx, sy, " " );
|
||||
|
||||
}
|
||||
|
||||
// Only allow drawing over the top of the default stuff
|
||||
if (menu->subfunction)
|
||||
(*menu->subfunction)(menu, event, menu->userdata);
|
||||
|
||||
gr_set_current_canvas(save_canvas);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
timer_delay2(50);
|
||||
|
||||
#ifdef NEWMENU_MOUSE
|
||||
|
@ -689,7 +588,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
|||
}
|
||||
|
||||
gr_set_current_canvas(menu_canvas);
|
||||
|
||||
|
||||
if (menu->tiny_mode)
|
||||
gr_set_curfont(GAME_FONT);
|
||||
else
|
||||
|
@ -700,10 +599,10 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
|||
if (k)
|
||||
{
|
||||
d_event_keycommand key_event; // for now - will be passed through newmenu_handler later
|
||||
|
||||
|
||||
key_event.type = EVENT_KEY_COMMAND;
|
||||
key_event.keycode = k;
|
||||
|
||||
|
||||
rval = (*menu->subfunction)(menu, (d_event *)&key_event, menu->userdata);
|
||||
k = key_event.keycode;
|
||||
}
|
||||
|
@ -880,7 +779,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
|||
event->type = EVENT_NEWMENU_SELECTED;
|
||||
if (menu->subfunction && (*menu->subfunction)(menu, event, menu->userdata))
|
||||
return 1;
|
||||
|
||||
|
||||
menu->done = 1;
|
||||
gr_set_current_canvas(save_canvas);
|
||||
return 1;
|
||||
|
@ -1239,6 +1138,127 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
|||
|
||||
gr_set_current_canvas(save_canvas);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int newmenu_draw(window *wind, d_event *event, newmenu *menu)
|
||||
{
|
||||
grs_canvas *menu_canvas = window_get_canvas(wind), *save_canvas = grd_curcanv;
|
||||
int tw, th, ty, sx, sy;
|
||||
int i;
|
||||
int string_width, string_height, average_width;
|
||||
|
||||
gr_set_current_canvas( NULL );
|
||||
#ifdef OGL
|
||||
nm_draw_background1(menu->filename);
|
||||
#endif
|
||||
if (menu->filename == NULL)
|
||||
nm_draw_background(menu->x-(menu->is_scroll_box?FSPACX(5):0),menu->y,menu->x+menu->w,menu->y+menu->h);
|
||||
|
||||
gr_set_current_canvas( menu_canvas );
|
||||
|
||||
ty = BORDERY;
|
||||
|
||||
if ( menu->title ) {
|
||||
gr_set_curfont(HUGE_FONT);
|
||||
gr_set_fontcolor( BM_XRGB(31,31,31), -1 );
|
||||
gr_get_string_size(menu->title,&string_width,&string_height,&average_width );
|
||||
tw = string_width;
|
||||
th = string_height;
|
||||
gr_printf( 0x8000, ty, menu->title );
|
||||
}
|
||||
|
||||
if ( menu->subtitle ) {
|
||||
gr_set_curfont(MEDIUM3_FONT);
|
||||
gr_set_fontcolor( BM_XRGB(21,21,21), -1 );
|
||||
gr_get_string_size(menu->subtitle,&string_width,&string_height,&average_width );
|
||||
tw = string_width;
|
||||
th = (menu->title?th:0);
|
||||
gr_printf( 0x8000, ty+th, menu->subtitle );
|
||||
}
|
||||
|
||||
if (menu->tiny_mode)
|
||||
gr_set_curfont(GAME_FONT);
|
||||
else
|
||||
gr_set_curfont(MEDIUM1_FONT);
|
||||
|
||||
// Redraw everything...
|
||||
for (i=menu->scroll_offset; i<menu->max_displayable+menu->scroll_offset; i++ )
|
||||
{
|
||||
menu->items[i].y-=(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
draw_item( &menu->items[i], (i==menu->citem && !menu->all_text),menu->tiny_mode );
|
||||
menu->items[i].y+=(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
|
||||
}
|
||||
|
||||
if (menu->is_scroll_box)
|
||||
{
|
||||
menu->last_scroll_check=menu->scroll_offset;
|
||||
gr_set_curfont(MEDIUM2_FONT);
|
||||
|
||||
sy=menu->items[menu->scroll_offset].y-(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
sx=menu->items[menu->scroll_offset].x-FSPACX(11);
|
||||
|
||||
|
||||
if (menu->scroll_offset!=0)
|
||||
nm_rstring( FSPACX(11), sx, sy, UP_ARROW_MARKER );
|
||||
else
|
||||
nm_rstring( FSPACX(11), sx, sy, " " );
|
||||
|
||||
sy=menu->items[menu->scroll_offset+menu->max_displayable-1].y-(((int)LINE_SPACING)*menu->scroll_offset);
|
||||
sx=menu->items[menu->scroll_offset+menu->max_displayable-1].x-FSPACX(11);
|
||||
|
||||
if (menu->scroll_offset+menu->max_displayable<menu->nitems)
|
||||
nm_rstring( FSPACX(11), sx, sy, DOWN_ARROW_MARKER );
|
||||
else
|
||||
nm_rstring( FSPACX(11), sx, sy, " " );
|
||||
|
||||
}
|
||||
|
||||
// Only allow drawing over the top of the default stuff
|
||||
if (menu->subfunction)
|
||||
(*menu->subfunction)(menu, event, menu->userdata);
|
||||
|
||||
gr_set_current_canvas(save_canvas);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||
{
|
||||
switch (event->type)
|
||||
{
|
||||
case EVENT_IDLE:
|
||||
return newmenu_idle(wind, event, menu);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
return newmenu_draw(wind, event, menu);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
// Don't allow cancel here - handle item selected events / key events instead
|
||||
if (menu->subfunction)
|
||||
(*menu->subfunction)(menu, event, menu->userdata);
|
||||
|
||||
newmenu_hide_cursor();
|
||||
game_flush_inputs();
|
||||
|
||||
if (menu->time_stopped)
|
||||
start_time();
|
||||
|
||||
if ( menu->sound_stopped )
|
||||
digi_resume_digi_sounds();
|
||||
|
||||
// d_free(menu); // have to wait until newmenus use a separate event loop
|
||||
break; // always close
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1679,7 +1699,7 @@ void listbox_delete_item(listbox *lb, int item)
|
|||
}
|
||||
}
|
||||
|
||||
int listbox_handler(window *wind, d_event *event, listbox *lb)
|
||||
int listbox_idle(window *wind, d_event *event, listbox *lb)
|
||||
{
|
||||
int i;
|
||||
int ocitem, ofirst_item, key;
|
||||
|
@ -1688,57 +1708,6 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
#endif
|
||||
int rval = 0;
|
||||
|
||||
if (event->type == EVENT_WINDOW_CLOSE)
|
||||
{
|
||||
// Don't allow cancel here - handle item selected events / key events instead
|
||||
if (lb->listbox_callback)
|
||||
(*lb->listbox_callback)(lb, event, lb->userdata);
|
||||
|
||||
newmenu_hide_cursor();
|
||||
return 1; // always close
|
||||
}
|
||||
|
||||
if (event->type == EVENT_WINDOW_DRAW)
|
||||
{
|
||||
#ifdef OGL
|
||||
nm_draw_background1(NULL);
|
||||
#endif
|
||||
nm_draw_background( lb->box_x-BORDERX,lb->box_y-lb->title_height-BORDERY,lb->box_x+lb->box_w+BORDERX,lb->box_y+lb->height+BORDERY );
|
||||
gr_set_curfont(MEDIUM3_FONT);
|
||||
gr_string( 0x8000, lb->box_y - lb->title_height, lb->title );
|
||||
|
||||
gr_setcolor( BM_XRGB( 0,0,0) );
|
||||
for (i=lb->first_item; i<lb->first_item+LB_ITEMS_ON_SCREEN; i++ ) {
|
||||
int y = (i-lb->first_item)*LINE_SPACING+lb->box_y;
|
||||
if ( i >= lb->nitems ) {
|
||||
gr_setcolor( BM_XRGB(5,5,5));
|
||||
gr_rect( lb->box_x + lb->box_w - FSPACX(1), y-FSPACY(1), lb->box_x + lb->box_w, y + LINE_SPACING);
|
||||
gr_setcolor( BM_XRGB(2,2,2));
|
||||
gr_rect( lb->box_x - FSPACX(1), y - FSPACY(1), lb->box_x, y + LINE_SPACING );
|
||||
gr_setcolor( BM_XRGB(0,0,0));
|
||||
gr_rect( lb->box_x, y - FSPACY(1), lb->box_x + lb->box_w - FSPACX(1), y + LINE_SPACING);
|
||||
} else {
|
||||
if ( i == lb->citem )
|
||||
gr_set_curfont(MEDIUM2_FONT);
|
||||
else
|
||||
gr_set_curfont(MEDIUM1_FONT);
|
||||
gr_setcolor( BM_XRGB(5,5,5));
|
||||
gr_rect( lb->box_x + lb->box_w - FSPACX(1), y-FSPACY(1), lb->box_x + lb->box_w, y + LINE_SPACING);
|
||||
gr_setcolor( BM_XRGB(2,2,2));
|
||||
gr_rect( lb->box_x - FSPACX(1), y - FSPACY(1), lb->box_x, y + LINE_SPACING );
|
||||
gr_setcolor( BM_XRGB(0,0,0));
|
||||
gr_rect( lb->box_x, y - FSPACY(1), lb->box_x + lb->box_w - FSPACX(1), y + LINE_SPACING);
|
||||
gr_string( lb->box_x+FSPACX(5), y, lb->item[i] );
|
||||
}
|
||||
}
|
||||
|
||||
// Only allow drawing over the top of the default stuff
|
||||
if ( lb->listbox_callback )
|
||||
(*lb->listbox_callback)(lb, event, lb->userdata);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
timer_delay2(50);
|
||||
ocitem = lb->citem;
|
||||
ofirst_item = lb->first_item;
|
||||
|
@ -1758,10 +1727,10 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
if (key)
|
||||
{
|
||||
d_event_keycommand key_event; // somewhere to put the keycode for now
|
||||
|
||||
|
||||
key_event.type = EVENT_KEY_COMMAND;
|
||||
key_event.keycode = key;
|
||||
|
||||
|
||||
rval = (*lb->listbox_callback)(lb, (d_event *)&key_event, lb->userdata);
|
||||
key = key_event.keycode;
|
||||
}
|
||||
|
@ -1815,8 +1784,8 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
return 1;
|
||||
}
|
||||
break;
|
||||
case KEY_ENTER:
|
||||
case KEY_PADENTER:
|
||||
case KEY_ENTER:
|
||||
case KEY_PADENTER:
|
||||
// Tell callback, allow staying in menu
|
||||
event->type = EVENT_NEWMENU_SELECTED;
|
||||
if (lb->listbox_callback && (*lb->listbox_callback)(lb, event, lb->userdata))
|
||||
|
@ -1826,8 +1795,8 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
return 1;
|
||||
break;
|
||||
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
gr_toggle_fullscreen();
|
||||
break;
|
||||
|
||||
|
@ -1888,7 +1857,7 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
y2 = y1+h;
|
||||
if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
|
||||
lb->citem = i;
|
||||
|
||||
|
||||
// Tell callback, allow staying in menu
|
||||
event->type = EVENT_NEWMENU_SELECTED;
|
||||
if (lb->listbox_callback && (*lb->listbox_callback)(lb, event, lb->userdata))
|
||||
|
@ -1901,7 +1870,78 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int listbox_draw(window *wind, d_event *event, listbox *lb)
|
||||
{
|
||||
int i;
|
||||
|
||||
#ifdef OGL
|
||||
nm_draw_background1(NULL);
|
||||
#endif
|
||||
nm_draw_background( lb->box_x-BORDERX,lb->box_y-lb->title_height-BORDERY,lb->box_x+lb->box_w+BORDERX,lb->box_y+lb->height+BORDERY );
|
||||
gr_set_curfont(MEDIUM3_FONT);
|
||||
gr_string( 0x8000, lb->box_y - lb->title_height, lb->title );
|
||||
|
||||
gr_setcolor( BM_XRGB( 0,0,0) );
|
||||
for (i=lb->first_item; i<lb->first_item+LB_ITEMS_ON_SCREEN; i++ ) {
|
||||
int y = (i-lb->first_item)*LINE_SPACING+lb->box_y;
|
||||
if ( i >= lb->nitems ) {
|
||||
gr_setcolor( BM_XRGB(5,5,5));
|
||||
gr_rect( lb->box_x + lb->box_w - FSPACX(1), y-FSPACY(1), lb->box_x + lb->box_w, y + LINE_SPACING);
|
||||
gr_setcolor( BM_XRGB(2,2,2));
|
||||
gr_rect( lb->box_x - FSPACX(1), y - FSPACY(1), lb->box_x, y + LINE_SPACING );
|
||||
gr_setcolor( BM_XRGB(0,0,0));
|
||||
gr_rect( lb->box_x, y - FSPACY(1), lb->box_x + lb->box_w - FSPACX(1), y + LINE_SPACING);
|
||||
} else {
|
||||
if ( i == lb->citem )
|
||||
gr_set_curfont(MEDIUM2_FONT);
|
||||
else
|
||||
gr_set_curfont(MEDIUM1_FONT);
|
||||
gr_setcolor( BM_XRGB(5,5,5));
|
||||
gr_rect( lb->box_x + lb->box_w - FSPACX(1), y-FSPACY(1), lb->box_x + lb->box_w, y + LINE_SPACING);
|
||||
gr_setcolor( BM_XRGB(2,2,2));
|
||||
gr_rect( lb->box_x - FSPACX(1), y - FSPACY(1), lb->box_x, y + LINE_SPACING );
|
||||
gr_setcolor( BM_XRGB(0,0,0));
|
||||
gr_rect( lb->box_x, y - FSPACY(1), lb->box_x + lb->box_w - FSPACX(1), y + LINE_SPACING);
|
||||
gr_string( lb->box_x+FSPACX(5), y, lb->item[i] );
|
||||
}
|
||||
}
|
||||
|
||||
// Only allow drawing over the top of the default stuff
|
||||
if ( lb->listbox_callback )
|
||||
(*lb->listbox_callback)(lb, event, lb->userdata);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int listbox_handler(window *wind, d_event *event, listbox *lb)
|
||||
{
|
||||
switch (event->type)
|
||||
{
|
||||
case EVENT_IDLE:
|
||||
return listbox_idle(wind, event, lb);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_DRAW:
|
||||
return listbox_draw(wind, event, lb);
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
// Don't allow cancel here - handle item selected events / key events instead
|
||||
if (lb->listbox_callback)
|
||||
(*lb->listbox_callback)(lb, event, lb->userdata);
|
||||
|
||||
newmenu_hide_cursor();
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue