diff options
-rw-r--r-- | textscreen/Makefile.am | 3 | ||||
-rw-r--r-- | textscreen/txt_desktop.c | 1 | ||||
-rw-r--r-- | textscreen/txt_main.h | 8 | ||||
-rw-r--r-- | textscreen/txt_sdl.c (renamed from textscreen/txt_main.c) | 23 | ||||
-rw-r--r-- | textscreen/txt_sdl.h | 50 |
5 files changed, 80 insertions, 5 deletions
diff --git a/textscreen/Makefile.am b/textscreen/Makefile.am index 71989c3b..752e6361 100644 --- a/textscreen/Makefile.am +++ b/textscreen/Makefile.am @@ -15,12 +15,13 @@ libtextscreen_a_SOURCES = \ txt_gui.c txt_gui.h \ txt_inputbox.c txt_inputbox.h \ txt_io.c txt_io.h \ - txt_main.c txt_main.h \ + txt_main.h \ txt_button.c txt_button.h \ txt_label.c txt_label.h \ txt_radiobutton.c txt_radiobutton.h \ txt_separator.c txt_separator.h \ txt_spinctrl.c txt_spinctrl.h \ + txt_sdl.c txt_sdl.h \ txt_strut.c txt_strut.h \ txt_table.c txt_table.h \ txt_widget.c txt_widget.h \ diff --git a/textscreen/txt_desktop.c b/textscreen/txt_desktop.c index ee6c1671..4b90ed66 100644 --- a/textscreen/txt_desktop.c +++ b/textscreen/txt_desktop.c @@ -19,6 +19,7 @@ // 02111-1307, USA. // +#include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/textscreen/txt_main.h b/textscreen/txt_main.h index 13c38537..7978c8b7 100644 --- a/textscreen/txt_main.h +++ b/textscreen/txt_main.h @@ -20,17 +20,17 @@ // //----------------------------------------------------------------------------- // -// Text mode emulation in SDL +// Base interface that abstracts the text mode screen. // //----------------------------------------------------------------------------- #ifndef TXT_MAIN_H #define TXT_MAIN_H -// The textscreen API itself doesn't need SDL; however, SDL needs its -// headers included where main() is defined. +// For the moment, txt_sdl.c is the only implementation of the base +// text mode screen API: -#include "SDL.h" +#include "txt_sdl.h" // Special keypress values that correspond to mouse button clicks // diff --git a/textscreen/txt_main.c b/textscreen/txt_sdl.c index f184ce0f..a7e08e1d 100644 --- a/textscreen/txt_main.c +++ b/textscreen/txt_sdl.c @@ -33,6 +33,7 @@ #include "doomkeys.h" #include "txt_main.h" +#include "txt_sdl.h" #include "txt_font.h" #define CHAR_W 8 @@ -46,6 +47,9 @@ static SDL_Surface *screen; static unsigned char *screendata; static int key_mapping = 1; +static TxtSDLEventCallbackFunc event_callback; +static void *event_callback_data; + //#define TANGO #ifndef TANGO @@ -321,6 +325,19 @@ signed int TXT_GetChar(void) while (SDL_PollEvent(&ev)) { + // If there is an event callback, allow it to intercept this + // event. + + if (event_callback != NULL) + { + if (event_callback(&ev, event_callback_data)) + { + continue; + } + } + + // Process the event. + switch (ev.type) { case SDL_MOUSEBUTTONDOWN: @@ -523,3 +540,9 @@ void TXT_SetWindowTitle(char *title) SDL_WM_SetCaption(title, NULL); } +void TXT_SDL_SetEventCallback(TxtSDLEventCallbackFunc callback, void *user_data) +{ + event_callback = callback; + event_callback_data = user_data; +} + diff --git a/textscreen/txt_sdl.h b/textscreen/txt_sdl.h new file mode 100644 index 00000000..ed131970 --- /dev/null +++ b/textscreen/txt_sdl.h @@ -0,0 +1,50 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// Copyright(C) 2005,2006 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +//----------------------------------------------------------------------------- +// +// Text mode emulation in SDL +// +//----------------------------------------------------------------------------- + +#ifndef TXT_SDL_H +#define TXT_SDL_H + +// The textscreen API itself doesn't need SDL; however, SDL needs its +// headers included where main() is defined. + +#include "SDL.h" + +// Event callback function type: a function of this type can be used +// to intercept events in the textscreen event processing loop. +// Returning 1 will cause the event to be eaten; the textscreen code +// will not see it. + +typedef int (*TxtSDLEventCallbackFunc)(SDL_Event *event, void *user_data); + +// Set a callback function to call in the SDL event loop. Useful for +// intercepting events. Pass callback=NULL to clear an existing +// callback function. +// user_data is a void pointer to be passed to the callback function. + +void TXT_SDL_SetEventCallback(TxtSDLEventCallbackFunc callback, void *user_data); + +#endif /* #ifndef TXT_SDL_H */ + |