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
|
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
|
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
|
20100119
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -351,41 +351,11 @@ extern int set_segment_depths(int start_seg, ubyte *segbuf);
|
||||||
|
|
||||||
#define MAP_BACKGROUND_FILENAME "MAP.PCX"
|
#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;
|
vms_matrix tempm;
|
||||||
int c;
|
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)
|
if ( am->leave_mode==0 && Controls.automap_state && (timer_get_fixed_seconds()-am->entry_time)>LEAVE_TIME)
|
||||||
am->leave_mode = 1;
|
am->leave_mode = 1;
|
||||||
|
|
||||||
|
@ -444,7 +414,7 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_ALTED+KEY_F: // Alt+F shows full map, if cheats enabled
|
case KEY_ALTED+KEY_F: // Alt+F shows full map, if cheats enabled
|
||||||
if (Cheats_enabled)
|
if (Cheats_enabled)
|
||||||
{
|
{
|
||||||
|
@ -456,9 +426,9 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
case KEY_DEBUGGED+KEY_F: {
|
case KEY_DEBUGGED+KEY_F: {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0; i<=Highest_segment_index; i++ )
|
for (i=0; i<=Highest_segment_index; i++ )
|
||||||
Automap_visited[i] = 1;
|
Automap_visited[i] = 1;
|
||||||
automap_build_edge_list(am);
|
automap_build_edge_list(am);
|
||||||
|
@ -469,20 +439,20 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case KEY_F9:
|
case KEY_F9:
|
||||||
if (am->segment_limit > 1) {
|
if (am->segment_limit > 1) {
|
||||||
am->segment_limit--;
|
am->segment_limit--;
|
||||||
adjust_segment_limit(am, am->segment_limit);
|
adjust_segment_limit(am, am->segment_limit);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_F10:
|
case KEY_F10:
|
||||||
if (am->segment_limit < am->max_segments_away) {
|
if (am->segment_limit < am->max_segments_away) {
|
||||||
am->segment_limit++;
|
am->segment_limit++;
|
||||||
adjust_segment_limit(am, am->segment_limit);
|
adjust_segment_limit(am, am->segment_limit);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_ALTED+KEY_ENTER:
|
case KEY_ALTED+KEY_ENTER:
|
||||||
case KEY_ALTED+KEY_PADENTER:
|
case KEY_ALTED+KEY_PADENTER:
|
||||||
gr_toggle_fullscreen();
|
gr_toggle_fullscreen();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -537,6 +507,49 @@ int automap_handler(window *wind, d_event *event, automap *am)
|
||||||
}
|
}
|
||||||
am->t1 = am->t2;
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
163
main/game.c
163
main/game.c
|
@ -990,79 +990,101 @@ window *game_setup(void)
|
||||||
|
|
||||||
void game_render_frame();
|
void game_render_frame();
|
||||||
|
|
||||||
|
window *Game_wind = NULL;
|
||||||
|
|
||||||
// Event handler for the game
|
// Event handler for the game
|
||||||
int game_handler(window *wind, d_event *event, void *data)
|
int game_handler(window *wind, d_event *event, void *data)
|
||||||
{
|
{
|
||||||
data = data;
|
data = data;
|
||||||
|
|
||||||
if (event->type == EVENT_WINDOW_DRAW)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
if (force_cockpit_redraw) { //screen need redrawing?
|
case EVENT_IDLE:
|
||||||
init_cockpit();
|
// GAME LOOP!
|
||||||
force_cockpit_redraw=0;
|
Config_menu_flag = 0;
|
||||||
}
|
|
||||||
game_render_frame();
|
calc_frame_time();
|
||||||
|
|
||||||
return 1;
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
window *Game_wind = NULL;
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
//this function is the game. called when game mode selected. runs until
|
//this function is the game. called when game mode selected. runs until
|
||||||
//editor mode or exit selected
|
//editor mode or exit selected
|
||||||
|
@ -1072,24 +1094,9 @@ void game()
|
||||||
|
|
||||||
if ( setjmp(LeaveGame)==0 ) {
|
if ( setjmp(LeaveGame)==0 ) {
|
||||||
|
|
||||||
while (1)
|
while (Game_wind)
|
||||||
event_process();
|
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);
|
window_close(Game_wind);
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,50 +228,56 @@ int pause_handler(window *wind, d_event *event, char *msg)
|
||||||
{
|
{
|
||||||
int key;
|
int key;
|
||||||
|
|
||||||
if (event->type == EVENT_WINDOW_DRAW)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
show_boxed_message(msg, 1);
|
case EVENT_IDLE:
|
||||||
return 1;
|
timer_delay2(50);
|
||||||
}
|
|
||||||
else if (event->type == EVENT_WINDOW_CLOSE)
|
key = key_inkey();
|
||||||
{
|
|
||||||
game_flush_inputs();
|
switch (key) {
|
||||||
reset_cockpit();
|
case 0:
|
||||||
start_time();
|
break;
|
||||||
if (EXT_MUSIC_ON)
|
case KEY_ESC:
|
||||||
ext_music_resume();
|
//Function_mode = FMODE_MENU; // Don't like this, just press escape twice (kreatordxx)
|
||||||
digi_resume_all();
|
window_close(wind);
|
||||||
d_free(msg);
|
break;
|
||||||
|
case KEY_F1:
|
||||||
return 1;
|
show_help();
|
||||||
}
|
break;
|
||||||
|
case KEY_PAUSE:
|
||||||
timer_delay2(50);
|
window_close(wind);
|
||||||
|
break;
|
||||||
key = key_inkey();
|
case KEY_ALTED+KEY_ENTER:
|
||||||
|
case KEY_ALTED+KEY_PADENTER:
|
||||||
switch (key) {
|
gr_toggle_fullscreen();
|
||||||
case 0:
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
break;
|
break;
|
||||||
case KEY_ESC:
|
|
||||||
//Function_mode = FMODE_MENU; // Don't like this, just press escape twice (kreatordxx)
|
case EVENT_WINDOW_DRAW:
|
||||||
window_close(wind);
|
show_boxed_message(msg, 1);
|
||||||
break;
|
break;
|
||||||
case KEY_F1:
|
|
||||||
show_help();
|
case EVENT_WINDOW_CLOSE:
|
||||||
break;
|
game_flush_inputs();
|
||||||
case KEY_PAUSE:
|
reset_cockpit();
|
||||||
window_close(wind);
|
start_time();
|
||||||
break;
|
if (EXT_MUSIC_ON)
|
||||||
case KEY_ALTED+KEY_ENTER:
|
ext_music_resume();
|
||||||
case KEY_ALTED+KEY_PADENTER:
|
digi_resume_all();
|
||||||
gr_toggle_fullscreen();
|
d_free(msg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
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 nm_draw_background1(char * filename);
|
||||||
void kc_drawquestion( kc_menu *menu, kc_item *item );
|
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_canvas * save_canvas = grd_curcanv;
|
||||||
grs_font * save_font;
|
grs_font * save_font;
|
||||||
|
@ -642,48 +642,13 @@ void kconfig_start_changing(kc_menu *menu)
|
||||||
menu->changing = 1;
|
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;
|
grs_canvas * save_canvas = grd_curcanv;
|
||||||
int i,k;
|
int i,k;
|
||||||
#ifdef NEWMENU_MOUSE
|
#ifdef NEWMENU_MOUSE
|
||||||
int mx, my, mz, x1, x2, y1, y2;
|
int mx, my, mz, x1, x2, y1, y2;
|
||||||
#endif
|
#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)
|
if (menu->changing)
|
||||||
timer_delay(f0_1/10);
|
timer_delay(f0_1/10);
|
||||||
|
@ -722,7 +687,7 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NETWORK
|
#ifdef NETWORK
|
||||||
if ( !menu->time_stopped )
|
if ( !menu->time_stopped )
|
||||||
if (multi_menu_poll() == -1)
|
if (multi_menu_poll() == -1)
|
||||||
|
@ -772,47 +737,47 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_DELETE:
|
case KEY_DELETE:
|
||||||
menu->items[menu->citem].value=255;
|
menu->items[menu->citem].value=255;
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
case KEY_PAD8:
|
case KEY_PAD8:
|
||||||
#ifdef TABLE_CREATION
|
#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);
|
if (menu->items[menu->citem].u==-1) menu->items[menu->citem].u=find_next_item_up( menu->items,menu->nitems, menu->citem);
|
||||||
#endif
|
#endif
|
||||||
menu->citem = menu->items[menu->citem].u;
|
menu->citem = menu->items[menu->citem].u;
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case KEY_PAD2:
|
case KEY_PAD2:
|
||||||
#ifdef TABLE_CREATION
|
#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);
|
if (menu->items[menu->citem].d==-1) menu->items[menu->citem].d=find_next_item_down( menu->items,menu->nitems, menu->citem);
|
||||||
#endif
|
#endif
|
||||||
menu->citem = menu->items[menu->citem].d;
|
menu->citem = menu->items[menu->citem].d;
|
||||||
break;
|
break;
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
case KEY_PAD4:
|
case KEY_PAD4:
|
||||||
#ifdef TABLE_CREATION
|
#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);
|
if (menu->items[menu->citem].l==-1) menu->items[menu->citem].l=find_next_item_left( menu->items,menu->nitems, menu->citem);
|
||||||
#endif
|
#endif
|
||||||
menu->citem = menu->items[menu->citem].l;
|
menu->citem = menu->items[menu->citem].l;
|
||||||
break;
|
break;
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
case KEY_PAD6:
|
case KEY_PAD6:
|
||||||
#ifdef TABLE_CREATION
|
#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);
|
if (menu->items[menu->citem].r==-1) menu->items[menu->citem].r=find_next_item_right( menu->items,menu->nitems, menu->citem);
|
||||||
#endif
|
#endif
|
||||||
menu->citem = menu->items[menu->citem].r;
|
menu->citem = menu->items[menu->citem].r;
|
||||||
break;
|
break;
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
case KEY_PADENTER:
|
case KEY_PADENTER:
|
||||||
kconfig_start_changing(menu);
|
kconfig_start_changing(menu);
|
||||||
break;
|
break;
|
||||||
case -2:
|
case -2:
|
||||||
case KEY_ESC:
|
case KEY_ESC:
|
||||||
window_close(wind);
|
window_close(wind);
|
||||||
break;
|
break;
|
||||||
#ifdef TABLE_CREATION
|
#ifdef TABLE_CREATION
|
||||||
case KEY_F12: {
|
case KEY_F12: {
|
||||||
FILE * fp;
|
FILE * fp;
|
||||||
for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
|
for (i=0; i<NUM_KEY_CONTROLS; i++ ) {
|
||||||
kc_keyboard[i].u = find_next_item_up( kc_keyboard,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;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case 0: // some other event
|
case 0: // some other event
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NEWMENU_MOUSE
|
#ifdef NEWMENU_MOUSE
|
||||||
gr_set_current_canvas(window_get_canvas(wind));
|
gr_set_current_canvas(window_get_canvas(wind));
|
||||||
|
|
||||||
if ( (menu->mouse_state && !menu->omouse_state) || (menu->mouse_state && menu->omouse_state) ) {
|
if ( (menu->mouse_state && !menu->omouse_state) || (menu->mouse_state && menu->omouse_state) ) {
|
||||||
int item_height;
|
int item_height;
|
||||||
|
|
||||||
|
@ -936,13 +901,61 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
||||||
menu->changing = 0;
|
menu->changing = 0;
|
||||||
gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
|
gr_set_fontcolor( BM_XRGB(28,28,28), BM_XRGB(0,0,0) );
|
||||||
game_flush_inputs();
|
game_flush_inputs();
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gr_set_current_canvas(save_canvas);
|
gr_set_current_canvas(save_canvas);
|
||||||
#endif // NEWMENU_MOUSE
|
#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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
372
main/newmenu.c
372
main/newmenu.c
|
@ -549,117 +549,16 @@ int newmenu_get_citem(newmenu *menu)
|
||||||
return menu->citem;
|
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;
|
grs_canvas *menu_canvas = window_get_canvas(wind), *save_canvas = grd_curcanv;
|
||||||
int string_width, string_height, average_width;
|
|
||||||
char *Temp,TempVal;
|
char *Temp,TempVal;
|
||||||
#ifdef NEWMENU_MOUSE
|
#ifdef NEWMENU_MOUSE
|
||||||
int mx=0, my=0, mz=0, x1 = 0, x2, y1, y2;
|
int mx=0, my=0, mz=0, x1 = 0, x2, y1, y2;
|
||||||
#endif
|
#endif
|
||||||
int rval = 0;
|
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);
|
timer_delay2(50);
|
||||||
|
|
||||||
#ifdef NEWMENU_MOUSE
|
#ifdef NEWMENU_MOUSE
|
||||||
|
@ -689,7 +588,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||||
}
|
}
|
||||||
|
|
||||||
gr_set_current_canvas(menu_canvas);
|
gr_set_current_canvas(menu_canvas);
|
||||||
|
|
||||||
if (menu->tiny_mode)
|
if (menu->tiny_mode)
|
||||||
gr_set_curfont(GAME_FONT);
|
gr_set_curfont(GAME_FONT);
|
||||||
else
|
else
|
||||||
|
@ -700,10 +599,10 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||||
if (k)
|
if (k)
|
||||||
{
|
{
|
||||||
d_event_keycommand key_event; // for now - will be passed through newmenu_handler later
|
d_event_keycommand key_event; // for now - will be passed through newmenu_handler later
|
||||||
|
|
||||||
key_event.type = EVENT_KEY_COMMAND;
|
key_event.type = EVENT_KEY_COMMAND;
|
||||||
key_event.keycode = k;
|
key_event.keycode = k;
|
||||||
|
|
||||||
rval = (*menu->subfunction)(menu, (d_event *)&key_event, menu->userdata);
|
rval = (*menu->subfunction)(menu, (d_event *)&key_event, menu->userdata);
|
||||||
k = key_event.keycode;
|
k = key_event.keycode;
|
||||||
}
|
}
|
||||||
|
@ -880,7 +779,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||||
event->type = EVENT_NEWMENU_SELECTED;
|
event->type = EVENT_NEWMENU_SELECTED;
|
||||||
if (menu->subfunction && (*menu->subfunction)(menu, event, menu->userdata))
|
if (menu->subfunction && (*menu->subfunction)(menu, event, menu->userdata))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
menu->done = 1;
|
menu->done = 1;
|
||||||
gr_set_current_canvas(save_canvas);
|
gr_set_current_canvas(save_canvas);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1239,6 +1138,127 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
|
||||||
|
|
||||||
gr_set_current_canvas(save_canvas);
|
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;
|
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 i;
|
||||||
int ocitem, ofirst_item, key;
|
int ocitem, ofirst_item, key;
|
||||||
|
@ -1688,57 +1708,6 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
||||||
#endif
|
#endif
|
||||||
int rval = 0;
|
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);
|
timer_delay2(50);
|
||||||
ocitem = lb->citem;
|
ocitem = lb->citem;
|
||||||
ofirst_item = lb->first_item;
|
ofirst_item = lb->first_item;
|
||||||
|
@ -1758,10 +1727,10 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
||||||
if (key)
|
if (key)
|
||||||
{
|
{
|
||||||
d_event_keycommand key_event; // somewhere to put the keycode for now
|
d_event_keycommand key_event; // somewhere to put the keycode for now
|
||||||
|
|
||||||
key_event.type = EVENT_KEY_COMMAND;
|
key_event.type = EVENT_KEY_COMMAND;
|
||||||
key_event.keycode = key;
|
key_event.keycode = key;
|
||||||
|
|
||||||
rval = (*lb->listbox_callback)(lb, (d_event *)&key_event, lb->userdata);
|
rval = (*lb->listbox_callback)(lb, (d_event *)&key_event, lb->userdata);
|
||||||
key = key_event.keycode;
|
key = key_event.keycode;
|
||||||
}
|
}
|
||||||
|
@ -1815,8 +1784,8 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
case KEY_PADENTER:
|
case KEY_PADENTER:
|
||||||
// Tell callback, allow staying in menu
|
// Tell callback, allow staying in menu
|
||||||
event->type = EVENT_NEWMENU_SELECTED;
|
event->type = EVENT_NEWMENU_SELECTED;
|
||||||
if (lb->listbox_callback && (*lb->listbox_callback)(lb, event, lb->userdata))
|
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;
|
return 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_ALTED+KEY_ENTER:
|
case KEY_ALTED+KEY_ENTER:
|
||||||
case KEY_ALTED+KEY_PADENTER:
|
case KEY_ALTED+KEY_PADENTER:
|
||||||
gr_toggle_fullscreen();
|
gr_toggle_fullscreen();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1888,7 +1857,7 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
|
||||||
y2 = y1+h;
|
y2 = y1+h;
|
||||||
if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
|
if ( ((mx > x1) && (mx < x2)) && ((my > y1) && (my < y2)) ) {
|
||||||
lb->citem = i;
|
lb->citem = i;
|
||||||
|
|
||||||
// Tell callback, allow staying in menu
|
// Tell callback, allow staying in menu
|
||||||
event->type = EVENT_NEWMENU_SELECTED;
|
event->type = EVENT_NEWMENU_SELECTED;
|
||||||
if (lb->listbox_callback && (*lb->listbox_callback)(lb, event, lb->userdata))
|
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
|
#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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue