]> git.tdb.fi Git - libs/gltk.git/commitdiff
Adjust event handling to match changes in mspgui
authorMikko Rasa <tdb@tdb.fi>
Wed, 21 Nov 2012 15:56:49 +0000 (17:56 +0200)
committerMikko Rasa <tdb@tdb.fi>
Wed, 21 Nov 2012 15:56:49 +0000 (17:56 +0200)
source/entry.cpp
source/entry.h
source/panel.cpp
source/panel.h
source/root.cpp
source/root.h
source/widget.h

index ec6bba702983081fa0de856911da0484a3b50953..0e1414ce74339b7fd98e67a9f0354f18df1375a3 100644 (file)
@@ -126,7 +126,7 @@ void Entry::render_special(const Part &part) const
                slider->render();
 }
 
-void Entry::key_press(unsigned key, unsigned, wchar_t ch)
+void Entry::key_press(unsigned key, unsigned)
 {
        if(key==Input::KEY_LEFT)
        {
@@ -181,9 +181,13 @@ void Entry::key_press(unsigned key, unsigned, wchar_t ch)
                else
                        signal_enter.emit();
        }
-       else if(ch>=' ')
+}
+
+void Entry::character(wchar_t ch)
+{
+       if(ch>=' ')
        {
-               text.insert(edit_pos, Codecs::encode<Codecs::Utf8>(Codecs::ustring(1, ch)));
+               text.insert(edit_pos, StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
                ++edit_pos;
        }
 }
index 2323a38c67168096d8286cd87cb80d1132ea484c..058ef3fb38321df9c2e782888859a3d331daf684 100644 (file)
@@ -55,7 +55,8 @@ private:
        virtual void render_special(const Part &) const;
 
 public:
-       virtual void key_press(unsigned, unsigned, wchar_t);
+       virtual void key_press(unsigned, unsigned);
+       virtual void character(wchar_t);
 private:
        virtual void on_geometry_change();
        virtual void on_style_change();
index 4b44370343c47bcbe8fae960ad0d6827881bb234..a086a4e443f6fbebc779e570e9b29500063bbd03 100644 (file)
@@ -127,10 +127,10 @@ void Panel::pointer_leave()
        set_pointer_focus(0);
 }
 
-void Panel::key_press(unsigned key, unsigned mod, wchar_t ch)
+void Panel::key_press(unsigned key, unsigned mod)
 {
        if(input_focus)
-               input_focus->key_press(key, mod, ch);
+               input_focus->key_press(key, mod);
 }
 
 void Panel::key_release(unsigned key, unsigned mod)
@@ -139,6 +139,12 @@ void Panel::key_release(unsigned key, unsigned mod)
                input_focus->key_release(key, mod);
 }
 
+void Panel::character(wchar_t ch)
+{
+       if(input_focus)
+               input_focus->character(ch);
+}
+
 void Panel::focus_out()
 {
        set_input_focus(0);
index 2ba916d1b39eba7e4a8e264bea550f3b3c453b69..b1261c3b9d5fd5c96b1ba5f79db3735a841a9069 100644 (file)
@@ -78,8 +78,9 @@ public:
        virtual void button_release(int, int, unsigned);
        virtual void pointer_motion(int, int);
        virtual void pointer_leave();
-       virtual void key_press(unsigned, unsigned, wchar_t);
+       virtual void key_press(unsigned, unsigned);
        virtual void key_release(unsigned, unsigned);
+       virtual void character(wchar_t);
        virtual void focus_out();
 protected:
        virtual void on_child_added(Widget &);
index 826a5403dee110a77ed54d5e48640233124d10c7..bce6adf8f7a9799fd9811696969737cc6ddc178f 100644 (file)
@@ -12,6 +12,8 @@ namespace GLtk {
 Root::Root(const Resources &r, Graphics::Window &w):
        resources(r),
        window(w),
+       keyboard(window),
+       mouse(window),
        lbl_tooltip(0),
        tooltip_target(0)
 {
@@ -19,11 +21,12 @@ Root::Root(const Resources &r, Graphics::Window &w):
 
        update_style();
 
-       window.signal_button_press.connect(sigc::mem_fun(this, &Root::button_press_event));
-       window.signal_button_release.connect(sigc::mem_fun(this, &Root::button_release_event));
-       window.signal_pointer_motion.connect(sigc::mem_fun(this, &Root::pointer_motion_event));
-       window.signal_key_press.connect(sigc::mem_fun(this, &Root::key_press_event));
-       window.signal_key_release.connect(sigc::mem_fun(this, &Root::key_release_event));
+       mouse.signal_button_press.connect(sigc::mem_fun(this, &Root::button_press_event));
+       mouse.signal_button_release.connect(sigc::mem_fun(this, &Root::button_release_event));
+       mouse.signal_axis_motion.connect(sigc::mem_fun(this, &Root::axis_motion_event));
+       keyboard.signal_button_press.connect(sigc::mem_fun(this, &Root::key_press_event));
+       keyboard.signal_button_release.connect(sigc::mem_fun(this, &Root::key_release_event));
+       keyboard.signal_character.connect(sigc::mem_fun(this, &Root::character_event));
 }
 
 void Root::tick()
@@ -81,39 +84,32 @@ void Root::render() const
        Widget::render();
 }
 
-void Root::button_press_event(int x, int y, unsigned btn, unsigned mod)
+void Root::button_press_event(unsigned btn)
 {
        if(visible)
        {
-               Widget *old_focus = pointer_focus;
-
-               translate_coords(x, y);
+               int x, y;
+               get_pointer(x, y);
                button_press(x, y, btn);
-
-               if(!pointer_focus && !old_focus)
-                       signal_button_press.emit(x, geom.h-1-y, btn, mod);
        }
 }
 
-void Root::button_release_event(int x, int y, unsigned btn, unsigned mod)
+void Root::button_release_event(unsigned btn)
 {
        if(visible)
        {
-               Widget *old_focus = pointer_focus;
-
-               translate_coords(x, y);
+               int x, y;
+               get_pointer(x, y);
                button_release(x, y, btn);
-
-               if(!pointer_focus && !old_focus)
-                       signal_button_release.emit(x, geom.h-1-y, btn, mod);
        }
 }
 
-void Root::pointer_motion_event(int x, int y)
+void Root::axis_motion_event(unsigned, float, float)
 {
        if(visible)
        {
-               translate_coords(x, y);
+               int x, y;
+               get_pointer(x, y);
                pointer_motion(x, y);
 
                if(!tooltip_target)
@@ -128,42 +124,32 @@ void Root::pointer_motion_event(int x, int y)
                                lbl_tooltip->set_visible(false);
                        tooltip_target = 0;
                }
-
-               if(!pointer_focus)
-                       signal_pointer_motion.emit(x, geom.h-1-y);
        }
 }
 
