]> git.tdb.fi Git - libs/gui.git/commitdiff
Add EventSource abstraction layer below Window
authorMikko Rasa <tdb@tdb.fi>
Sun, 28 Feb 2010 11:28:36 +0000 (11:28 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sun, 28 Feb 2010 11:28:36 +0000 (11:28 +0000)
source/gbase/eventsource.h [new file with mode: 0644]
source/gbase/window.cpp
source/gbase/window.h
source/input/keyboard.cpp
source/input/keyboard.h
source/input/keys.cpp
source/input/keys.h
source/input/mouse.cpp
source/input/mouse.h

diff --git a/source/gbase/eventsource.h b/source/gbase/eventsource.h
new file mode 100644 (file)
index 0000000..8133bbe
--- /dev/null
@@ -0,0 +1,36 @@
+/* $Id$
+
+This file is part of libmspgbase
+Copyright © 2010  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#ifndef MSP_GBASE_EVENTSOURCE_H_
+#define MSP_GBASE_EVENTSOURCE_H_
+
+namespace Msp {
+namespace Graphics {
+
+class EventSource
+{
+public:
+       sigc::signal<void, unsigned, unsigned, unsigned> signal_key_press;
+       sigc::signal<void, unsigned, unsigned> signal_key_release;
+       sigc::signal<void, int, int, unsigned, unsigned> signal_button_press;
+       sigc::signal<void, int, int, unsigned, unsigned> signal_button_release;
+       sigc::signal<void, int, int> signal_pointer_motion;
+       sigc::signal<void, unsigned, unsigned> signal_resize;
+
+protected:
+       EventSource() { }
+public:
+       virtual ~EventSource() { }
+
+       virtual unsigned get_width() const = 0;
+       virtual unsigned get_height() const = 0;
+};
+
+} // namespace Graphics
+} // namespace Msp
+
+#endif
index 089136003529f2fbd56a0c002ddcccdde88304ee..ad130d9eb3c08a27d319c4f1f8b7adeed8967e9c 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007-2008  Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2010  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
index 38ffb6d5aee967ad81121f8bde8a1abc34b971b6..c008fe8353d86b8a41921f2ab012252e33f33919 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007-2008  Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2010  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -10,6 +10,7 @@ Distributed under the LGPL
 
 #include <string>
 #include <sigc++/signal.h>
+#include "eventsource.h"
 
 namespace Msp {
 namespace Graphics {
@@ -26,18 +27,12 @@ struct WindowOptions
        WindowOptions();
 };
 
-class Window
+class Window: public EventSource
 {
 public:
        struct Private;
        struct Event;
 
-       sigc::signal<void, int, int, unsigned, unsigned> signal_button_press;
-       sigc::signal<void, int, int, unsigned, unsigned> signal_button_release;
-       sigc::signal<void, int, int> signal_pointer_motion;
-       sigc::signal<void, unsigned, unsigned, unsigned> signal_key_press;
-       sigc::signal<void, unsigned, unsigned> signal_key_release;
-       sigc::signal<void, unsigned, unsigned> signal_resize;
        sigc::signal<void> signal_close;
 
 protected:
@@ -65,8 +60,8 @@ public:
 
        Display &get_display() const { return display; }
        const WindowOptions &get_options() const { return options; }
-       unsigned get_width() const  { return options.width; }
-       unsigned get_height() const { return options.height; }
+       virtual unsigned get_width() const { return options.width; }
+       virtual unsigned get_height() const { return options.height; }
        const Private &get_private() const { return *priv; }
 
        void show();
index cef812c1344d3cdfa5f2c7ef181caf43d29c7f1c..963a06266fd5a033f91e5e2d448e4968bbbf6c53 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007-2008  Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2008, 2010  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -20,15 +20,15 @@ Distributed under the LGPL
 namespace Msp {
 namespace Input {
 
-Keyboard::Keyboard(Graphics::Window &w):
-       window(w)
+Keyboard::Keyboard(Graphics::EventSource &s):
+       source(s)
 {
        name="Keyboard";
 
        buttons.resize(N_KEYS_, false);
 
-       window.signal_key_press.connect(sigc::mem_fun(this, &Keyboard::key_press));
-       window.signal_key_release.connect(sigc::mem_fun(this, &Keyboard::key_release));
+       source.signal_key_press.connect(sigc::mem_fun(this, &Keyboard::key_press));
+       source.signal_key_release.connect(sigc::mem_fun(this, &Keyboard::key_release));
 }
 
 std::string Keyboard::get_button_name(unsigned btn) const
index 1b70fecfbde1211b07c48c1fb78e78ae32c21aa9..944cf4dfef7657fe9536a3a21cb7767f04a01b0d 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2008, 2010 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -21,10 +21,10 @@ are translated to platform-independent values.  See keys.h for a list.
 class Keyboard: public Device
 {
 private:
-       Graphics::Window &window;
+       Graphics::EventSource &source;
 
 public:
-       Keyboard(Graphics::Window &);
+       Keyboard(Graphics::EventSource &);
 
        virtual std::string get_button_name(unsigned) const;
 private:
index 4446a7f731568fe828d1b823bc93bf56bd00e675..15f729abe16652ea0f5304e540e9d39333791f76 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2008, 2010 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -9,6 +9,7 @@ Distributed under the LGPL
 #ifdef WIN32
 #include <windows.h>
 #else
+#include <X11/X.h>
 #include <X11/keysym.h>
 #endif
 #include <msp/core/except.h>
@@ -103,6 +104,15 @@ unsigned keymap[Msp::Input::N_KEYS_]=
 #endif
 };
 
+unsigned modmap[Msp::Input::N_MODS_]=
+{
+#ifndef WIN32
+       ShiftMask, ControlMask, Mod1Mask, Mod4Mask
+#else
+       1, 2, 4, 8
+#endif
+};
+
 }
 
 namespace Msp {
@@ -131,10 +141,19 @@ unsigned key_from_sys(unsigned code)
 
 unsigned key_to_sys(unsigned key)
 {
-       if(key>N_KEYS_)
+       if(key>=N_KEYS_)
                throw InvalidParameterValue("Key out of range");
        return keymap[key];
 }
 
+unsigned mod_from_sys(unsigned mod)
+{
+       unsigned result;
+       for(unsigned i=0; i<N_MODS_; ++i)
+               if(mod&modmap[i])
+                       result|=1<<i;
+       return result;
+}
+
 } // namespace Input
 } // namespace Msp
index e17459ae5f98d99e423ee1a789ac9d4ee34ef4e9..9718f83dc94074c9b05cdbd2eafed253f3094c36 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2008, 2010 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -146,9 +146,20 @@ enum
        N_KEYS_ = 0x100
 };
 
+enum
+{
+       MOD_SHIFT = 1,
+       MOD_CONTROL = 2,
+       MOD_ALT = 4,
+       MOD_SUPER = 8,
+       N_MODS_ = 4
+};
+
 extern unsigned key_from_sys(unsigned);
 extern unsigned key_to_sys(unsigned);
 
+extern unsigned mod_from_sys(unsigned);
+
 } // namespace Input
 } // namespace Msp
 
index 0fbc940f144b23537495cf99825db4b3e09fbc8b..6717427535b4190f49f3720cef2e29dcc4f6e4b1 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2008, 2010  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -11,17 +11,17 @@ Distributed under the LGPL
 namespace Msp {
 namespace Input {
 
-Mouse::Mouse(Graphics::Window &w):
-       window(w)
+Mouse::Mouse(Graphics::EventSource &s):
+       source(s)
 {
        name="Mouse";
 
        buttons.resize(3);
        axes.resize(2);
 
-       window.signal_button_press.connect(sigc::mem_fun(this, &Mouse::button_press));
-       window.signal_button_release.connect(sigc::mem_fun(this, &Mouse::button_release));
-       window.signal_pointer_motion.connect(sigc::mem_fun(this, &Mouse::pointer_motion));
+       source.signal_button_press.connect(sigc::mem_fun(this, &Mouse::button_press));
+       source.signal_button_release.connect(sigc::mem_fun(this, &Mouse::button_release));
+       source.signal_pointer_motion.connect(sigc::mem_fun(this, &Mouse::pointer_motion));
 }
 
 std::string Mouse::get_button_name(unsigned btn) const
@@ -68,8 +68,8 @@ void Mouse::button_release(int, int, unsigned btn, unsigned)
 
 void Mouse::pointer_motion(int x, int y)
 {
-       set_axis_value(0, x*2.0f/window.get_width()-1.0f, true);
-       set_axis_value(1, 1.0f-y*2.0f/window.get_height(), true);
+       set_axis_value(0, x*2.0f/source.get_width()-1.0f, true);
+       set_axis_value(1, 1.0f-y*2.0f/source.get_height(), true);
 }
 
 } // namespace Input
index 84f9ce0c87b49f4b7c54f5c046c3596501346e13..0a0f4fa0f1aa9cf66d566d648405944ef3f1512b 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2008, 2010  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 
@@ -23,10 +23,10 @@ Note: Y axis grows upwards.
 class Mouse: public Device
 {
 private:
-       Graphics::Window &window;
+       Graphics::EventSource &source;
 
 public:
-       Mouse(Graphics::Window &);
+       Mouse(Graphics::EventSource &);
        virtual std::string get_button_name(unsigned) const;
        virtual std::string get_axis_name(unsigned) const;
 private: