1 #include <msp/core/application.h>
2 #include <msp/graphics/simplewindow.h>
3 #include <msp/input/gesturedetector.h>
4 #include <msp/input/keyboard.h>
5 #include <msp/input/mouse.h>
6 #include <msp/input/touchscreen.h>
7 #include <msp/io/print.h>
8 #include <msp/stringcodec/codec.h>
9 #include <msp/stringcodec/utf8.h>
10 #include <msp/time/timedelta.h>
11 #include <msp/time/utils.h>
15 class Ev: public RegisteredApplication<Ev>
18 Graphics::SimpleWindow window;
19 Input::Keyboard keyboard;
21 Input::Touchscreen *touch;
22 Input::GestureDetector *gesture;
33 void key_press(unsigned);
34 void key_release(unsigned);
35 void character(StringCodec::unichar);
36 void button_press(unsigned);
37 void button_release(unsigned);
38 void axis_motion(unsigned, float, float);
39 void touch_press(unsigned);
40 void touch_release(unsigned);
41 void touch_motion(unsigned, float, float);
42 void gesture_started(unsigned);
43 void gesture_ended(unsigned);
44 void gesture_axis(unsigned, float, float);
54 window.get_display().signal_got_focus.connect(sigc::mem_fun(this, &Ev::got_focus));
55 window.get_display().signal_lost_focus.connect(sigc::mem_fun(this, &Ev::lost_focus));
56 window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Ev::exit), 0));
57 keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::key_press), false));
58 keyboard.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::key_release), false));
59 keyboard.signal_character.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::character), false));
60 mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::button_press), false));
61 mouse.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::button_release), false));
62 mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::axis_motion), false));
63 if(Input::Touchscreen::is_available())
65 touch = new Input::Touchscreen(window);
66 gesture = new Input::GestureDetector(*touch);
67 touch->signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::touch_press), false));
68 touch->signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::touch_release), false));
69 touch->signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::touch_motion), false));
70 gesture->signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::gesture_started), false));
71 gesture->signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::gesture_ended), false));
72 gesture->signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::gesture_axis), false));
74 window.set_title("Event tester");
87 Time::sleep(Time::msec);
92 IO::print("got_focus\n");
97 IO::print("lost_focus\n");
100 void Ev::key_press(unsigned key)
102 IO::print("key_press: %s\n", keyboard.get_button_name(key));
105 void Ev::key_release(unsigned key)
107 IO::print("key_release: %s\n", keyboard.get_button_name(key));
110 void Ev::character(StringCodec::unichar ch)
112 IO::print("character: %s\n", StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
115 void Ev::button_press(unsigned btn)
117 IO::print("button_press: %s\n", mouse.get_button_name(btn));
120 void Ev::button_release(unsigned btn)
122 IO::print("button_release: %s\n", mouse.get_button_name(btn));
125 void Ev::axis_motion(unsigned axis, float value, float rel)
127 IO::print("axis_motion: %s %.3f %+.3f\n", mouse.get_axis_name(axis), value, rel);
130 void Ev::touch_press(unsigned btn)
132 IO::print("touch_press: %s\n", touch->get_button_name(btn));
135 void Ev::touch_release(unsigned btn)
137 IO::print("touch_release: %s\n", touch->get_button_name(btn));
140 void Ev::touch_motion(unsigned axis, float value, float rel)
142 IO::print("touch_motion: %s %.3f %+.3f\n", touch->get_axis_name(axis), value, rel);
145 void Ev::gesture_started(unsigned type)
147 IO::print("gesture_started: %s\n", gesture->get_button_name(type));
150 void Ev::gesture_ended(unsigned type)
152 IO::print("gesture_ended: %s\n", gesture->get_button_name(type));
155 void Ev::gesture_axis(unsigned axis, float value, float rel)
157 IO::print("gesture_axis: %s %.3f %.3f\n", gesture->get_axis_name(axis), value, rel);