]> git.tdb.fi Git - libs/gui.git/blob - examples/ev.cpp
Add focus events to the event test program
[libs/gui.git] / examples / ev.cpp
1 #include <msp/core/application.h>
2 #include <msp/graphics/simplewindow.h>
3 #include <msp/input/keyboard.h>
4 #include <msp/input/mouse.h>
5 #include <msp/io/print.h>
6 #include <msp/stringcodec/codec.h>
7 #include <msp/stringcodec/utf8.h>
8 #include <msp/time/timedelta.h>
9 #include <msp/time/utils.h>
10
11 using namespace Msp;
12
13 class Ev: public RegisteredApplication<Ev>
14 {
15 private:
16         Graphics::SimpleWindow window;
17         Input::Keyboard keyboard;
18         Input::Mouse mouse;
19
20 public:
21         Ev(int, char **);
22
23 private:
24         virtual void tick();
25
26         void got_focus();
27         void lost_focus();
28         void key_press(unsigned);
29         void key_release(unsigned);
30         void character(StringCodec::unichar);
31         void button_press(unsigned);
32         void button_release(unsigned);
33         void axis_motion(unsigned, float, float);
34 };
35
36 Ev::Ev(int, char **):
37         window(200, 200),
38         keyboard(window),
39         mouse(window)
40 {
41         window.get_display().signal_got_focus.connect(sigc::mem_fun(this, &Ev::got_focus));
42         window.get_display().signal_lost_focus.connect(sigc::mem_fun(this, &Ev::lost_focus));
43         window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Ev::exit), 0));
44         keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::key_press), false));
45         keyboard.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::key_release), false));
46         keyboard.signal_character.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::character), false));
47         mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::button_press), false));
48         mouse.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::button_release), false));
49         mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Ev::axis_motion), false));
50         window.set_title("Event tester");
51         window.show();
52 }
53
54 void Ev::tick()
55 {
56         window.tick();
57         Time::sleep(Time::msec);
58 }
59
60 void Ev::got_focus()
61 {
62         IO::print("got_focus\n");
63 }
64
65 void Ev::lost_focus()
66 {
67         IO::print("lost_focus\n");
68 }
69
70 void Ev::key_press(unsigned key)
71 {
72         IO::print("key_press: %s\n", keyboard.get_button_name(key));
73 }
74
75 void Ev::key_release(unsigned key)
76 {
77         IO::print("key_release: %s\n", keyboard.get_button_name(key));
78 }
79
80 void Ev::character(StringCodec::unichar ch)
81 {
82         IO::print("character: %s\n", StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
83 }
84
85 void Ev::button_press(unsigned btn)
86 {
87         IO::print("button_press: %s\n", mouse.get_button_name(btn));
88 }
89
90 void Ev::button_release(unsigned btn)
91 {
92         IO::print("button_release: %s\n", mouse.get_button_name(btn));
93 }
94
95 void Ev::axis_motion(unsigned axis, float value, float rel)
96 {
97         IO::print("axis_motion: %s %.3f %+.3f\n", mouse.get_axis_name(axis), value, rel);
98 }