]> git.tdb.fi Git - libs/gui.git/blob - source/input/mouse.cpp
Header updates
[libs/gui.git] / source / input / mouse.cpp
1 #include <msp/strings/format.h>
2 #include "mouse.h"
3
4 namespace Msp {
5 namespace Input {
6
7 Mouse::Mouse(Graphics::EventSource &s):
8         source(s)
9 {
10         name = "Mouse";
11
12         buttons.resize(3);
13         axes.resize(2);
14
15         source.signal_button_press.connect(sigc::mem_fun(this, &Mouse::button_press));
16         source.signal_button_release.connect(sigc::mem_fun(this, &Mouse::button_release));
17         source.signal_pointer_motion.connect(sigc::mem_fun(this, &Mouse::pointer_motion));
18 }
19
20 std::string Mouse::get_button_name(unsigned btn) const
21 {
22         switch(btn)
23         {
24         case 1:
25                 return "Left";
26         case 2:
27                 return "Middle";
28         case 3:
29                 return "Right";
30         case 4:
31                 return "Wheel Up";
32         case 5:
33                 return "Wheel Down";
34         default:
35                 return format("Button %d", btn);
36         }
37 }
38
39 std::string Mouse::get_axis_name(unsigned axis) const
40 {
41         switch(axis)
42         {
43         case 0:
44                 return "X axis";
45         case 1:
46                 return "Y axis";
47         default:
48                 return format("Axis %d", axis);
49         };
50 }
51
52 void Mouse::button_press(int, int, unsigned btn, unsigned)
53 {
54         set_button_state(btn, true, true);
55 }
56
57 void Mouse::button_release(int, int, unsigned btn, unsigned)
58 {
59         set_button_state(btn, false, true);
60 }
61
62 void Mouse::pointer_motion(int x, int y)
63 {
64         set_axis_value(0, x*2.0f/source.get_width()-1.0f, true);
65         set_axis_value(1, 1.0f-y*2.0f/source.get_height(), true);
66 }
67
68 } // namespace Input
69 } // namespace Msp