X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Ftool.cpp;h=249259ecae2bb6d5da9a0f80f774ef93bc2dcf15;hb=3907520897611cb1b5f2f938c60d3eaff34477a5;hp=a0419d04f8699018a6ac7c23998a4ea1c6b2f022;hpb=678982e7ddb22bb5fd44ce448d1c5cbf646b2573;p=r2c2.git diff --git a/source/designer/tool.cpp b/source/designer/tool.cpp index a0419d0..249259e 100644 --- a/source/designer/tool.cpp +++ b/source/designer/tool.cpp @@ -1,14 +1,21 @@ #include +#include #include "designer.h" #include "tool.h" using namespace Msp; -Tool::Tool(Designer &d, Input::Mouse &mouse): +Tool::Tool(Designer &d, Input::Keyboard &keyboard, Input::Mouse &mouse): designer(d), - done(false) + shift_held(false), + ctrl_held(false), + done(false), + accepted(false) { + keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::key_press), false)); + keyboard.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::key_release), false)); mouse.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::button_press), false)); + mouse.signal_button_release.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::button_release), false)); mouse.signal_axis_motion.connect(sigc::bind_return(sigc::mem_fun(this, &Tool::axis_motion), false)); pointer.x = mouse.get_axis_value(0); @@ -22,12 +29,42 @@ void Tool::set_status(const std::string &s) signal_status.emit(status); } -void Tool::set_done() +void Tool::set_done(bool a) { + accepted = a; done = true; signal_done.emit(); } +void Tool::key_press(unsigned key) +{ + if(key==Input::KEY_ESC) + set_done(false); + else if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R) + shift_held = true; + else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R) + ctrl_held = true; +} + +void Tool::key_release(unsigned key) +{ + if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R) + shift_held = false; + else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R) + ctrl_held = false; +} + +void Tool::button_press(unsigned btn) +{ + if(btn==1) + { + finish(); + set_done(true); + } + else if(btn==3) + set_done(false); +} + void Tool::axis_motion(unsigned axis, float value, float) { if(axis==0) @@ -35,4 +72,6 @@ void Tool::axis_motion(unsigned axis, float value, float) else if(axis==1) pointer.y = value; ground_pointer = designer.map_pointer_to_ground(pointer); + + pointer_motion(); }