bool NativeEngine::HandleInput(AInputEvent *event) { if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION) { int32_t action = AMotionEvent_getAction(event); size_t pointerIndex; size_t pointerId; size_t pointerCount; int x; int y; switch (action & AMOTION_EVENT_ACTION_MASK) { case AMOTION_EVENT_ACTION_DOWN: pointerId = AMotionEvent_getPointerId(event, 0); x = AMotionEvent_getX(event, 0); y = AMotionEvent_getY(event, 0); touchBegan(pointerId, Origami::maths::vec2(x, y)); break; case AMOTION_EVENT_ACTION_UP: pointerId = AMotionEvent_getPointerId(event, 0); x = AMotionEvent_getX(event, 0); y = AMotionEvent_getY(event, 0); touchended(pointerId, Origami::maths::vec2(x, y)); break; case AMOTION_EVENT_ACTION_POINTER_DOWN: pointerIndex = (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT; pointerId = AMotionEvent_getPointerId(event, pointerIndex); x = AMotionEvent_getX(event, pointerIndex); y = AMotionEvent_getY(event, pointerIndex); touchBegan(pointerId, Origami::maths::vec2(x, y)); break; case AMOTION_EVENT_ACTION_POINTER_UP: pointerIndex = (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK) >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT; pointerId = AMotionEvent_getPointerId(event, pointerIndex); x = AMotionEvent_getX(event, pointerIndex); y = AMotionEvent_getY(event, pointerIndex); touchended(pointerId, Origami::maths::vec2(x, y)); break; case AMOTION_EVENT_ACTION_MOVE: pointerCount = AMotionEvent_getPointerCount(event); for (size_t i = 0; i < pointerCount; ++i) { pointerId = AMotionEvent_getPointerId(event, i); x = AMotionEvent_getX(event, i); y = AMotionEvent_getY(event, i); touchMoved(pointerId, Origami::maths::vec2(x, y)); } break; } }
bool EditorNode::onTouchBegan(Touch *touch, Event *unusedEvent) { if (!isTouchInside(touch) || !this->isVisible() || !this->hasVisibleParents()) { return false; } m_beganTouchLoc = touch->getLocation(); m_lastTouchLoc = m_beganTouchLoc; if (touchBegan) { touchBegan(); } b_isTouchMoved = false; return true; }
bool MgCmdDrawLines::click(const MgMotion* sender) { return (m_step == 0 ? _click(sender) : touchBegan(sender) && touchEnded(sender)); }
bool MgCmdDrawDot::click(const MgMotion* sender) { return touchBegan(sender) && touchEnded(sender); }
bool MgCmdParallelogram::click(const MgMotion* sender) { return touchBegan(sender) && touchEnded(sender); }