| 457 | } |
| 458 | |
| 459 | int32_t vtkAndroidRenderWindowInteractor::HandleInput(AInputEvent* event) |
| 460 | { |
| 461 | if (!this->Enabled) |
| 462 | { |
| 463 | return 0; |
| 464 | } |
| 465 | |
| 466 | switch (AInputEvent_getType(event)) |
| 467 | { |
| 468 | case AINPUT_EVENT_TYPE_MOTION: |
| 469 | { |
| 470 | int action = AMotionEvent_getAction(event); |
| 471 | int metaState = AMotionEvent_getMetaState(event); |
| 472 | int numPtrs = AMotionEvent_getPointerCount(event); |
| 473 | int eventPointer = action >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT; |
| 474 | action = action & AMOTION_EVENT_ACTION_MASK; |
| 475 | |
| 476 | int* xPtr = (int*)malloc(numPtrs * sizeof(int)); |
| 477 | int* yPtr = (int*)malloc(numPtrs * sizeof(int)); |
| 478 | int* idPtr = (int*)malloc(numPtrs * sizeof(int)); |
| 479 | for (int i = 0; i < numPtrs; ++i) |
| 480 | { |
| 481 | idPtr[i] = AMotionEvent_getPointerId(event, i); |
| 482 | xPtr[i] = AMotionEvent_getX(event, i); |
| 483 | yPtr[i] = AMotionEvent_getY(event, i); |
| 484 | } |
| 485 | int actionId = AMotionEvent_getPointerId(event, eventPointer); |
| 486 | this->HandleMotionEvent(action, actionId, numPtrs, xPtr, yPtr, idPtr, metaState); |
| 487 | free(xPtr); |
| 488 | free(yPtr); |
| 489 | free(idPtr); |
| 490 | return 1; |
| 491 | } |
| 492 | break; |
| 493 | case AINPUT_EVENT_TYPE_KEY: |
| 494 | { |
| 495 | int action = AKeyEvent_getAction(event); |
| 496 | int nChar = AKeyEvent_getKeyCode(event); |
| 497 | int metaState = AKeyEvent_getMetaState(event); |
| 498 | int nRepCnt = AKeyEvent_getRepeatCount(event); |
| 499 | this->HandleKeyEvent(action == AKEY_EVENT_ACTION_DOWN, nChar, metaState, nRepCnt); |
| 500 | return 1; |
| 501 | } |
| 502 | break; |
| 503 | } // end switch event type motion versus key |
| 504 | |
| 505 | return 0; |
| 506 | } |
| 507 | |
| 508 | //------------------------------------------------------------------------------ |
| 509 | void vtkAndroidRenderWindowInteractor::Initialize() |
no test coverage detected