#include <sigc++/bind.h>
+#include <msp/input/keys.h>
#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),
+ 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);
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)