diff options
| author | Romain Guy <romainguy@google.com> | 2010-07-30 19:20:09 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-07-30 19:20:09 -0700 |
| commit | eb4e0c3c1c8e82f363b86a3751f72d7d496ebd1f (patch) | |
| tree | 0371ab6229d7eb2f2b430541f4526d74d41cf447 /core/java | |
| parent | e2e5e6746b8670a4ee4fb66b5947e7fab0814420 (diff) | |
| parent | 06f96e2652e4855b6520ad9dd70583677605b79a (diff) | |
| download | frameworks_base-eb4e0c3c1c8e82f363b86a3751f72d7d496ebd1f.zip frameworks_base-eb4e0c3c1c8e82f363b86a3751f72d7d496ebd1f.tar.gz frameworks_base-eb4e0c3c1c8e82f363b86a3751f72d7d496ebd1f.tar.bz2 | |
Merge "Refactor Skia shaders handling."
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/GLES20Canvas.java | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index 78648ff..21e6793 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -17,21 +17,17 @@ package android.view; import android.graphics.Bitmap; -import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.DrawFilter; -import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Picture; import android.graphics.PorterDuff; -import android.graphics.RadialGradient; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.graphics.Shader; -import android.graphics.SweepGradient; import android.graphics.TemporaryBuffer; import android.text.GraphicsOperations; import android.text.SpannableString; @@ -593,7 +589,9 @@ class GLES20Canvas extends Canvas { if ((index | count | (index + count) | (text.length - index - count)) < 0) { throw new IndexOutOfBoundsException(); } + boolean hasShader = setupShader(paint); nDrawText(mRenderer, text, index, count, x, y, paint.mBidiFlags, paint.mNativePaint); + if (hasShader) nResetShader(mRenderer); } private native void nDrawText(int renderer, char[] text, int index, int count, float x, float y, @@ -601,6 +599,7 @@ class GLES20Canvas extends Canvas { @Override public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) { + boolean hasShader = setupShader(paint); if (text instanceof String || text instanceof SpannedString || text instanceof SpannableString) { nDrawText(mRenderer, text.toString(), start, end, x, y, paint.mBidiFlags, @@ -614,6 +613,7 @@ class GLES20Canvas extends Canvas { nDrawText(mRenderer, buf, 0, end - start, x, y, paint.mBidiFlags, paint.mNativePaint); TemporaryBuffer.recycle(buf); } + if (hasShader) nResetShader(mRenderer); } @Override @@ -621,7 +621,9 @@ class GLES20Canvas extends Canvas { if ((start | end | (end - start) | (text.length() - end)) < 0) { throw new IndexOutOfBoundsException(); } + boolean hasShader = setupShader(paint); nDrawText(mRenderer, text, start, end, x, y, paint.mBidiFlags, paint.mNativePaint); + if (hasShader) nResetShader(mRenderer); } private native void nDrawText(int renderer, String text, int start, int end, float x, float y, @@ -629,7 +631,9 @@ class GLES20Canvas extends Canvas { @Override public void drawText(String text, float x, float y, Paint paint) { + boolean hasShader = setupShader(paint); nDrawText(mRenderer, text, 0, text.length(), x, y, paint.mBidiFlags, paint.mNativePaint); + if (hasShader) nResetShader(mRenderer); } @Override @@ -665,28 +669,12 @@ class GLES20Canvas extends Canvas { private boolean setupShader(Paint paint) { final Shader shader = paint.getShader(); if (shader != null) { - if (shader instanceof BitmapShader) { - final BitmapShader bs = (BitmapShader) shader; - nSetupBitmapShader(mRenderer, bs.native_instance, bs.mBitmap.mNativeBitmap, - bs.mTileX, bs.mTileY, bs.mLocalMatrix); - return true; - } else if (shader instanceof LinearGradient) { - final LinearGradient ls = (LinearGradient) shader; - nSetupLinearShader(mRenderer, ls.native_instance, ls.bounds, ls.colors, - ls.positions, ls.count, ls.tileMode, ls.mLocalMatrix); - return true; - } else if (shader instanceof RadialGradient) { - // TODO: Implement - } else if (shader instanceof SweepGradient) { - // TODO: Implement - } + nSetupShader(mRenderer, shader.native_shader); + return true; } return false; } - private native void nSetupLinearShader(int renderer, int shader, int bounds, - int colors, int positions, int count, int tileMode, int localMatrix); - private native void nSetupBitmapShader(int renderer, int shader, int bitmap, - int tileX, int tileY, int matrix); + private native void nSetupShader(int renderer, int shader); private native void nResetShader(int renderer); } |
