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

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

Merge "MotionEvent: Add relative X and Y fields to PointerCoords" into sc-v2-dev

parents 89da3fbc 45f12c3c
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -3998,6 +3998,22 @@ public final class MotionEvent extends InputEvent implements Parcelable {
         */
        public float orientation;

        /**
         * The movement of x position of a motion event.
         *
         * @see MotionEvent#AXIS_RELATIVE_X
         * @hide
         */
        public float relativeX;

        /**
         * The movement of y position of a motion event.
         *
         * @see MotionEvent#AXIS_RELATIVE_Y
         * @hide
         */
        public float relativeY;

        /**
         * Clears the contents of this object.
         * Resets all axes to zero.
@@ -4014,6 +4030,8 @@ public final class MotionEvent extends InputEvent implements Parcelable {
            toolMajor = 0;
            toolMinor = 0;
            orientation = 0;
            relativeX = 0;
            relativeY = 0;
        }

        /**
@@ -4044,6 +4062,8 @@ public final class MotionEvent extends InputEvent implements Parcelable {
            toolMajor = other.toolMajor;
            toolMinor = other.toolMinor;
            orientation = other.orientation;
            relativeX = other.relativeX;
            relativeY = other.relativeY;
        }

        /**
@@ -4075,6 +4095,10 @@ public final class MotionEvent extends InputEvent implements Parcelable {
                    return toolMinor;
                case AXIS_ORIENTATION:
                    return orientation;
                case AXIS_RELATIVE_X:
                    return relativeX;
                case AXIS_RELATIVE_Y:
                    return relativeY;
                default: {
                    if (axis < 0 || axis > 63) {
                        throw new IllegalArgumentException("Axis out of range.");
@@ -4128,6 +4152,12 @@ public final class MotionEvent extends InputEvent implements Parcelable {
                case AXIS_ORIENTATION:
                    orientation = value;
                    break;
                case AXIS_RELATIVE_X:
                    relativeX = value;
                    break;
                case AXIS_RELATIVE_Y:
                    relativeY = value;
                    break;
                default: {
                    if (axis < 0 || axis > 63) {
                        throw new IllegalArgumentException("Axis out of range.");
+20 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ static struct {
    jfieldID toolMajor;
    jfieldID toolMinor;
    jfieldID orientation;
    jfieldID relativeX;
    jfieldID relativeY;
} gPointerCoordsClassInfo;

static struct {
@@ -212,6 +214,12 @@ static void pointerCoordsToNative(JNIEnv* env, jobject pointerCoordsObj,
            env->GetFloatField(pointerCoordsObj, gPointerCoordsClassInfo.toolMinor));
    outRawPointerCoords->setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION,
            env->GetFloatField(pointerCoordsObj, gPointerCoordsClassInfo.orientation));
    outRawPointerCoords->setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X,
                                      env->GetFloatField(pointerCoordsObj,
                                                         gPointerCoordsClassInfo.relativeX));
    outRawPointerCoords->setAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y,
                                      env->GetFloatField(pointerCoordsObj,
                                                         gPointerCoordsClassInfo.relativeY));

    BitSet64 bits =
            BitSet64(env->GetLongField(pointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits));
@@ -261,6 +269,12 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer
    float rawY = rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_Y);
    vec2 transformed = transform.transform(rawX, rawY);

    float rawRelX = rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_RELATIVE_X);
    float rawRelY = rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_RELATIVE_Y);
    // Apply only rotation and scale, not translation.
    const vec2 transformedOrigin = transform.transform(0, 0);
    const vec2 transformedRel = transform.transform(rawRelX, rawRelY) - transformedOrigin;

    env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.x, transformed.x);
    env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.y, transformed.y);
    env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.pressure,
@@ -277,6 +291,8 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer
            rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR));
    env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.orientation,
            rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
    env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.relativeX, transformedRel.x);
    env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.relativeY, transformedRel.y);

    uint64_t outBits = 0;
    BitSet64 bits = BitSet64(rawPointerCoords->bits);
@@ -289,6 +305,8 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer
    bits.clearBit(AMOTION_EVENT_AXIS_TOOL_MAJOR);
    bits.clearBit(AMOTION_EVENT_AXIS_TOOL_MINOR);
    bits.clearBit(AMOTION_EVENT_AXIS_ORIENTATION);
    bits.clearBit(AMOTION_EVENT_AXIS_RELATIVE_X);
    bits.clearBit(AMOTION_EVENT_AXIS_RELATIVE_Y);
    if (!bits.isEmpty()) {
        uint32_t packedAxesCount = bits.count();
        jfloatArray outValuesArray = obtainPackedAxisValuesArray(env, packedAxesCount,
@@ -872,6 +890,8 @@ int register_android_view_MotionEvent(JNIEnv* env) {
    gPointerCoordsClassInfo.toolMajor = GetFieldIDOrDie(env, clazz, "toolMajor", "F");
    gPointerCoordsClassInfo.toolMinor = GetFieldIDOrDie(env, clazz, "toolMinor", "F");
    gPointerCoordsClassInfo.orientation = GetFieldIDOrDie(env, clazz, "orientation", "F");
    gPointerCoordsClassInfo.relativeX = GetFieldIDOrDie(env, clazz, "relativeX", "F");
    gPointerCoordsClassInfo.relativeY = GetFieldIDOrDie(env, clazz, "relativeY", "F");

    clazz = FindClassOrDie(env, "android/view/MotionEvent$PointerProperties");