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

Commit 73f52993 authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Android (Google) Code Review
Browse files

Merge "Add transform matrix to InputWindowHandle." into sc-v2-dev

parents 8b96743b 8ca2be72
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.view;
import static android.view.Display.INVALID_DISPLAY;

import android.annotation.Nullable;
import android.graphics.Matrix;
import android.graphics.Region;
import android.gui.TouchOcclusionMode;
import android.os.IBinder;
@@ -122,6 +123,12 @@ public final class InputWindowHandle {
     */
    public boolean replaceTouchableRegionWithCrop;

    /**
     * The transform that should be applied to the Window to get it from screen coordinates to
     * window coordinates
     */
    public Matrix transform;

    private native void nativeDispose();

    public InputWindowHandle(InputApplicationHandle inputApplicationHandle, int displayId) {
@@ -136,6 +143,8 @@ public final class InputWindowHandle {
                        .append(frameRight).append(",").append(frameBottom).append("]")
                .append(", touchableRegion=").append(touchableRegion)
                .append(", visible=").append(visible)
                .append(", scaleFactor=").append(scaleFactor)
                .append(", transform=").append(transform)
                .toString();

    }
+12 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <ui/Region.h>
#include <utils/threads.h>

#include <android/graphics/matrix.h>
#include <gui/WindowInfo.h>
#include "SkRegion.h"
#include "android_hardware_input_InputApplicationHandle.h"
@@ -74,6 +75,7 @@ static struct {
    jfieldID displayId;
    jfieldID replaceTouchableRegionWithCrop;
    WeakRefHandleField touchableRegionSurfaceControl;
    jfieldID transform;
} gInputWindowHandleClassInfo;

static struct {
@@ -305,6 +307,13 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn
    env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.inputFeatures,
                     static_cast<int32_t>(windowInfo.inputFeatures.get()));

    float transformVals[9];
    for (int i = 0; i < 9; i++) {
        transformVals[i] = windowInfo.transform[i % 3][i / 3];
    }
    ScopedLocalRef<jobject> matrixObj(env, AMatrix_newInstance(env, transformVals));
    env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.transform, matrixObj.get());

    return inputWindowHandle;
}

@@ -429,6 +438,9 @@ int register_android_view_InputWindowHandle(JNIEnv* env) {
    GET_FIELD_ID(gInputWindowHandleClassInfo.replaceTouchableRegionWithCrop, clazz,
            "replaceTouchableRegionWithCrop", "Z");

    GET_FIELD_ID(gInputWindowHandleClassInfo.transform, clazz, "transform",
                 "Landroid/graphics/Matrix;");

    jclass weakRefClazz;
    FIND_CLASS(weakRefClazz, "java/lang/ref/Reference");

+7 −0
Original line number Diff line number Diff line
@@ -35,3 +35,10 @@ bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]) {
    }
    return false;
}

jobject AMatrix_newInstance(JNIEnv* env, float values[9]) {
    jobject matrixObj = android::android_graphics_Matrix_newInstance(env);
    SkMatrix* m = android::android_graphics_Matrix_getSkMatrix(env, matrixObj);
    m->set9(values);
    return matrixObj;
}
+10 −0
Original line number Diff line number Diff line
@@ -34,6 +34,16 @@ __BEGIN_DECLS
 */
ANDROID_API bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]);

/**
 * Returns a new Matrix jobject that contains the values passed in as initial values.
 * @param values The 9 values of the 3x3 matrix in the following order.
 *               values[0] = scaleX  values[1] = skewX   values[2] = transX
 *               values[3] = skewY   values[4] = scaleY  values[5] = transY
 *               values[6] = persp0  values[7] = persp1  values[8] = persp2
 * @return The matrix jobject
 */
ANDROID_API jobject AMatrix_newInstance(JNIEnv* env, float values[9]);

__END_DECLS

#endif // ANDROID_GRAPHICS_MATRIX_H
+7 −0
Original line number Diff line number Diff line
@@ -378,13 +378,17 @@ static const JNINativeMethod methods[] = {
    {"nEquals", "(JJ)Z", (void*) SkMatrixGlue::equals}
};

static jclass sClazz;
static jfieldID sNativeInstanceField;
static jmethodID sCtor;

int register_android_graphics_Matrix(JNIEnv* env) {
    int result = RegisterMethodsOrDie(env, "android/graphics/Matrix", methods, NELEM(methods));

    jclass clazz = FindClassOrDie(env, "android/graphics/Matrix");
    sClazz = MakeGlobalRefOrDie(env, clazz);
    sNativeInstanceField = GetFieldIDOrDie(env, clazz, "native_instance", "J");
    sCtor = GetMethodIDOrDie(env, clazz, "<init>", "()V");

    return result;
}
@@ -393,4 +397,7 @@ SkMatrix* android_graphics_Matrix_getSkMatrix(JNIEnv* env, jobject matrixObj) {
    return reinterpret_cast<SkMatrix*>(env->GetLongField(matrixObj, sNativeInstanceField));
}

jobject android_graphics_Matrix_newInstance(JNIEnv* env) {
    return env->NewObject(sClazz, sCtor);
}
}
Loading