]> git.tdb.fi Git - libs/gui.git/blobdiff - source/input/mouse.cpp
Reorganize files to separate gbase and input
[libs/gui.git] / source / input / mouse.cpp
diff --git a/source/input/mouse.cpp b/source/input/mouse.cpp
new file mode 100644 (file)
index 0000000..931b204
--- /dev/null
@@ -0,0 +1,64 @@
+/* $Id$
+
+This file is part of libmspgbase
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#include <msp/strings/formatter.h>
+#include "mouse.h"
+
+namespace Msp {
+namespace Input {
+
+Mouse::Mouse(Graphics::Window &w):
+       window(w),
+       axis_scale(0.01)
+{
+       name="Mouse";
+
+       buttons.resize(3);
+       axes.resize(2);
+
+       window.signal_button_press.connect(sigc::mem_fun(this, &Mouse::button_press));
+       window.signal_button_release.connect(sigc::mem_fun(this, &Mouse::button_release));
+       window.signal_pointer_motion.connect(sigc::mem_fun(this, &Mouse::pointer_motion));
+}
+
+std::string Mouse::get_button_name(unsigned btn) const
+{
+       switch(btn)
+       {
+       case 1:
+               return "Left";
+       case 2:
+               return "Middle";
+       case 3:
+               return "Right";
+       case 4:
+               return "Wheel Up";
+       case 5:
+               return "Wheel Down";
+       default:
+               return format("Button %d", btn);
+       }
+}
+
+void Mouse::button_press(int, int, unsigned btn, unsigned)
+{
+       set_button_state(btn, true, true);
+}
+
+void Mouse::button_release(int, int, unsigned btn, unsigned)
+{
+       set_button_state(btn, false, true);
+}
+
+void Mouse::pointer_motion(int x, int y)
+{
+       set_axis_value(0, x*axis_scale, true);
+       set_axis_value(1, y*axis_scale, true);
+}
+
+} // namespace Input
+} // namespace Msp