-void Root::key_press_event(unsigned key, unsigned mod, wchar_t ch)
+void Root::key_press_event(unsigned key)
 {
+       // XXX Modifiers
        if(visible)
-       {
-               Widget *old_focus = input_focus;
-
-               key_press(Input::key_from_sys(key), mod, ch);
-
-               if(!input_focus && !old_focus)
-                       signal_key_press.emit(key, mod, ch);
-       }
+               key_press(key, 0);
 }
 
-void Root::key_release_event(unsigned key, unsigned mod)
+void Root::key_release_event(unsigned key)
 {
        if(visible)
-       {
-               Widget *old_focus = input_focus;
-
-               key_release(Input::key_from_sys(key), mod);
+               key_release(key, 0);
+}
 
-               if(!input_focus && !old_focus)
-                       signal_key_release.emit(key, mod);
-       }
+void Root::character_event(StringCodec::unichar ch)
+{
+       if(visible)
+               character(ch);
 }
 
-void Root::translate_coords(int &x, int &y)
+void Root::get_pointer(int &x, int &y)
 {
-       x = x*geom.w/window.get_width();
-       y = geom.h-1-y*geom.h/window.get_height();
+       x = (mouse.get_axis_value(0)*0.5+0.5)*geom.w;
+       y = (mouse.get_axis_value(1)*0.5+0.5)*geom.h;
 }
 
 } // namespace GLtk
index b66f016fc15249a162217eee371e002332d17eab..53f8ff3d74c37aa81a59478d37371719ad0e85c9 100644 (file)
@@ -2,7 +2,9 @@
 #define MSP_GLTK_ROOT_H_
 
 #include <sigc++/trackable.h>
-#include <msp/gbase/window.h>
+#include <msp/graphics/window.h>
+#include <msp/input/keyboard.h>
+#include <msp/input/mouse.h>
 #include <msp/time/timestamp.h>
 #include "panel.h"
 
@@ -17,7 +19,7 @@ input from it.  When created, a Root widget will take its size from the window
 it is created for.  The size can be changed, but a Root should always be
 rendered to fill the window in order to get coordinates mapped correctly.
 */
-class Root: public Panel, public Graphics::EventSource, public sigc::trackable
+class Root: public Panel, public sigc::trackable
 {
 public:
        sigc::signal<std::string, int, int> signal_tooltip;
@@ -25,6 +27,8 @@ public:
 private:
        const Resources &resources;
        Graphics::Window &window;
+       Input::Keyboard keyboard;
+       Input::Mouse mouse;
        Label *lbl_tooltip;
        int pointer_x;
        int pointer_y;
@@ -44,13 +48,14 @@ public:
        void render() const;
 
 private:
-       void button_press_event(int, int, unsigned, unsigned);
-       void button_release_event(int, int, unsigned, unsigned);
-       void pointer_motion_event(int, int);
-       void key_press_event(unsigned, unsigned, wchar_t);
-       void key_release_event(unsigned, unsigned);
+       void button_press_event(unsigned);
+       void button_release_event(unsigned);
+       void axis_motion_event(unsigned, float, float);
+       void key_press_event(unsigned);
+       void key_release_event(unsigned);
+       void character_event(StringCodec::unichar);
 
-       void translate_coords(int &, int &);
+       void get_pointer(int &, int &);
 };
 
 } // namespace GLtk
index 51728c35e0424bb63a5564e7108366ff55ee725c..665ca9d0e7605161ab8e5a3f0648e45d1d55994e 100644 (file)
@@ -108,8 +108,9 @@ public:
        virtual void pointer_motion(int, int) { }
        virtual void pointer_enter();
        virtual void pointer_leave();
-       virtual void key_press(unsigned, unsigned, wchar_t) { }
+       virtual void key_press(unsigned, unsigned) { }
        virtual void key_release(unsigned, unsigned) { }
+       virtual void character(wchar_t) { }
        virtual void focus_in();
        virtual void focus_out();
 protected: