Merge branch 'mouse-callback'

This commit is contained in:
David Capello 2015-06-23 12:39:45 -03:00
commit 150afe4305

View File

@ -42,6 +42,8 @@ int she_mouse_y;
int she_mouse_z;
int she_mouse_b;
bool she_mouse_polling_required;
// Flag to block all the generation of mouse messages from polling.
bool mouse_left = false;
@ -163,6 +165,47 @@ void osx_mouser_leave_she_callback()
#endif // __APPLE__
void she_mouse_callback(int flags)
{
update_mouse_position();
Event ev;
ev.setPosition(gfx::Point(she_mouse_x, she_mouse_y));
// move
if (flags & MOUSE_FLAG_MOVE) {
ev.setType(Event::MouseMove);
queue_event(ev);
}
// buttons
if (flags & MOUSE_FLAG_LEFT_DOWN) {
generate_mouse_event_for_button(Event::LeftButton, 0, 1);
}
if (flags & MOUSE_FLAG_LEFT_UP) {
generate_mouse_event_for_button(Event::LeftButton, 1, 0);
}
if (flags & MOUSE_FLAG_RIGHT_DOWN) {
generate_mouse_event_for_button(Event::RightButton, 0, 2);
}
if (flags & MOUSE_FLAG_RIGHT_UP) {
generate_mouse_event_for_button(Event::RightButton, 2, 0);
}
if (flags & MOUSE_FLAG_MIDDLE_DOWN) {
generate_mouse_event_for_button(Event::MiddleButton, 0, 4);
}
if (flags & MOUSE_FLAG_MIDDLE_UP) {
generate_mouse_event_for_button(Event::MiddleButton, 4, 0);
}
// mouse wheel
if (flags & MOUSE_FLAG_MOVE_Z) {
ev.setType(Event::MouseWheel);
ev.setWheelDelta(gfx::Point(0, int(she_mouse_z - mouse_z)));
queue_event(ev);
she_mouse_z = mouse_z;
}
}
}
namespace she {
@ -177,10 +220,17 @@ void mouse_poller_init()
osx_mouse_enter_callback = osx_mouser_enter_she_callback;
osx_mouse_leave_callback = osx_mouser_leave_she_callback;
#endif
// optional mouse callback for supported platforms
she_mouse_polling_required = (mouse_needs_poll() != 0);
if (!she_mouse_polling_required)
mouse_callback = she_mouse_callback;
}
void mouse_poller_generate_events()
{
if (!she_mouse_polling_required)
return;
if (mouse_left)
return;