diff options
Diffstat (limited to 'libs/input')
| -rw-r--r-- | libs/input/PointerController.cpp | 29 | ||||
| -rw-r--r-- | libs/input/PointerController.h | 6 |
2 files changed, 35 insertions, 0 deletions
diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp index 529849e99fb6..212c6a0d2c3c 100644 --- a/libs/input/PointerController.cpp +++ b/libs/input/PointerController.cpp @@ -90,6 +90,7 @@ PointerController::PointerController(const sp<PointerControllerPolicyInterface>& mLocked.lastFrameUpdatedTime = 0; mLocked.buttonState = 0; + mLocked.iconDetached = false; mPolicy->loadPointerIcon(&mLocked.pointerIcon); @@ -184,6 +185,10 @@ void PointerController::setPosition(float x, float y) { } void PointerController::setPositionLocked(float x, float y) { + if (mLocked.iconDetached) { + return; + } + float minX, minY, maxX, maxY; if (getBoundsLocked(&minX, &minY, &maxX, &maxY)) { if (x <= minX) { @@ -217,6 +222,10 @@ void PointerController::fade(Transition transition) { // Remove the inactivity timeout, since we are fading now. removeInactivityTimeoutLocked(); + if (mLocked.iconDetached) { + return; + } + // Start fading. if (transition == TRANSITION_IMMEDIATE) { mLocked.pointerFadeDirection = 0; @@ -234,6 +243,10 @@ void PointerController::unfade(Transition transition) { // Always reset the inactivity timer. resetInactivityTimeoutLocked(); + if (mLocked.iconDetached) { + return; + } + // Start unfading. if (transition == TRANSITION_IMMEDIATE) { mLocked.pointerFadeDirection = 0; @@ -349,6 +362,22 @@ void PointerController::reloadPointerResources() { updatePointerLocked(); } +void PointerController::detachPointerIcon(bool detached) { + AutoMutex _l(mLock); + + if (mLocked.iconDetached == detached) { + return; + } + + mLocked.iconDetached = detached; + if (detached) { + mLocked.pointerFadeDirection = -1; + } else { + mLocked.pointerFadeDirection = 1; + } + startAnimationLocked(); +} + void PointerController::setDisplayViewport(int32_t width, int32_t height, int32_t orientation) { AutoMutex _l(mLock); diff --git a/libs/input/PointerController.h b/libs/input/PointerController.h index 9ba37b338276..c1381f32a37f 100644 --- a/libs/input/PointerController.h +++ b/libs/input/PointerController.h @@ -111,6 +111,10 @@ public: void setInactivityTimeout(InactivityTimeout inactivityTimeout); void reloadPointerResources(); + /* Detach or attach the pointer icon status. When detached, the pointer icon disappears + * and the icon location does not change at all. */ + void detachPointerIcon(bool detached); + private: static const size_t MAX_RECYCLED_SPRITES = 12; static const size_t MAX_SPOTS = 12; @@ -180,6 +184,8 @@ private: int32_t buttonState; + bool iconDetached; + Vector<Spot*> spots; Vector<sp<Sprite> > recycledSprites; } mLocked; |