diff options
-rw-r--r-- | services/inputflinger/InputReader.cpp | 18 | ||||
-rw-r--r-- | services/inputflinger/InputReader.h | 4 |
2 files changed, 14 insertions, 8 deletions
diff --git a/services/inputflinger/InputReader.cpp b/services/inputflinger/InputReader.cpp index c6389a9..2888785 100644 --- a/services/inputflinger/InputReader.cpp +++ b/services/inputflinger/InputReader.cpp @@ -4076,14 +4076,20 @@ void TouchInputMapper::applyExternalStylusButtonState(nsecs_t when) { } void TouchInputMapper::applyExternalStylusTouchState(nsecs_t when) { - CookedPointerData& cpd = mCurrentCookedState.cookedPointerData; - if (mExternalStylusId != -1 && cpd.isTouching(mExternalStylusId)) { - if (mExternalStylusState.pressure != 0.0f) { - PointerCoords& coords = cpd.editPointerCoordsWithId(mExternalStylusId); - coords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, mExternalStylusState.pressure); + CookedPointerData& currentPointerData = mCurrentCookedState.cookedPointerData; + const CookedPointerData& lastPointerData = mLastCookedState.cookedPointerData; + + if (mExternalStylusId != -1 && currentPointerData.isTouching(mExternalStylusId)) { + float pressure = mExternalStylusState.pressure; + if (pressure == 0.0f && lastPointerData.isTouching(mExternalStylusId)) { + const PointerCoords& coords = lastPointerData.pointerCoordsForId(mExternalStylusId); + pressure = coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE); } + PointerCoords& coords = currentPointerData.editPointerCoordsWithId(mExternalStylusId); + coords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, pressure); - PointerProperties& properties = cpd.editPointerPropertiesWithId(mExternalStylusId); + PointerProperties& properties = + currentPointerData.editPointerPropertiesWithId(mExternalStylusId); if (mExternalStylusState.toolType != AMOTION_EVENT_TOOL_TYPE_UNKNOWN) { properties.toolType = mExternalStylusState.toolType; } diff --git a/services/inputflinger/InputReader.h b/services/inputflinger/InputReader.h index aadc37f..ae090c1 100644 --- a/services/inputflinger/InputReader.h +++ b/services/inputflinger/InputReader.h @@ -881,11 +881,11 @@ struct CookedPointerData { return pointerProperties[idToIndex[id]]; } - inline bool isHovering(uint32_t pointerIndex) { + inline bool isHovering(uint32_t pointerIndex) const { return hoveringIdBits.hasBit(pointerProperties[pointerIndex].id); } - inline bool isTouching(uint32_t pointerIndex) { + inline bool isTouching(uint32_t pointerIndex) const { return touchingIdBits.hasBit(pointerProperties[pointerIndex].id); } }; |