am 8257124c: Merge "Draw stroked rectangle as meshes instead of textures Bug #7233734" into jb-mr1-dev

* commit '8257124cffe2825f123abd2b209422727c8f3053':
  Draw stroked rectangle as meshes instead of textures Bug #7233734
This commit is contained in:
Romain Guy
2012-10-02 14:32:07 -07:00
committed by Android Git Automerger
2 changed files with 30 additions and 5 deletions

View File

@@ -513,7 +513,10 @@ public class GradientDrawable extends Drawable {
canvas.drawRoundRect(mRect, rad, rad, mStrokePaint);
}
} else {
canvas.drawRect(mRect, mFillPaint);
if (mFillPaint.getColor() != 0 || mColorFilter != null ||
mFillPaint.getShader() != null) {
canvas.drawRect(mRect, mFillPaint);
}
if (haveStroke) {
canvas.drawRect(mRect, mStrokePaint);
}
@@ -1251,6 +1254,11 @@ public class GradientDrawable extends Drawable {
private void initializeWithState(GradientState state) {
if (state.mHasSolidColor) {
mFillPaint.setColor(state.mSolidColor);
} else if (state.mColors == null) {
// If we don't have a solid color and we don't have a gradient,
// the app is stroking the shape, set the color to the default
// value of state.mSolidColor
mFillPaint.setColor(0);
}
mPadding = state.mPadding;
if (state.mStrokeWidth >= 0) {

View File

@@ -2440,16 +2440,33 @@ status_t OpenGLRenderer::drawArc(float left, float top, float right, float botto
return drawShape(left, top, texture, paint);
}
// See SkPaintDefaults.h
#define SkPaintDefaults_MiterLimit SkIntToScalar(4)
status_t OpenGLRenderer::drawRect(float left, float top, float right, float bottom, SkPaint* p) {
if (mSnapshot->isIgnored() || quickRejectPreStroke(left, top, right, bottom, p)) {
return DrawGlInfo::kStatusDone;
}
// only fill style is supported by drawConvexPath, since others have to handle joins
if (p->getStyle() != SkPaint::kFill_Style) {
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.rectShapeCache.getRect(right - left, bottom - top, p);
return drawShape(left, top, texture, p);
// only fill style is supported by drawConvexPath, since others have to handle joins
if (p->getPathEffect() != 0 || p->getStrokeJoin() != SkPaint::kMiter_Join ||
p->getStrokeMiter() != SkPaintDefaults_MiterLimit) {
mCaches.activeTexture(0);
const PathTexture* texture =
mCaches.rectShapeCache.getRect(right - left, bottom - top, p);
return drawShape(left, top, texture, p);
}
SkPath path;
SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
if (p->getStyle() == SkPaint::kStrokeAndFill_Style) {
rect.outset(p->getStrokeWidth() / 2, p->getStrokeWidth() / 2);
}
path.addRect(rect);
drawConvexPath(path, p);
return DrawGlInfo::kStatusDrew;
}
if (p->isAntiAlias() && !mSnapshot->transform->isSimple()) {