X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finput%2Fmouse.cpp;h=476275f4a77bc75024d254903abc3cb6ba74140f;hb=762a1118c53b3b51db0fc440b303476b1bb43fc2;hp=37ace5661dafa7915b150b2491d84a77a95b1467;hpb=dce7552c5e2f64fcf5f58b0c934bb4a01f6cbcf7;p=libs%2Fgui.git diff --git a/source/input/mouse.cpp b/source/input/mouse.cpp index 37ace56..476275f 100644 --- a/source/input/mouse.cpp +++ b/source/input/mouse.cpp @@ -1,20 +1,20 @@ +#include +#include #include #include "mouse.h" namespace Msp { namespace Input { -Mouse::Mouse(Graphics::EventSource &s): - source(s) +Mouse::Mouse(Graphics::Window &w): + window(w) { name = "Mouse"; buttons.resize(3); axes.resize(2); - source.signal_button_press.connect(sigc::mem_fun(this, &Mouse::button_press)); - source.signal_button_release.connect(sigc::mem_fun(this, &Mouse::button_release)); - source.signal_pointer_motion.connect(sigc::mem_fun(this, &Mouse::pointer_motion)); + window.signal_input_event.connect(sigc::mem_fun(this, &Mouse::input_event)); } std::string Mouse::get_button_name(unsigned btn) const @@ -49,20 +49,48 @@ std::string Mouse::get_axis_name(unsigned axis) const }; } -void Mouse::button_press(int, int, unsigned btn, unsigned) +void Mouse::input_event(const Graphics::Window::Event &event) { - 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*2.0f/source.get_width()-1.0f, true); - set_axis_value(1, 1.0f-y*2.0f/source.get_height(), true); +#ifdef WIN32 + switch(event.msg) + { + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + set_button_state(1, event.msg==WM_LBUTTONDOWN, true); + break; + case WM_MBUTTONDOWN: + case WM_MBUTTONUP: + set_button_state(2, event.msg==WM_LBUTTONDOWN, true); + break; + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + set_button_state(3, event.msg==WM_LBUTTONDOWN, true); + break; + case WM_MOUSEWHEEL: + { + unsigned btn = (HIWORD(wp)&0x8000) ? 5 : 4; + set_button_state(btn, true, true); + set_button_state(btn, false, true); + } + break; + case WM_MOUSEMOVE: + set_axis_value(0, GET_X_LPARAM(event.lparam)*2.0/window.get_width()-1.0, true); + set_axis_value(1, 1.0-GET_Y_LPARAM(event.lparam)*2.0/window.get_height(), true); + break; + } +#else + switch(event.xevent.type) + { + case ButtonPress: + case ButtonRelease: + set_button_state(event.xevent.xbutton.button, event.xevent.type==ButtonPress, true); + break; + case MotionNotify: + set_axis_value(0, event.xevent.xmotion.x*2.0/window.get_width()-1.0, true); + set_axis_value(1, 1.0-event.xevent.xmotion.y*2.0/window.get_height(), true); + break; + } +#endif } } // namespace Input