diff options
author | Jeff Brown <jeffbrown@google.com> | 2010-06-16 01:53:36 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2010-06-17 13:27:16 -0700 |
commit | f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37 (patch) | |
tree | 9d52c784ebd68acfc44a2cdb06d7cf057bba2c91 /include | |
parent | e85dafb4d625cce230695127c39636a40932b313 (diff) | |
download | frameworks_native-f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37.zip frameworks_native-f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37.tar.gz frameworks_native-f4a4ec2063dfd28e04bbfe712f67acee4bdc8e37.tar.bz2 |
Even more native input dispatch work in progress.
Added more tests.
Fixed a regression in Vector.
Fixed bugs in pointer tracking.
Fixed a starvation issue in PollLoop when setting or removing callbacks.
Fixed a couple of policy nits.
Modified the internal representation of MotionEvent to be more
efficient and more consistent.
Added code to skip/cancel virtual key processing when there are multiple
pointers down. This helps to better disambiguate virtual key presses
from stray touches (such as cheek presses).
Change-Id: I2a7d2cce0195afb9125b23378baa94fd2fc6671c
Diffstat (limited to 'include')
-rw-r--r-- | include/ui/Input.h | 49 | ||||
-rw-r--r-- | include/ui/InputTransport.h | 8 | ||||
-rw-r--r-- | include/utils/PollLoop.h | 4 | ||||
-rw-r--r-- | include/utils/Vector.h | 14 | ||||
-rw-r--r-- | include/utils/VectorImpl.h | 10 |
5 files changed, 60 insertions, 25 deletions
diff --git a/include/ui/Input.h b/include/ui/Input.h index d45bfcf..92ff872 100644 --- a/include/ui/Input.h +++ b/include/ui/Input.h @@ -148,6 +148,9 @@ private: int32_t mNature; }; +/* + * Key events. + */ class KeyEvent : public InputEvent { public: virtual ~KeyEvent() { } @@ -193,6 +196,9 @@ private: nsecs_t mEventTime; }; +/* + * Motion events. + */ class MotionEvent : public InputEvent { public: virtual ~MotionEvent() { } @@ -205,6 +211,10 @@ public: inline int32_t getMetaState() const { return mMetaState; } + inline float getXOffset() const { return mXOffset; } + + inline float getYOffset() const { return mYOffset; } + inline float getXPrecision() const { return mXPrecision; } inline float getYPrecision() const { return mYPrecision; } @@ -217,16 +227,20 @@ public: inline nsecs_t getEventTime() const { return mSampleEventTimes[getHistorySize()]; } - inline float getRawX() const { return mRawX; } + inline float getRawX(size_t pointerIndex) const { + return getCurrentPointerCoords(pointerIndex).x; + } - inline float getRawY() const { return mRawY; } + inline float getRawY(size_t pointerIndex) const { + return getCurrentPointerCoords(pointerIndex).y; + } inline float getX(size_t pointerIndex) const { - return getCurrentPointerCoords(pointerIndex).x; + return getRawX(pointerIndex) + mXOffset; } inline float getY(size_t pointerIndex) const { - return getCurrentPointerCoords(pointerIndex).y; + return getRawY(pointerIndex) + mYOffset; } inline float getPressure(size_t pointerIndex) const { @@ -243,14 +257,22 @@ public: return mSampleEventTimes[historicalIndex]; } - inline float getHistoricalX(size_t pointerIndex, size_t historicalIndex) const { + inline float getHistoricalRawX(size_t pointerIndex, size_t historicalIndex) const { return getHistoricalPointerCoords(pointerIndex, historicalIndex).x; } - inline float getHistoricalY(size_t pointerIndex, size_t historicalIndex) const { + inline float getHistoricalRawY(size_t pointerIndex, size_t historicalIndex) const { return getHistoricalPointerCoords(pointerIndex, historicalIndex).y; } + inline float getHistoricalX(size_t pointerIndex, size_t historicalIndex) const { + return getHistoricalRawX(pointerIndex, historicalIndex) + mXOffset; + } + + inline float getHistoricalY(size_t pointerIndex, size_t historicalIndex) const { + return getHistoricalRawY(pointerIndex, historicalIndex) + mYOffset; + } + inline float getHistoricalPressure(size_t pointerIndex, size_t historicalIndex) const { return getHistoricalPointerCoords(pointerIndex, historicalIndex).pressure; } @@ -265,8 +287,8 @@ public: int32_t action, int32_t edgeFlags, int32_t metaState, - float rawX, - float rawY, + float xOffset, + float yOffset, float xPrecision, float yPrecision, nsecs_t downTime, @@ -281,12 +303,19 @@ public: void offsetLocation(float xOffset, float yOffset); + // Low-level accessors. + inline const int32_t* getPointerIds() const { return mPointerIds.array(); } + inline const nsecs_t* getSampleEventTimes() const { return mSampleEventTimes.array(); } + inline const PointerCoords* getSamplePointerCoords() const { + return mSamplePointerCoords.array(); + } + private: int32_t mAction; int32_t mEdgeFlags; int32_t mMetaState; - float mRawX; - float mRawY; + float mXOffset; + float mYOffset; float mXPrecision; float mYPrecision; nsecs_t mDownTime; diff --git a/include/ui/InputTransport.h b/include/ui/InputTransport.h index 9537523..7b182f3 100644 --- a/include/ui/InputTransport.h +++ b/include/ui/InputTransport.h @@ -62,7 +62,7 @@ public: * Returns OK on success. */ static status_t openInputChannelPair(const String8& name, - InputChannel** outServerChannel, InputChannel** outClientChannel); + sp<InputChannel>& outServerChannel, sp<InputChannel>& outClientChannel); inline String8 getName() const { return mName; } inline int32_t getAshmemFd() const { return mAshmemFd; } @@ -72,7 +72,8 @@ public: /* Sends a signal to the other endpoint. * * Returns OK on success. - * Errors probably indicate that the channel is broken. + * Returns DEAD_OBJECT if the channel's peer has been closed. + * Other errors probably indicate that the channel is broken. */ status_t sendSignal(char signal); @@ -81,6 +82,7 @@ public: * * Returns OK on success. * Returns WOULD_BLOCK if there is no signal present. + * Returns DEAD_OBJECT if the channel's peer has been closed. * Other errors probably indicate that the channel is broken. */ status_t receiveSignal(char* outSignal); @@ -298,7 +300,7 @@ public: * Returns INVALID_OPERATION if there is no currently published event. * Returns NO_MEMORY if the event could not be created. */ - status_t consume(InputEventFactoryInterface* factory, InputEvent** event); + status_t consume(InputEventFactoryInterface* factory, InputEvent** outEvent); /* Sends a finished signal to the publisher to inform it that the current message is * finished processing. diff --git a/include/utils/PollLoop.h b/include/utils/PollLoop.h index c9d951f..a95fb17 100644 --- a/include/utils/PollLoop.h +++ b/include/utils/PollLoop.h @@ -114,8 +114,10 @@ private: }; Mutex mLock; - Condition mAwake; bool mPolling; + uint32_t mWaiters; + Condition mAwake; + Condition mResume; int mWakeReadPipeFd; int mWakeWritePipeFd; diff --git a/include/utils/Vector.h b/include/utils/Vector.h index d40ae16..ec851bd 100644 --- a/include/utils/Vector.h +++ b/include/utils/Vector.h @@ -115,10 +115,10 @@ public: //! insert an array at a given index - ssize_t insertArrayAt(const TYPE* array, size_t index, size_t numItems); + ssize_t insertArrayAt(const TYPE* array, size_t index, size_t length); //! append an array at the end of this vector - ssize_t appendArray(const TYPE* array, size_t numItems); + ssize_t appendArray(const TYPE* array, size_t length); /*! * add/insert/replace items @@ -126,7 +126,7 @@ public: //! insert one or several items initialized with their default constructor inline ssize_t insertAt(size_t index, size_t numItems = 1); - //! insert on onr several items initialized from a prototype item + //! insert one or several items initialized from a prototype item ssize_t insertAt(const TYPE& prototype_item, size_t index, size_t numItems = 1); //! pop the top of the stack (removes the last element). No-op if the stack's empty inline void pop(); @@ -265,13 +265,13 @@ ssize_t Vector<TYPE>::appendVector(const Vector<TYPE>& vector) { } template<class TYPE> inline -ssize_t Vector<TYPE>::insertArrayAt(const TYPE* array, size_t index, size_t numItems) { - return VectorImpl::insertAt(array, index, numItems); +ssize_t Vector<TYPE>::insertArrayAt(const TYPE* array, size_t index, size_t length) { + return VectorImpl::insertArrayAt(array, index, length); } template<class TYPE> inline -ssize_t Vector<TYPE>::appendArray(const TYPE* array, size_t numItems) { - return VectorImpl::add(array, numItems); +ssize_t Vector<TYPE>::appendArray(const TYPE* array, size_t length) { + return VectorImpl::appendArray(array, length); } template<class TYPE> inline diff --git a/include/utils/VectorImpl.h b/include/utils/VectorImpl.h index 46a7bc2..c4ec2ff 100644 --- a/include/utils/VectorImpl.h +++ b/include/utils/VectorImpl.h @@ -65,9 +65,11 @@ public: size_t capacity() const; ssize_t setCapacity(size_t size); - /*! append/insert another vector */ + /*! append/insert another vector or array */ ssize_t insertVectorAt(const VectorImpl& vector, size_t index); ssize_t appendVector(const VectorImpl& vector); + ssize_t insertArrayAt(const void* array, size_t index, size_t length); + ssize_t appendArray(const void* array, size_t length); /*! add/insert/replace items */ ssize_t insertAt(size_t where, size_t numItems = 1); @@ -76,7 +78,7 @@ public: void push(); void push(const void* item); ssize_t add(); - ssize_t add(const void* item, size_t numItems = 1); + ssize_t add(const void* item); ssize_t replaceAt(size_t index); ssize_t replaceAt(const void* item, size_t index); @@ -184,8 +186,8 @@ private: void push(const void* item); ssize_t insertVectorAt(const VectorImpl& vector, size_t index); ssize_t appendVector(const VectorImpl& vector); - ssize_t insertArrayAt(const void* array, size_t index, size_t numItems); - ssize_t appendArray(const void* array, size_t numItems); + ssize_t insertArrayAt(const void* array, size_t index, size_t length); + ssize_t appendArray(const void* array, size_t length); ssize_t insertAt(size_t where, size_t numItems = 1); ssize_t insertAt(const void* item, size_t where, size_t numItems = 1); ssize_t replaceAt(size_t index); |