Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea6efcb1 authored by Nathaniel R. Lewis's avatar Nathaniel R. Lewis Committed by Automerger Merge Worker
Browse files

Add relative coordinates for touchpad events. am: 50908afd am: 910dc160

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1447896

Change-Id: Ic0c2ed53012355b38bcf8c295c579194403ab5e3
parents 83e7c0a6 910dc160
Loading
Loading
Loading
Loading
+20 −5
Original line number Original line Diff line number Diff line
@@ -142,12 +142,14 @@ void CookedPointerData::clear() {
    hoveringIdBits.clear();
    hoveringIdBits.clear();
    touchingIdBits.clear();
    touchingIdBits.clear();
    canceledIdBits.clear();
    canceledIdBits.clear();
    validIdBits.clear();
}
}


void CookedPointerData::copyFrom(const CookedPointerData& other) {
void CookedPointerData::copyFrom(const CookedPointerData& other) {
    pointerCount = other.pointerCount;
    pointerCount = other.pointerCount;
    hoveringIdBits = other.hoveringIdBits;
    hoveringIdBits = other.hoveringIdBits;
    touchingIdBits = other.touchingIdBits;
    touchingIdBits = other.touchingIdBits;
    validIdBits = other.validIdBits;


    for (uint32_t i = 0; i < pointerCount; i++) {
    for (uint32_t i = 0; i < pointerCount; i++) {
        pointerProperties[i].copyFrom(other.pointerProperties[i]);
        pointerProperties[i].copyFrom(other.pointerProperties[i]);
@@ -288,12 +290,14 @@ void TouchInputMapper::dump(std::string& dump) {
        const PointerProperties& pointerProperties =
        const PointerProperties& pointerProperties =
                mLastCookedState.cookedPointerData.pointerProperties[i];
                mLastCookedState.cookedPointerData.pointerProperties[i];
        const PointerCoords& pointerCoords = mLastCookedState.cookedPointerData.pointerCoords[i];
        const PointerCoords& pointerCoords = mLastCookedState.cookedPointerData.pointerCoords[i];
        dump += StringPrintf(INDENT4 "[%d]: id=%d, x=%0.3f, y=%0.3f, pressure=%0.3f, "
        dump += StringPrintf(INDENT4 "[%d]: id=%d, x=%0.3f, y=%0.3f, dx=%0.3f, dy=%0.3f, "
                                     "touchMajor=%0.3f, touchMinor=%0.3f, toolMajor=%0.3f, "
                                     "pressure=%0.3f, touchMajor=%0.3f, touchMinor=%0.3f, "
                                     "toolMinor=%0.3f, "
                                     "toolMajor=%0.3f, toolMinor=%0.3f, "
                                     "orientation=%0.3f, tilt=%0.3f, distance=%0.3f, "
                                     "orientation=%0.3f, tilt=%0.3f, distance=%0.3f, "
                                     "toolType=%d, isHovering=%s\n",
                                     "toolType=%d, isHovering=%s\n",
                             i, pointerProperties.id, pointerCoords.getX(), pointerCoords.getY(),
                             i, pointerProperties.id, pointerCoords.getX(), pointerCoords.getY(),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
                             pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
@@ -2270,15 +2274,26 @@ void TouchInputMapper::cookPointerData() {
            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
        }
        }


        // Write output relative fieldis if applicable.
        uint32_t id = in.id;
        if (mSource == AINPUT_SOURCE_TOUCHPAD &&
            mLastCookedState.cookedPointerData.hasPointerCoordsForId(id)) {
            const PointerCoords& p = mLastCookedState.cookedPointerData.pointerCoordsForId(id);
            float dx = xTransformed - p.getAxisValue(AMOTION_EVENT_AXIS_X);
            float dy = yTransformed - p.getAxisValue(AMOTION_EVENT_AXIS_Y);
            out.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X, dx);
            out.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y, dy);
        }

        // Write output properties.
        // Write output properties.
        PointerProperties& properties = mCurrentCookedState.cookedPointerData.pointerProperties[i];
        PointerProperties& properties = mCurrentCookedState.cookedPointerData.pointerProperties[i];
        uint32_t id = in.id;
        properties.clear();
        properties.clear();
        properties.id = id;
        properties.id = id;
        properties.toolType = in.toolType;
        properties.toolType = in.toolType;


        // Write id index.
        // Write id index and mark id as valid.
        mCurrentCookedState.cookedPointerData.idToIndex[id] = i;
        mCurrentCookedState.cookedPointerData.idToIndex[id] = i;
        mCurrentCookedState.cookedPointerData.validIdBits.markBit(id);
    }
    }
}
}


+3 −1
Original line number Original line Diff line number Diff line
@@ -103,7 +103,7 @@ struct CookedPointerData {
    uint32_t pointerCount;
    uint32_t pointerCount;
    PointerProperties pointerProperties[MAX_POINTERS];
    PointerProperties pointerProperties[MAX_POINTERS];
    PointerCoords pointerCoords[MAX_POINTERS];
    PointerCoords pointerCoords[MAX_POINTERS];
    BitSet32 hoveringIdBits, touchingIdBits, canceledIdBits;
    BitSet32 hoveringIdBits, touchingIdBits, canceledIdBits, validIdBits;
    uint32_t idToIndex[MAX_POINTER_ID + 1];
    uint32_t idToIndex[MAX_POINTER_ID + 1];


    CookedPointerData();
    CookedPointerData();
@@ -129,6 +129,8 @@ struct CookedPointerData {
    inline bool isTouching(uint32_t pointerIndex) const {
    inline bool isTouching(uint32_t pointerIndex) const {
        return touchingIdBits.hasBit(pointerProperties[pointerIndex].id);
        return touchingIdBits.hasBit(pointerProperties[pointerIndex].id);
    }
    }

    inline bool hasPointerCoordsForId(uint32_t id) const { return validIdBits.hasBit(id); }
};
};


class TouchInputMapper : public InputMapper {
class TouchInputMapper : public InputMapper {