2 #include <msp/graphics/window_private.h>
8 void Mouse::input_event(const Graphics::Window::Event &event)
10 int type = AInputEvent_getType(event.aevent);
11 if(type!=AINPUT_EVENT_TYPE_MOTION)
14 int source = AInputEvent_getSource(event.aevent);
15 if(window.get_touch_input() && source!=AINPUT_SOURCE_MOUSE && source!=AINPUT_SOURCE_TOUCHPAD)
18 /* Emulate a mouse with the touch events of a single finger. If more
19 fingers appear while the first one is held down, they are ignored, even if
20 the first finger is released. */
22 int action = AMotionEvent_getAction(event.aevent);
23 int action_pointer = (action&AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)>>AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
24 action &= AMOTION_EVENT_ACTION_MASK;
26 int pointer_count = AMotionEvent_getPointerCount(event.aevent);
27 int pointer_zero = -1;
28 for(int i=0; (i<pointer_count && pointer_zero<0); ++i)
29 if(AMotionEvent_getPointerId(event.aevent, i)==0)
34 float x = AMotionEvent_getX(event.aevent, pointer_zero);
35 float y = AMotionEvent_getY(event.aevent, pointer_zero);
36 set_axis_value(MOUSE_X_AXIS, x*2/window.get_width()-1, true);
37 set_axis_value(MOUSE_Y_AXIS, 1-y*2/window.get_height(), true);
42 case AMOTION_EVENT_ACTION_DOWN:
43 case AMOTION_EVENT_ACTION_UP:
44 case AMOTION_EVENT_ACTION_POINTER_DOWN:
45 case AMOTION_EVENT_ACTION_POINTER_UP:
47 set_button_state(MOUSE_LEFT, action==AMOTION_EVENT_ACTION_DOWN, true);