]> git.tdb.fi Git - r2c2.git/blob - source/designer/tool.cpp
Fix some uninitialized variables
[r2c2.git] / source / designer / tool.cpp
1 #include <sigc++/bind.h>
2 #include <msp/input/keys.h>
3 #include "designer.h"
4 #include "tool.h"
5
6 using namespace Msp;
7
8 Tool::Tool(Designer &d, Input::Keyboard &keyboard, Input::Mouse &mouse):
9         designer(d),
10         shift_held(false),
11         ctrl_held(false),
12         done(false),
13         accepted(false)
14 {
15         keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::key_press), false));
16         keyboard.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::key_release), false));
17         mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::button_press), false));
18         mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::axis_motion), false));
19
20         pointer.x = mouse.get_axis_value(0);
21         pointer.y = mouse.get_axis_value(1);
22         ground_pointer = designer.map_pointer_to_ground(pointer);
23 }
24
25 void Tool::set_status(const std::string &s)
26 {
27         status = s;
28         signal_status.emit(status);
29 }
30
31 void Tool::set_done(bool a)
32 {
33         accepted = a;
34         done = true;
35         signal_done.emit();
36 }
37
38 void Tool::key_press(unsigned key)
39 {
40         if(key==Input::KEY_ESC)
41                 set_done(false);
42         else if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
43                 shift_held = true;
44         else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
45                 ctrl_held = true;
46 }
47
48 void Tool::key_release(unsigned key)
49 {
50         if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
51                 shift_held = false;
52         else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
53                 ctrl_held = false;
54 }
55
56 void Tool::button_press(unsigned btn)
57 {
58         if(btn==1)
59         {
60                 finish();
61                 set_done(true);
62         }
63         else if(btn==3)
64                 set_done(false);
65 }
66
67 void Tool::axis_motion(unsigned axis, float value, float)
68 {
69         if(axis==0)
70                 pointer.x = value;
71         else if(axis==1)
72                 pointer.y = value;
73         ground_pointer = designer.map_pointer_to_ground(pointer);
74
75         pointer_motion();
76 }