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

Commit c476214a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix input injection with zero coords"

parents d234ff36 890532e4
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -814,6 +814,8 @@ public:
    static vec2 calculateTransformedXY(uint32_t source, const ui::Transform&, const vec2& xy);
    static vec2 calculateTransformedXY(uint32_t source, const ui::Transform&, const vec2& xy);
    static float calculateTransformedAxisValue(int32_t axis, uint32_t source, const ui::Transform&,
    static float calculateTransformedAxisValue(int32_t axis, uint32_t source, const ui::Transform&,
                                               const PointerCoords&);
                                               const PointerCoords&);
    static PointerCoords calculateTransformedCoords(uint32_t source, const ui::Transform&,
                                                    const PointerCoords&);


protected:
protected:
    int32_t mAction;
    int32_t mAction;
+29 −0
Original line number Original line Diff line number Diff line
@@ -846,6 +846,7 @@ vec2 MotionEvent::calculateTransformedXY(uint32_t source, const ui::Transform& t
    return calculateTransformedXYUnchecked(source, transform, xy);
    return calculateTransformedXYUnchecked(source, transform, xy);
}
}


// Keep in sync with calculateTransformedCoords.
float MotionEvent::calculateTransformedAxisValue(int32_t axis, uint32_t source,
float MotionEvent::calculateTransformedAxisValue(int32_t axis, uint32_t source,
                                                 const ui::Transform& transform,
                                                 const ui::Transform& transform,
                                                 const PointerCoords& coords) {
                                                 const PointerCoords& coords) {
@@ -874,6 +875,34 @@ float MotionEvent::calculateTransformedAxisValue(int32_t axis, uint32_t source,
    return coords.getAxisValue(axis);
    return coords.getAxisValue(axis);
}
}


// Keep in sync with calculateTransformedAxisValue. This is an optimization of
// calculateTransformedAxisValue for all PointerCoords axes.
PointerCoords MotionEvent::calculateTransformedCoords(uint32_t source,
                                                      const ui::Transform& transform,
                                                      const PointerCoords& coords) {
    if (shouldDisregardTransformation(source)) {
        return coords;
    }
    PointerCoords out = coords;

    const vec2 xy = calculateTransformedXYUnchecked(source, transform, coords.getXYValue());
    out.setAxisValue(AMOTION_EVENT_AXIS_X, xy.x);
    out.setAxisValue(AMOTION_EVENT_AXIS_Y, xy.y);

    const vec2 relativeXy =
            transformWithoutTranslation(transform,
                                        {coords.getAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X),
                                         coords.getAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y)});
    out.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X, relativeXy.x);
    out.setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y, relativeXy.y);

    out.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION,
                     transformAngle(transform,
                                    coords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION)));

    return out;
}

// --- FocusEvent ---
// --- FocusEvent ---


void FocusEvent::initialize(int32_t id, bool hasFocus) {
void FocusEvent::initialize(int32_t id, bool hasFocus) {
+3 −13
Original line number Original line Diff line number Diff line
@@ -4428,19 +4428,9 @@ void InputDispatcher::transformMotionEntryForInjectionLocked(
    const auto& transformToDisplay = it->second.transform.inverse() * injectedTransform;
    const auto& transformToDisplay = it->second.transform.inverse() * injectedTransform;


    for (uint32_t i = 0; i < entry.pointerCount; i++) {
    for (uint32_t i = 0; i < entry.pointerCount; i++) {
        PointerCoords& pc = entry.pointerCoords[i];
        entry.pointerCoords[i] =
        // Make a copy of the injected coords. We cannot change them in place because some of them
                MotionEvent::calculateTransformedCoords(entry.source, transformToDisplay,
        // are interdependent (for example, X coordinate might depend on the Y coordinate).
                                                        entry.pointerCoords[i]);
        PointerCoords injectedCoords = entry.pointerCoords[i];

        BitSet64 bits(injectedCoords.bits);
        while (!bits.isEmpty()) {
            const auto axis = static_cast<int32_t>(bits.clearFirstMarkedBit());
            const float value =
                    MotionEvent::calculateTransformedAxisValue(axis, entry.source,
                                                               transformToDisplay, injectedCoords);
            pc.setAxisValue(axis, value);
        }
    }
    }
}
}