Add a default event handler for screenshots, entering debugger, Redbook repeating etc

This commit is contained in:
kreatordxx 2010-04-02 05:01:08 +00:00
parent df6882b499
commit dae5968170
19 changed files with 138 additions and 186 deletions

View file

@ -1,11 +1,15 @@
D2X-Rebirth Changelog
20100401
--------
arch/include/event.h, arch/sdl/event.c, arch/sdl/key.c, arch/sdl/mouse.c, main/automap.c, main/credits.c, main/escort.c, main/game.c, main/gamecntl.c, main/inferno.c, main/kconfig.c, main/kmatrix.c, main/movie.c, main/net_ipx.c, main/net_udp.c, main/newmenu.c, main/scores.c, main/titles.c: Add a default event handler for screenshots, entering debugger, Redbook repeating etc
20100331
--------
main/gamecntl.c, main/laser.c, main/laser.h: Make gamecntl.c more similar between D1X and D2X
main/automap.c, main/game.c, main/gamecntl.c, main/multi.c, main/multi.h: Make game respond to EVENT_KEY_COMMAND for key commands, allowing default key handler (later)
main/gamecntl.c: Fix bug introduced in last commit where the player can't escape from the death sequence (whoops)
main/gameseq.c: Hide the game window so the exit movie has a black background
main/endlevel.c: Hide the game window so the exit movie has a black background
20100330
--------

View file

@ -44,6 +44,10 @@ int event_init();
// Sends input events to event handlers
void event_poll();
// Set and call the default event handler
void set_default_handler(int (*handler)(d_event *event));
int call_default_handler(d_event *event);
// Sends input, idle and draw events to event handlers
void event_process();

View file

@ -72,6 +72,21 @@ int event_init()
return 0;
}
int (*default_handler)(d_event *event) = NULL;
void set_default_handler(int (*handler)(d_event *event))
{
default_handler = handler;
}
int call_default_handler(d_event *event)
{
if (default_handler)
return (*default_handler)(event);
return 0;
}
// Process the first event in queue, sending to the appropriate handler
// This is the new object-oriented system
// Uses the old system for now, but this may change
@ -82,13 +97,15 @@ void event_process(void)
event_poll(); // send input events first
event.type = EVENT_IDLE; // most user input handled in idle event for now (except for newmenu)
wind = window_get_front();
if (!wind)
return;
window_send_event(wind, &event);
event.type = EVENT_IDLE;
if ((wind = window_get_front()))
{
if (!window_send_event(wind, &event))
call_default_handler(&event);
}
else
call_default_handler(&event);
event.type = EVENT_WINDOW_DRAW; // then draw all visible windows
for (wind = window_get_first(); wind != NULL; wind = window_get_next(wind))
if (window_is_visible(wind))

View file

@ -433,8 +433,13 @@ void key_handler(SDL_KeyboardEvent *event, int counter)
event.type = EVENT_KEY_COMMAND;
event.keycode = key_command;
if ((wind = window_get_front()) && window_send_event(wind, (d_event *)&event))
/*return*/; // handled it - don't add to queue NOT YET: have to make all input loops into windows
if ((wind = window_get_front()))
{
if (!window_send_event(wind, (d_event *)&event))
call_default_handler((d_event *)&event);
}
else
call_default_handler((d_event *)&event);
}
}

View file

@ -88,7 +88,12 @@ void mouse_button_handler(SDL_MouseButtonEvent *mbe)
event.button = button;
if ((wind = window_get_front()))
window_send_event(wind, (d_event *)&event);
{
if (!window_send_event(wind, (d_event *)&event))
call_default_handler((d_event *)&event);
}
else
call_default_handler((d_event *)&event);
}
void mouse_motion_handler(SDL_MouseMotionEvent *mme)

View file

