summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-07-30 19:20:09 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-07-30 19:20:09 -0700
commiteb4e0c3c1c8e82f363b86a3751f72d7d496ebd1f (patch)
tree0371ab6229d7eb2f2b430541f4526d74d41cf447 /core/java
parente2e5e6746b8670a4ee4fb66b5947e7fab0814420 (diff)
parent06f96e2652e4855b6520ad9dd70583677605b79a (diff)
downloadframeworks_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.java34
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);
}