diff options
author | Romain Guy <romainguy@google.com> | 2011-08-16 13:55:02 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2011-08-16 13:55:02 -0700 |
commit | 302a9df1d50373c82923bb84ff665dfce584fb22 (patch) | |
tree | 01a6e183b3c0f49676730a679397a31692942f8d /core/java/android | |
parent | 95a78c38373bb99258d83a6ab2c92825d979f200 (diff) | |
download | frameworks_base-302a9df1d50373c82923bb84ff665dfce584fb22.zip frameworks_base-302a9df1d50373c82923bb84ff665dfce584fb22.tar.gz frameworks_base-302a9df1d50373c82923bb84ff665dfce584fb22.tar.bz2 |
Add an API to set the transform on a TextureView's surface texture.
Bug #5156689
Change-Id: I635a625885c9b832a60d44ece0de7613ceb84109
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/view/GLES20Canvas.java | 1 | ||||
-rw-r--r-- | core/java/android/view/GLES20RenderLayer.java | 8 | ||||
-rw-r--r-- | core/java/android/view/GLES20TextureLayer.java | 6 | ||||
-rw-r--r-- | core/java/android/view/HardwareLayer.java | 8 | ||||
-rw-r--r-- | core/java/android/view/TextureView.java | 53 |
5 files changed, 76 insertions, 0 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index e586370..cfbb47c 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -151,6 +151,7 @@ class GLES20Canvas extends HardwareCanvas { static native void nResizeLayer(int layerId, int width, int height, int[] layerInfo); static native void nUpdateTextureLayer(int layerId, int width, int height, boolean opaque, SurfaceTexture surface); + static native void nSetTextureLayerTransform(int layerId, int matrix); static native void nDestroyLayer(int layerId); static native void nDestroyLayerDeferred(int layerId); static native boolean nCopyLayer(int layerId, int bitmap); diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java index 41f16e2..23a7166 100644 --- a/core/java/android/view/GLES20RenderLayer.java +++ b/core/java/android/view/GLES20RenderLayer.java @@ -17,6 +17,7 @@ package android.view; import android.graphics.Canvas; +import android.graphics.Matrix; /** * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. This @@ -87,4 +88,11 @@ class GLES20RenderLayer extends GLES20Layer { } return getCanvas(); } + + /** + * Ignored + */ + @Override + void setTransform(Matrix matrix) { + } } diff --git a/core/java/android/view/GLES20TextureLayer.java b/core/java/android/view/GLES20TextureLayer.java index 391d9f4..6c41023 100644 --- a/core/java/android/view/GLES20TextureLayer.java +++ b/core/java/android/view/GLES20TextureLayer.java @@ -17,6 +17,7 @@ package android.view; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.SurfaceTexture; /** @@ -75,4 +76,9 @@ class GLES20TextureLayer extends GLES20Layer { super.update(width, height, isOpaque); GLES20Canvas.nUpdateTextureLayer(mLayer, width, height, isOpaque, mSurface); } + + @Override + void setTransform(Matrix matrix) { + GLES20Canvas.nSetTextureLayerTransform(mLayer, matrix.native_instance); + } } diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java index dfb39ae..28389ab 100644 --- a/core/java/android/view/HardwareLayer.java +++ b/core/java/android/view/HardwareLayer.java @@ -18,6 +18,7 @@ package android.view; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Matrix; /** * A hardware layer can be used to render graphics operations into a hardware @@ -150,4 +151,11 @@ abstract class HardwareLayer { mHeight = height; mOpaque = isOpaque; } + + /** + * Sets an optional transform on this layer. + * + * @param matrix The transform to apply to the layer. + */ + abstract void setTransform(Matrix matrix); } diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 53a6bcb..b72222e 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -19,6 +19,7 @@ package android.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.SurfaceTexture; @@ -104,6 +105,9 @@ public class TextureView extends View { private boolean mOpaque = true; + private final Matrix mMatrix = new Matrix(); + private boolean mMatrixChanged; + private final Object[] mLock = new Object[0]; private boolean mUpdateLayer; @@ -312,6 +316,11 @@ public class TextureView extends View { applyUpdate(); + if (mMatrixChanged) { + mLayer.setTransform(mMatrix); + mMatrixChanged = false; + } + return mLayer; } @@ -358,6 +367,50 @@ public class TextureView extends View { } /** + * <p>Sets the transform to associate with this texture view. + * The specified transform applies to the underlying surface + * texture and does not affect the size or position of the view + * itself, only of its content.</p> + * + * <p>Some transforms might prevent the content from drawing + * all the pixels contained within this view's bounds. In such + * situations, make sure this texture view is not marked opaque.</p> + * + * @param transform The transform to apply to the content of + * this view. + * + * @see #getTransform(android.graphics.Matrix) + * @see #isOpaque() + * @see #setOpaque(boolean) + */ + public void setTransform(Matrix transform) { + mMatrix.set(transform); + mMatrixChanged = true; + invalidate(); + } + + /** + * Returns the transform associated with this texture view. + * + * @param transform The {@link Matrix} in which to copy the current + * transform. Can be null. + * + * @return The specified matrix if not null or a new {@link Matrix} + * instance otherwise. + * + * @see #setTransform(android.graphics.Matrix) + */ + public Matrix getTransform(Matrix transform) { + if (transform == null) { + transform = new Matrix(); + } + + transform.set(mMatrix); + + return transform; + } + + /** * <p>Returns a {@link android.graphics.Bitmap} representation of the content * of the associated surface texture. If the surface texture is not available, * this method returns null.</p> |