@ -545,10 +545,6 @@ int automap_key_command(window *wind, d_event *event, automap *am)
switch (c)
{
#ifndef NDEBUG
case KEY_BACKSP: Int3(); return 1;
#endif
case KEY_PRINT_SCREEN: {
gr_set_current_canvas(NULL);
save_screen_shot(1);
@ -635,13 +631,6 @@ int automap_key_command(window *wind, d_event *event, automap *am)
MarkerScale+=.5;
return 1;
#endif
case KEY_ALTED+KEY_ENTER:
case KEY_ALTED+KEY_PADENTER:
gr_toggle_fullscreen();
return 1;
//end addition -MM
}
return 0;
@ -675,9 +664,6 @@ int automap_idle(window *wind, d_event *event, automap *am)
}
}
//see if redbook song needs to be restarted
RBACheckFinishedHook();
if ( Controls.fire_primary_down_count ) {
// Reset orientation
am->viewDist = ZOOM_DEFAULT;

View file

@ -64,32 +64,20 @@ typedef struct credits
int credits_handler(window *wind, d_event *event, credits *cr)
{
int j, k, l;
int j, l;
char * tempp;
int y;
switch (event->type)
{
case EVENT_KEY_COMMAND:
k = ((d_event_keycommand *)event)->keycode;
switch (k)
{
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
default:
window_close(wind);
return 1;
}
break;
if (!call_default_handler(event)) // if not print screen, debug etc
window_close(wind);
return 1;
case EVENT_IDLE:
timer_delay(F1_0/25);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
if (cr->row == 0)
{
do {

View file

@ -1653,14 +1653,6 @@ int escort_menu_keycommand(window *wind, d_event *event, escort_menu *menu)
window_close(wind);
return 1;
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
#ifndef RELEASE
case KEY_BACKSP: Int3(); return 1;
#endif
case KEY_T: {
char msg[32];
int temp;

View file

@ -1202,9 +1202,6 @@ int game_handler(window *wind, d_event *event, void *data)
if (window_get_front() != wind)
break;
//see if redbook song needs to be restarted
RBACheckFinishedHook(); // Handle RedBook Audio Repeating.
if (Config_menu_flag) {
do_options_menu();
}

View file

@ -159,7 +159,6 @@ void advance_sound(void);
void play_test_sound(void);
#define key_isfunc(k) (((k&0xff)>=KEY_F1 && (k&0xff)<=KEY_F10) || (k&0xff)==KEY_F11 || (k&0xff)==KEY_F12)
#define key_ismod(k) ((k&0xff)==KEY_LALT || (k&0xff)==KEY_RALT || (k&0xff)==KEY_LSHIFT || (k&0xff)==KEY_RSHIFT || (k&0xff)==KEY_LCTRL || (k&0xff)==KEY_RCTRL || (k&0xff)==KEY_LMETA || (k&0xff)==KEY_RMETA)
// Functions ------------------------------------------------------------------
@ -391,10 +390,6 @@ int pause_handler(window *wind, d_event *event, char *msg)
case KEY_PAUSE:
window_close(wind);
return 1;
case KEY_ALTED+KEY_ENTER:
case KEY_ALTED+KEY_PADENTER:
gr_toggle_fullscreen();
return 1;
default:
break;
}
@ -466,13 +461,6 @@ int HandleEndlevelKey(int key)
{
switch (key)
{
#ifdef macintosh
case KEY_COMMAND + KEY_SHIFTED + KEY_3:
#endif
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
case KEY_COMMAND+KEY_P:
case KEY_PAUSE:
do_game_pause();
@ -482,10 +470,6 @@ int HandleEndlevelKey(int key)
stop_endlevel_sequence();
last_drawn_cockpit=-1;
return 1;
case KEY_BACKSP:
Int3();
return 1;
}
return 0;
@ -493,7 +477,7 @@ int HandleEndlevelKey(int key)
int HandleDeathKey(int key)
{
if (Player_exploded && !key_isfunc(key) && !key_ismod(key) && key)
if (Player_exploded && !key_isfunc(key) && key)
Death_sequence_aborted = 1; //Any key but func or modifier aborts
if (key == KEY_ESC) {
@ -593,15 +577,7 @@ int HandleDemoKey(int key)
}
break;
}
case KEY_ALTED+KEY_ENTER:
case KEY_ALTED+KEY_PADENTER:
gr_toggle_fullscreen();
break;
#ifndef NDEBUG
case KEY_BACKSP:
Int3();
break;
case KEY_DEBUGGED + KEY_I:
Newdemo_do_interpolate = !Newdemo_do_interpolate;
HUD_init_message("Demo playback interpolation %s", Newdemo_do_interpolate?"ON":"OFF");
@ -996,15 +972,9 @@ int HandleSystemKey(int key)
songs_goto_next_song();
break;
#if defined(__APPLE__) || defined(macintosh)
case KEY_COMMAND+KEY_Q:
macintosh_quit();
break;
#endif
default:
return 0;
break;
}
return 1;
@ -2101,6 +2071,9 @@ int ReadControls(d_event *event)
return 1;
#endif
if (call_default_handler(event))
return 1;
if (Player_is_dead)
return HandleDeathKey(key);
}

View file

@ -92,6 +92,7 @@ char copyright[] = "DESCENT II COPYRIGHT (C) 1994-1996 PARALLAX SOFTWARE CORPOR
#include "joy.h"
#include "../texmap/scanline.h" //for select_tmap -MM
#include "event.h"
#include "rbaudio.h"
#ifdef EDITOR
#include "editor/editor.h"
@ -221,6 +222,74 @@ void error_messagebox(char *s)
nm_messagebox( TXT_SORRY, 1, TXT_OK, s );
}
#define key_ismod(k) ((k&0xff)==KEY_LALT || (k&0xff)==KEY_RALT || (k&0xff)==KEY_LSHIFT || (k&0xff)==KEY_RSHIFT || (k&0xff)==KEY_LCTRL || (k&0xff)==KEY_RCTRL || (k&0xff)==KEY_LMETA || (k&0xff)==KEY_RMETA)
// Default event handler for everything except the editor
int standard_handler(d_event *event)
{
int key;
switch (event->type)
{
case EVENT_MOUSE_BUTTON_DOWN:
case EVENT_MOUSE_BUTTON_UP:
// No window selecting
// We stay with the current one until it's closed/hidden or another one is made
// Not the case for the editor
break;
case EVENT_KEY_COMMAND:
key = ((d_event_keycommand *)event)->keycode;
// Don't let modifier(s) on their own do something unless we explicitly want that
// (e.g. if it's a game control like fire primary)
if (key_ismod(key))
return 1;
switch (key)
{
#ifdef macintosh
case KEY_COMMAND + KEY_SHIFTED + KEY_3:
#endif
case KEY_PRINT_SCREEN:
{
gr_set_current_canvas(NULL);
save_screen_shot(0);
return 1;
}
case KEY_ALTED+KEY_ENTER:
case KEY_ALTED+KEY_PADENTER:
gr_toggle_fullscreen();
return 1;
#ifndef NDEBUG
case KEY_BACKSP:
Int3();
return 1;
#endif
#if defined(__APPLE__) || defined(macintosh)
case KEY_COMMAND+KEY_Q:
// Alt-F4 already taken, too bad
macintosh_quit();
break;
#endif
}
break;
case EVENT_IDLE:
//see if redbook song needs to be restarted
RBACheckFinishedHook();
return 1;
default:
break;
}
return 0;
}
jmp_buf LeaveEvents;
#define PROGNAME argv[0]
@ -323,6 +392,8 @@ int main(int argc, char *argv[])
con_printf(CON_DEBUG, "Initializing font system...\n" );
gamefont_init(); // must load after palette data loaded.
set_default_handler(standard_handler);
con_printf( CON_DEBUG, "Initializing movie libraries...\n" );
init_movies(); //init movie libraries
@ -344,7 +415,7 @@ int main(int argc, char *argv[])
return(0);
error_init(error_messagebox, NULL);
con_printf( CON_DEBUG, "\nInitializing texture caching system..." );
texmerge_init( 10 ); // 10 cache bitmaps

View file

@ -672,15 +672,6 @@ int kconfig_key_command(window *wind, d_event *event, kc_menu *menu)
switch (k)
{
case KEY_BACKSP:
Int3();
return 1;
#ifdef macintosh
case KEY_COMMAND+KEY_SHIFTED+KEY_3:
#endif
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
case KEY_CTRLED+KEY_D:
menu->items[menu->citem].value = 255;
return 1;
@ -881,9 +872,6 @@ int kconfig_handler(window *wind, d_event *event, kc_menu *menu)
else
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
if (menu->changing)
{
switch( menu->items[menu->citem].type )

View file

@ -415,14 +415,6 @@ int kmatrix_ipx_handler(window *wind, d_event *event, kmatrix_ipx_screen *km)
}
return 1;
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
case KEY_BACKSP:
Int3();
return 1;
default:
break;
}
@ -431,9 +423,6 @@ int kmatrix_ipx_handler(window *wind, d_event *event, kmatrix_ipx_screen *km)
case EVENT_IDLE:
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
if (timer_get_fixed_seconds() >= (km->entry_time+MAX_VIEW_TIME) && Players[Player_num].connected!=CONNECT_KMATRIX_WAITING)
{
if (is_D2_OEM)
@ -815,10 +804,6 @@ int kmatrix_handler(window *wind, d_event *event, kmatrix_screen *km)
}
return 1;
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
default:
break;
}
@ -827,8 +812,6 @@ int kmatrix_handler(window *wind, d_event *event, kmatrix_screen *km)
case EVENT_IDLE:
timer_delay2(50);
RBACheckFinishedHook(); //see if redbook song needs to be restarted
if (km->network)
multi_do_protocol_frame(0, 1);

View file

@ -244,7 +244,8 @@ int show_pause_message(window *wind, d_event *event, void *userdata)
// else fall through
case EVENT_KEY_COMMAND:
window_close(wind);
if (!call_default_handler(event))
window_close(wind);
return 1;
case EVENT_WINDOW_DRAW:

View file

@ -5639,9 +5639,6 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n
k = ((d_event_keycommand *)event)->keycode;
switch (k)
{
case KEY_PRINT_SCREEN:
save_screen_shot(0); k = 0;
return 1;
case KEY_ENTER:
case KEY_SPACEBAR:
case KEY_ESC:
@ -5652,9 +5649,6 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n
case EVENT_IDLE:
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
break;
case EVENT_WINDOW_DRAW:

View file

@ -4722,9 +4722,6 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n
k = ((d_event_keycommand *)event)->keycode;
switch (k)
{
case KEY_PRINT_SCREEN:
save_screen_shot(0); k = 0;
return 1;
case KEY_ENTER:
case KEY_SPACEBAR:
case KEY_ESC:
@ -4735,9 +4732,6 @@ static int show_game_rules_handler(window *wind, d_event *event, netgame_info *n
case EVENT_IDLE:
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
break;
case EVENT_WINDOW_DRAW:

View file

@ -986,11 +986,6 @@ int newmenu_key_command(window *wind, d_event *event, newmenu *menu)
}
break;
case KEY_ALTED+KEY_ENTER:
case KEY_ALTED+KEY_PADENTER:
gr_toggle_fullscreen();
break;
case KEY_ESC:
if ( (menu->citem>-1) && (item->type==NM_TYPE_INPUT_MENU) && (item->group==1)) {
item->group=0;
@ -1003,13 +998,6 @@ int newmenu_key_command(window *wind, d_event *event, newmenu *menu)
}
break;
#ifdef macintosh
case KEY_COMMAND+KEY_SHIFTED+KEY_3:
#endif
case KEY_PRINT_SCREEN:
save_screen_shot(0);
break;
#ifndef NDEBUG
case KEY_BACKSP:
if ( (menu->citem>-1) && (item->type!=NM_TYPE_INPUT)&&(item->type!=NM_TYPE_INPUT_MENU))
@ -1289,9 +1277,6 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
case EVENT_IDLE:
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
return newmenu_mouse(wind, event, menu);
break;
@ -1817,12 +1802,6 @@ int listbox_key_command(window *wind, d_event *event, listbox *lb)
int rval = 1;
switch(key) {
#ifdef macintosh
case KEY_COMMAND+KEY_SHIFTED+KEY_3:
#endif
case KEY_PRINT_SCREEN:
save_screen_shot(0);
break;
case KEY_HOME:
case KEY_PAD7:
lb->citem = 0;
@ -1865,11 +1844,6 @@ int listbox_key_command(window *wind, d_event *event, listbox *lb)
return 1;
break;
case KEY_ALTED+KEY_ENTER:
case KEY_ALTED+KEY_PADENTER:
gr_toggle_fullscreen();
break;
default:
{
int ascii = key_ascii();
@ -1982,9 +1956,6 @@ int listbox_handler(window *wind, d_event *event, listbox *lb)
case EVENT_IDLE:
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
return listbox_mouse(wind, event, lb);
break;

View file

@ -350,12 +350,10 @@ int scores_handler(window *wind, d_event *event, scores_menu *menu)
}
}
return 1;
case KEY_BACKSP: Int3(); k = 0; return 1;
case KEY_PRINT_SCREEN: save_screen_shot(0); k = 0; return 1;
case KEY_ENTER:
case KEY_SPACEBAR:
case KEY_ESC:
case KEY_ENTER:
case KEY_SPACEBAR:
case KEY_ESC:
window_close(wind);
return 1;
}
@ -363,9 +361,6 @@ int scores_handler(window *wind, d_event *event, scores_menu *menu)
case EVENT_IDLE:
timer_delay2(50);
//see if redbook song needs to be restarted
RBACheckFinishedHook();
break;
case EVENT_WINDOW_DRAW:

View file

@ -106,18 +106,10 @@ int title_handler(window *wind, d_event *event, title_screen *ts)
break;
case EVENT_KEY_COMMAND:
switch (((d_event_keycommand *)event)->keycode)
{
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
default:
if (ts->allow_keys)
window_close(wind);
return 1;
}
break;
if (!call_default_handler(event))
if (ts->allow_keys)
window_close(wind);
return 1;
case EVENT_IDLE:
timer_delay2(50);
@ -1313,16 +1305,6 @@ int briefing_handler(window *wind, d_event *event, briefing *br)
switch (key)
{
case KEY_PRINT_SCREEN:
save_screen_shot(0);
return 1;
#ifndef NDEBUG
case KEY_BACKSP:
Int3();
return 1;
#endif
case KEY_ESC:
window_close(wind);
return 1;
@ -1333,7 +1315,9 @@ int briefing_handler(window *wind, d_event *event, briefing *br)
// fall through
default:
if (br->new_screen)
if (call_default_handler(event))
return 1;
else if (br->new_screen)
{
if (!new_briefing_screen(br, 0))
{