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

Commit 41030da1 authored by Romain Guy's avatar Romain Guy
Browse files

Add a getNativeMatrix() API.

This API can be used by WebView to apply the appropriate transform
on its rendering.

Change-Id: I79aa39a29805f462fb08226370328815e74bdc52
parent 2b67ce72
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -319,6 +319,13 @@ class GLES20Canvas extends HardwareCanvas {
    
    private native void nSetMatrix(int renderer, int matrix);

    @Override
    public int getNativeMatrix() {
        return nGetMatrix(mRenderer);
    }

    private native int nGetMatrix(int renderer);    

    @Override
    public void getMatrix(Matrix matrix) {
        nGetMatrix(mRenderer, matrix.native_instance);
+6 −0
Original line number Diff line number Diff line
@@ -218,6 +218,11 @@ static void android_view_GLES20Canvas_setMatrix(JNIEnv* env, jobject canvas,
    renderer->setMatrix(matrix);
}

static const float* android_view_GLES20Canvas_getNativeMatrix(JNIEnv* env,
        jobject canvas, OpenGLRenderer* renderer) {
    return renderer->getMatrix();
}

static void android_view_GLES20Canvas_getMatrix(JNIEnv* env, jobject canvas,
        OpenGLRenderer* renderer, SkMatrix* matrix) {
    renderer->getMatrix(matrix);
@@ -468,6 +473,7 @@ static JNINativeMethod gMethods[] = {
    { "nScale",             "(IFF)V",          (void*) android_view_GLES20Canvas_scale },

    { "nSetMatrix",         "(II)V",           (void*) android_view_GLES20Canvas_setMatrix },
    { "nGetMatrix",         "(I)I",            (void*) android_view_GLES20Canvas_getNativeMatrix },
    { "nGetMatrix",         "(II)V",           (void*) android_view_GLES20Canvas_getMatrix },
    { "nConcatMatrix",      "(II)V",           (void*) android_view_GLES20Canvas_concatMatrix },

+10 −0
Original line number Diff line number Diff line
@@ -448,6 +448,16 @@ public class Canvas {
        native_getCTM(mNativeCanvas, ctm.native_instance);
    }

    /**
     * Returns a pointer to an internal 4x4 native matrix. The returned
     * pointer is a pointer to an array of 16 floats.
     * 
     * @hide
     */
    public int getNativeMatrix() {
        return 0;
    }
    
    /**
     * Return a new matrix with a copy of the canvas' current transformation
     * matrix.
+4 −0
Original line number Diff line number Diff line
@@ -584,6 +584,10 @@ void OpenGLRenderer::setMatrix(SkMatrix* matrix) {
    mSnapshot->transform->load(*matrix);
}

const float* OpenGLRenderer::getMatrix() const {
    return &mSnapshot->transform->data[0];
}

void OpenGLRenderer::getMatrix(SkMatrix* matrix) {
    mSnapshot->transform->copyTo(*matrix);
}
+1 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ public:
    virtual void rotate(float degrees);
    virtual void scale(float sx, float sy);

    const float* getMatrix() const;
    void getMatrix(SkMatrix* matrix);
    virtual void setMatrix(SkMatrix* matrix);
    virtual void concatMatrix(SkMatrix* matrix);