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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
69
main/game.c
69
main/game.c
|
@ -990,25 +990,16 @@ 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();
|
|
||||||
force_cockpit_redraw=0;
|
|
||||||
}
|
|
||||||
game_render_frame();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else if (event->type == EVENT_WINDOW_CLOSE)
|
|
||||||
// Will have abort dialog here...
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
// GAME LOOP!
|
// GAME LOOP!
|
||||||
Config_menu_flag = 0;
|
Config_menu_flag = 0;
|
||||||
|
|
||||||
|
@ -1044,8 +1035,8 @@ int game_handler(window *wind, d_event *event, void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (Function_mode != FMODE_GAME ) && (Newdemo_state != ND_STATE_PLAYBACK ) && (Function_mode!=FMODE_EDITOR)
|
if ( (Function_mode != FMODE_GAME ) && (Newdemo_state != ND_STATE_PLAYBACK ) && (Function_mode!=FMODE_EDITOR))
|
||||||
) {
|
{
|
||||||
int choice, fmode;
|
int choice, fmode;
|
||||||
fmode = Function_mode;
|
fmode = Function_mode;
|
||||||
Function_mode = FMODE_GAME;
|
Function_mode = FMODE_GAME;
|
||||||
|
@ -1057,25 +1048,18 @@ int game_handler(window *wind, d_event *event, void *data)
|
||||||
|
|
||||||
if (Function_mode != FMODE_GAME)
|
if (Function_mode != FMODE_GAME)
|
||||||
longjmp(LeaveGame,0);
|
longjmp(LeaveGame,0);
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
|
||||||
return 1;
|
case EVENT_WINDOW_DRAW:
|
||||||
}
|
if (force_cockpit_redraw) { //screen need redrawing?
|
||||||
|
init_cockpit();
|
||||||
window *Game_wind = NULL;
|
force_cockpit_redraw=0;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------
|
|
||||||
//this function is the game. called when game mode selected. runs until
|
|
||||||
//editor mode or exit selected
|
|
||||||
void game()
|
|
||||||
{
|
|
||||||
Game_wind = game_setup();
|
|
||||||
|
|
||||||
if ( setjmp(LeaveGame)==0 ) {
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
event_process();
|
|
||||||
}
|
}
|
||||||
|
game_render_frame();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_WINDOW_CLOSE:
|
||||||
digi_stop_all();
|
digi_stop_all();
|
||||||
|
|
||||||
if ( (Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED) )
|
if ( (Newdemo_state == ND_STATE_RECORDING) || (Newdemo_state == ND_STATE_PAUSED) )
|
||||||
|
@ -1090,6 +1074,29 @@ void game()
|
||||||
|
|
||||||
clear_warn_func(game_show_warning); //don't use this func anymore
|
clear_warn_func(game_show_warning); //don't use this func anymore
|
||||||
game_disable_cheats();
|
game_disable_cheats();
|
||||||
|
Game_wind = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------
|
||||||
|
//this function is the game. called when game mode selected. runs until
|
||||||
|
//editor mode or exit selected
|
||||||
|
void game()
|
||||||
|
{
|
||||||
|
Game_wind = game_setup();
|
||||||
|
|
||||||
|
if ( setjmp(LeaveGame)==0 ) {
|
||||||
|
|
||||||
|
while (Game_wind)
|
||||||
|
event_process();
|
||||||
|
}
|
||||||
|
|
||||||
window_close(Game_wind);
|
window_close(Game_wind);
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,24 +228,9 @@ 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;
|
|
||||||
}
|
|
||||||
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);
|
timer_delay2(50);
|
||||||
|
|
||||||
key = key_inkey();
|
key = key_inkey();
|
||||||
|
@ -271,6 +256,27 @@ int pause_handler(window *wind, d_event *event, char *msg)
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_WINDOW_DRAW:
|
||||||
|
show_boxed_message(msg, 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,7 +642,7 @@ 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;
|
||||||
|
@ -650,41 +650,6 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
|
||||||
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);
|
||||||
else
|
else
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
350
main/newmenu.c
350
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
|
||||||
|
@ -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;
|
||||||
|
@ -1902,6 +1871,77 @@ 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