]> git.tdb.fi Git - libs/gui.git/blob - examples/ev.cpp
Output character events in the event example
[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
9 using namespace Msp;
10
11 class Ev: public RegisteredApplication<Ev>
12 {
13 private:
14         Graphics::SimpleWindow window;
15         Input::Keyboard keyboard;
16         Input::Mouse mouse;
17
18 public:
19         Ev(int, char **);
20
21 private:
22         virtual void tick();
23
24         void key_press(unsigned);
25         void key_release(unsigned);
26         void character(StringCodec::unichar);
27         void button_press(unsigned);
28         void button_release(unsigned);
29         void axis_motion(unsigned, float, float);
30 };
31
32 Ev::Ev(int, char **):
33         window(200, 200),
34         keyboard(window),
35         mouse(window)
36 {
37         window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Ev::exit), 0));
38         keyboard.signal_button_press.connect(sigc::mem_fun(this, &Ev::key_press));
39         keyboard.signal_button_release.connect(sigc::mem_fun(this, &Ev::key_release));
40         keyboard.signal_character.connect(sigc::mem_fun(this, &Ev::character));
41         mouse.signal_button_press.connect(sigc::mem_fun(this, &Ev::button_press));
42         mouse.signal_button_release.connect(sigc::mem_fun(this, &Ev::button_release));
43         mouse.signal_axis_motion.connect(sigc::mem_fun(this, &Ev::axis_motion));
44         window.show();
45 }
46
47 void Ev::tick()
48 {
49         window.tick();
50 }
51
52 void Ev::key_press(unsigned key)
53 {
54         IO::print("key_press: %s\n", keyboard.get_button_name(key));
55 }
56
57 void Ev::key_release(unsigned key)
58 {
59         IO::print("key_release: %s\n", keyboard.get_button_name(key));
60 }
61
62 void Ev::character(StringCodec::unichar ch)
63 {
64         IO::print("character: %s\n", StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
65 }
66
67 void Ev::button_press(unsigned btn)
68 {
69         IO::print("button_press: %s\n", mouse.get_button_name(btn));
70 }
71
72 void Ev::button_release(unsigned btn)
73 {
74         IO::print("button_release: %s\n", mouse.get_button_name(btn));
75 }
76
77 void Ev::axis_motion(unsigned axis, float value, float rel)
78 {
79         IO::print("axis_motion: %s %.3f %+.3f\n", mouse.get_axis_name(axis), value, rel);
80 }