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