Add a getNativeMatrix() API.
This API can be used by WebView to apply the appropriate transform
on its rendering.
Change-Id: I79aa39a29805f462fb08226370328815e74bdc52
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 2fadb82..d78c68a 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -320,6 +320,13 @@
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);
}
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index dfa614c..cfa9a27 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -218,6 +218,11 @@
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 @@
{ "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 },
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 952f2b5..07fe66c 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -447,6 +447,16 @@
public void getMatrix(Matrix ctm) {
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
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index ffd0aed..92875b1 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -584,6 +584,10 @@
mSnapshot->transform->load(*matrix);
}
+const float* OpenGLRenderer::getMatrix() const {
+ return &mSnapshot->transform->data[0];
+}
+
void OpenGLRenderer::getMatrix(SkMatrix* matrix) {
mSnapshot->transform->copyTo(*matrix);
}
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 9900a27..f8828e2 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -87,6 +87,7 @@
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);