]> git.tdb.fi Git - libs/gui.git/blobdiff - examples/ev.cpp
Add focus events to the event test program
[libs/gui.git] / examples / ev.cpp
index 9ded9c7bb47e07867d59f00ee12143594450b81a..cc15e71eb394005ac0a18c1a3acb44fa73187261 100644 (file)
@@ -3,6 +3,10 @@
 #include <msp/input/keyboard.h>
 #include <msp/input/mouse.h>
 #include <msp/io/print.h>
+#include <msp/stringcodec/codec.h>
+#include <msp/stringcodec/utf8.h>
+#include <msp/time/timedelta.h>
+#include <msp/time/utils.h>
 
 using namespace Msp;
 
@@ -19,8 +23,11 @@ public:
 private:
        virtual void tick();
 
+       void got_focus();
+       void lost_focus();
        void key_press(unsigned);
        void key_release(unsigned);
+       void character(StringCodec::unichar);
        void button_press(unsigned);
        void button_release(unsigned);
        void axis_motion(unsigned, float, float);
@@ -31,18 +38,33 @@ Ev::Ev(int, char **):
        keyboard(window),
        mouse(window)
 {
+       window.get_display().signal_got_focus.connect(sigc::mem_fun(this, &Ev::got_focus));
+       window.get_display().signal_lost_focus.connect(sigc::mem_fun(this, &Ev::lost_focus));
        window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Ev::exit), 0));
-       keyboard.signal_button_press.connect(sigc::mem_fun(this, &Ev::key_press));
-       keyboard.signal_button_release.connect(sigc::mem_fun(this, &Ev::key_release));
-       mouse.signal_button_press.connect(sigc::mem_fun(this, &Ev::button_press));
-       mouse.signal_button_release.connect(sigc::mem_fun(this, &Ev::button_release));
-       mouse.signal_axis_motion.connect(sigc::mem_fun(this, &Ev::axis_motion));
+       keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::key_press), false));
+       keyboard.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::key_release), false));
+       keyboard.signal_character.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::character), false));
+       mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::button_press), false));
+       mouse.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::button_release), false));
+       mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::axis_motion), false));
+       window.set_title("Event tester");
        window.show();
 }
 
 void Ev::tick()
 {
        window.tick();
+       Time::sleep(Time::msec);
+}
+
+void Ev::got_focus()
+{
+       IO::print("got_focus\n");
+}
+
+void Ev::lost_focus()
+{
+       IO::print("lost_focus\n");
 }
 
 void Ev::key_press(unsigned key)
@@ -55,6 +77,11 @@ void Ev::key_release(unsigned key)
        IO::print("key_release: %s\n", keyboard.get_button_name(key));
 }
 
+void Ev::character(StringCodec::unichar ch)
+{
+       IO::print("character: %s\n", StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
+}
+
 void Ev::button_press(unsigned btn)
 {
        IO::print("button_press: %s\n", mouse.get_button_name(btn));