diff options
| author | Romain Guy <romainguy@google.com> | 2010-10-13 13:40:37 -0700 |
|---|---|---|
| committer | Romain Guy <romainguy@google.com> | 2010-10-13 13:40:37 -0700 |
| commit | 41030da16856c8869e1e51d4a0405432fa96614e (patch) | |
| tree | e40b599f2961989c444e5ca1bb92536eef76b7ba | |
| parent | 2b67ce7213501d4377e46f67656993914eceb423 (diff) | |
| download | frameworks_base-41030da16856c8869e1e51d4a0405432fa96614e.zip frameworks_base-41030da16856c8869e1e51d4a0405432fa96614e.tar.gz frameworks_base-41030da16856c8869e1e51d4a0405432fa96614e.tar.bz2 | |
Add a getNativeMatrix() API.
This API can be used by WebView to apply the appropriate transform
on its rendering.
Change-Id: I79aa39a29805f462fb08226370328815e74bdc52
| -rw-r--r-- | core/java/android/view/GLES20Canvas.java | 7 | ||||
| -rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 6 | ||||
| -rw-r--r-- | graphics/java/android/graphics/Canvas.java | 10 | ||||
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 4 | ||||
| -rw-r--r-- | libs/hwui/OpenGLRenderer.h | 1 |
5 files changed, 28 insertions, 0 deletions
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 @@ 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); } 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 @@ 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 }, 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 class Canvas { 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 @@ 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); } 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 @@ 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); |
