From f3462a2abe3d0a09dcd4ed99f0fb1b3385200ffc Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Wed, 6 Apr 2016 20:30:28 +0000 Subject: Rewrite Fl_get_key.cxx under the driver model. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11545 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/CMakeLists.txt | 4 +++- src/Fl.cxx | 8 ++++++++ src/Fl_get_key.cxx | 19 +++++-------------- src/Fl_get_key_mac.cxx | 4 ++-- src/Fl_get_key_win32.cxx | 6 +++--- src/Makefile | 14 ++++++++------ src/drivers/Darwin/Fl_Darwin_System_Driver.H | 3 +++ src/drivers/Posix/Fl_Posix_System_Driver.H | 3 +++ src/drivers/WinAPI/Fl_WinAPI_System_Driver.H | 3 +++ 9 files changed, 38 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 83588a4a4..88b8137b8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -93,7 +93,6 @@ set (CPPFILES Fl_arg.cxx Fl_compose.cxx Fl_display.cxx - Fl_get_key.cxx Fl_get_system_colors.cxx Fl_grab.cxx Fl_lock.cxx @@ -187,6 +186,7 @@ if (USE_X11) fl_dnd_x.cxx Fl_Native_File_Chooser_FLTK.cxx Fl_Native_File_Chooser_GTK.cxx + Fl_get_key.cxx ) if (USE_XFT) set (DRIVER_FILES ${DRIVER_FILES} @@ -252,6 +252,7 @@ elseif (APPLE) drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx drivers/Darwin/Fl_Darwin_System_Driver.cxx + Fl_get_key_mac.cxx ) set (DRIVER_HEADER_FILES drivers/Darwin/Fl_Darwin_System_Driver.H @@ -283,6 +284,7 @@ else () Fl_win32.cxx fl_dnd_win32.cxx Fl_Native_File_Chooser_WIN32.cxx + Fl_get_key_win32.cxx ) set (DRIVER_HEADER_FILES drivers/WinAPI/Fl_WinAPI_System_Driver.H diff --git a/src/Fl.cxx b/src/Fl.cxx index 88934c23e..d1793cdce 100644 --- a/src/Fl.cxx +++ b/src/Fl.cxx @@ -1896,6 +1896,14 @@ void Fl::insertion_point_location(int x, int y, int height) { // sets window coo Fl::screen_driver()->insertion_point_location(x, y, height); } +int Fl::event_key(int k) { + return system_driver()->event_key(k); +} + +int Fl::get_key(int k) { + return system_driver()->get_key(k); +} + // // End of "$Id$". // diff --git a/src/Fl_get_key.cxx b/src/Fl_get_key.cxx index ac55ed95d..36f9bacfa 100644 --- a/src/Fl_get_key.cxx +++ b/src/Fl_get_key.cxx @@ -16,24 +16,17 @@ // http://www.fltk.org/str.php // -#ifdef WIN32 -# include "Fl_get_key_win32.cxx" -#elif defined(__APPLE__) // PORTME: Fl_Screen_Driver - platform keyboard stuff -# include "Fl_get_key_mac.cxx" -#elif defined(FL_PORTING) -# pragma message "FL_PORTING: implement keyboard reading and interpretation in its own file" -#else - // Return the current state of a key. This is the X version. I identify // keys (mostly) by the X keysym. So this turns the keysym into a keycode // and looks it up in the X key bit vector, which Fl_x.cxx keeps track of. -# include -# include +#include +#include "drivers/Posix/Fl_Posix_System_Driver.H" +#include // for fl_display extern char fl_key_vector[32]; // in Fl_x.cxx -int Fl::event_key(int k) { +int Fl_Posix_System_Driver::event_key(int k) { if (k > FL_Button && k <= FL_Button+8) return Fl::event_state(8<<(k-FL_Button)); int i; @@ -49,14 +42,12 @@ int Fl::event_key(int k) { return fl_key_vector[i/8] & (1 << (i%8)); } -int Fl::get_key(int k) { +int Fl_Posix_System_Driver::get_key(int k) { fl_open_display(); XQueryKeymap(fl_display, fl_key_vector); return event_key(k); } -#endif - // // End of "$Id$". // diff --git a/src/Fl_get_key_mac.cxx b/src/Fl_get_key_mac.cxx index 02c657f1b..d68bde430 100644 --- a/src/Fl_get_key_mac.cxx +++ b/src/Fl_get_key_mac.cxx @@ -237,12 +237,12 @@ static int fltk2mac(int fltk) { } //: returns true, if that key was pressed during the last event -int Fl::event_key(int k) { +int Fl_Darwin_System_Driver::event_key(int k) { return get_key(k); } //: returns true, if that key is pressed right now -int Fl::get_key(int k) { +int Fl_Darwin_System_Driver::get_key(int k) { #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 if (&CGEventSourceKeyState != NULL) { return (int)CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState, fltk2mac(k) ); diff --git a/src/Fl_get_key_win32.cxx b/src/Fl_get_key_win32.cxx index 0d717a1f6..0684bb512 100644 --- a/src/Fl_get_key_win32.cxx +++ b/src/Fl_get_key_win32.cxx @@ -20,7 +20,7 @@ // which are actually X keysyms. So this has to translate to MSWindows // VK_x symbols. -#include +#include "drivers/WinAPI//Fl_WinAPI_System_Driver.H" #include // convert an Fltk (X) keysym to a MSWindows VK symbol: @@ -115,11 +115,11 @@ static int fltk2ms(int fltk) { return 0; } -int Fl::event_key(int k) { +int Fl_WinAPI_System_Driver::event_key(int k) { return GetKeyState(fltk2ms(k))&~1; } -int Fl::get_key(int k) { +int Fl_WinAPI_System_Driver::get_key(int k) { uchar foo[256]; GetKeyboardState(foo); return foo[fltk2ms(k)]&~1; diff --git a/src/Makefile b/src/Makefile index 7f6ddcbc2..c5bce1a7b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -112,7 +112,6 @@ CPPFILES = \ Fl_arg.cxx \ Fl_compose.cxx \ Fl_display.cxx \ - Fl_get_key.cxx \ Fl_get_system_colors.cxx \ Fl_grab.cxx \ Fl_lock.cxx \ @@ -231,7 +230,8 @@ QUARTZCPPFILES = \ drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx \ drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx \ drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx \ - drivers/Darwin/Fl_Darwin_System_Driver.cxx + drivers/Darwin/Fl_Darwin_System_Driver.cxx \ + Fl_get_key_mac.cxx # These C++ files are used under condition: BUILD_X11 XLIBCPPFILES = \ @@ -252,7 +252,8 @@ XLIBCPPFILES = \ Fl_x.cxx \ fl_dnd_x.cxx \ Fl_Native_File_Chooser_FLTK.cxx \ - Fl_Native_File_Chooser_GTK.cxx + Fl_Native_File_Chooser_GTK.cxx \ + Fl_get_key.cxx # This C file is used under condition: BUILD_X11 XLIBCFILES = \ @@ -290,7 +291,8 @@ GDICPPFILES = \ drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx \ Fl_win32.cxx \ fl_dnd_win32.cxx \ - Fl_Native_File_Chooser_WIN32.cxx + Fl_Native_File_Chooser_WIN32.cxx \ + Fl_get_key_win32.cxx PSCPPFILES = \ drivers/PostScript/Fl_PostScript.cxx \ @@ -591,7 +593,8 @@ include makedepend # they are part of the WIN32 and MacOS code base... # Please add only non-Linux/Unix files or such that are optional # (like "*xft*") here: -Fl_get_key.o: Fl_get_key_mac.cxx Fl_get_key_win32.cxx +Fl_get_key_mac.o: Fl_get_key_mac.cxx +Fl_get_key_win32.o: Fl_get_key_win32.cxx Fl_Native_File_Chooser_WIN32.o : Fl_Native_File_Chooser_WIN32.cxx Fl_Native_File_Chooser_MAC.o: Fl_Native_File_Chooser_MAC.mm Fl_Native_File_Chooser_FLTK.o: Fl_Native_File_Chooser_FLTK.cxx @@ -616,7 +619,6 @@ fl_encoding_latin1.o: ../FL/mac.H ../FL/win32.H fl_encoding_mac_roman.o: ../FL/mac.H ../FL/win32.H Fl_File_Chooser2.o: ../FL/mac.H ../FL/win32.H fl_font.o: ../FL/mac.H ../FL/win32.H -Fl_get_key.o: ../FL/mac.H ../FL/win32.H Fl_get_system_colors.o: ../FL/mac.H ../FL/win32.H Fl_Gl_Choice.o: ../FL/mac.H ../FL/win32.H Fl_Gl_Overlay.o: ../FL/mac.H ../FL/win32.H diff --git a/src/drivers/Darwin/Fl_Darwin_System_Driver.H b/src/drivers/Darwin/Fl_Darwin_System_Driver.H index 633e56dc6..442dcd687 100644 --- a/src/drivers/Darwin/Fl_Darwin_System_Driver.H +++ b/src/drivers/Darwin/Fl_Darwin_System_Driver.H @@ -65,6 +65,9 @@ public: virtual int clocale_printf(FILE *output, const char *format, va_list args); static void *get_carbon_function(const char *name); static int calc_mac_os_version(); // computes the fl_mac_os_version global variable + // these 2 are in Fl_get_key_mac.cxx + virtual int event_key(int k); + virtual int get_key(int k); }; #endif // FL_DARWIN_SYSTEM_DRIVER_H diff --git a/src/drivers/Posix/Fl_Posix_System_Driver.H b/src/drivers/Posix/Fl_Posix_System_Driver.H index 9551f5867..1c8042e3f 100644 --- a/src/drivers/Posix/Fl_Posix_System_Driver.H +++ b/src/drivers/Posix/Fl_Posix_System_Driver.H @@ -62,6 +62,9 @@ public: virtual int rmdir(const char* f) {return ::rmdir(f);} virtual int rename(const char* f, const char *n) {return ::rename(f, n);} virtual int clocale_printf(FILE *output, const char *format, va_list args); + // these 2 are in Fl_get_key.cxx + virtual int event_key(int k); + virtual int get_key(int k); }; #endif // FL_POSIX_SYSTEM_DRIVER_H diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H index dd58c5671..bb903f00a 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.H @@ -65,6 +65,9 @@ public: virtual unsigned utf8to_mb(const char* src, unsigned srclen, char* dst, unsigned dstlen); virtual unsigned utf8from_mb(char* dst, unsigned dstlen, const char* src, unsigned srclen); virtual int clocale_printf(FILE *output, const char *format, va_list args); + // these 2 are in Fl_get_key_win32.cxx + virtual int event_key(int k); + virtual int get_key(int k); }; #endif // FL_WINAPI_SYSTEM_DRIVER_H -- cgit v1.2.3