Index: src/gpu/GrDrawContext.cpp |
diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp |
index 303361114655bf9fdfdfe590b3ce212be35dd1a5..8b956476312f7c3d61ae6a33a9f001490124aa62 100644 |
--- a/src/gpu/GrDrawContext.cpp |
+++ b/src/gpu/GrDrawContext.cpp |
@@ -204,35 +204,6 @@ void GrDrawContext::drawPaint(GrRenderTarget* rt, |
} |
} |
-static inline bool is_irect(const SkRect& r) { |
- return SkScalarIsInt(r.fLeft) && SkScalarIsInt(r.fTop) && |
- SkScalarIsInt(r.fRight) && SkScalarIsInt(r.fBottom); |
-} |
- |
-static bool apply_aa_to_rect(GrDrawTarget* target, |
- GrPipelineBuilder* pipelineBuilder, |
- SkRect* devBoundRect, |
- const SkRect& rect, |
- SkScalar strokeWidth, |
- const SkMatrix& combinedMatrix, |
- GrColor color) { |
- if (pipelineBuilder->getRenderTarget()->isUnifiedMultisampled() || |
- !combinedMatrix.preservesAxisAlignment()) { |
- return false; |
- } |
- |
- combinedMatrix.mapRect(devBoundRect, rect); |
- if (!combinedMatrix.rectStaysRect()) { |
- return true; |
- } |
- |
- if (strokeWidth < 0) { |
- return !is_irect(*devBoundRect); |
- } |
- |
- return true; |
-} |
- |
static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& point) { |
return point.fX >= rect.fLeft && point.fX <= rect.fRight && |
point.fY >= rect.fTop && point.fY <= rect.fBottom; |
@@ -297,13 +268,18 @@ void GrDrawContext::drawRect(GrRenderTarget* rt, |
} |
GrColor color = paint.getColor(); |
- SkRect devBoundRect; |
bool needAA = paint.isAntiAlias() && |
!pipelineBuilder.getRenderTarget()->isUnifiedMultisampled(); |
- bool doAA = needAA && apply_aa_to_rect(fDrawTarget, &pipelineBuilder, &devBoundRect, rect, |
- width, viewMatrix, color); |
- if (doAA) { |
+ // The fill path can handle rotation but not skew |
+ // The stroke path needs the rect to remain axis aligned (no rotation or skew) |
+ // None of our draw rect calls can handle perspective yet |
+ SkASSERT(!viewMatrix.hasPerspective()); |
+ bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() : viewMatrix.preservesRightAngles(); |
+ |
+ if (needAA && canApplyAA) { |
+ SkRect devBoundRect; |
+ viewMatrix.mapRect(&devBoundRect, rect); |
SkAutoTUnref<GrDrawBatch> batch; |
if (width >= 0) { |
batch.reset(GrRectBatchFactory::CreateStrokeAA(color, viewMatrix, rect, devBoundRect, |