Index: src/gpu/batches/GrRectBatchFactory.cpp |
diff --git a/src/gpu/batches/GrRectBatchFactory.cpp b/src/gpu/batches/GrRectBatchFactory.cpp |
index eed18ad419637e788065495cf2729ae748fb6fa1..f34a8c058a2c307783dc2c3eb522ea924b1d634c 100644 |
--- a/src/gpu/batches/GrRectBatchFactory.cpp |
+++ b/src/gpu/batches/GrRectBatchFactory.cpp |
@@ -33,13 +33,6 @@ GrDrawBatch* CreateAAStroke(GrColor color, |
const SkScalar rx = SkScalarMul(dx, SK_ScalarHalf); |
const SkScalar ry = SkScalarMul(dy, SK_ScalarHalf); |
- SkScalar spare; |
- { |
- SkScalar w = devRect.width() - dx; |
- SkScalar h = devRect.height() - dy; |
- spare = SkTMin(w, h); |
- } |
- |
SkRect devOutside(devRect); |
devOutside.outset(rx, ry); |
@@ -51,13 +44,25 @@ GrDrawBatch* CreateAAStroke(GrColor color, |
miterStroke = false; |
} |
- if (spare <= 0 && miterStroke) { |
- return CreateAAFill(color, viewMatrix, devOutside, devOutside); |
- } |
- |
SkRect devInside(devRect); |
devInside.inset(rx, ry); |
+ // If we have a degenerate stroking rect(ie the stroke is larger than inner rect) then we |
+ // make a degenerate inside rect to avoid double hitting. We will also jam all of the points |
+ // together when we render these rects. |
+ SkScalar spare; |
+ { |
+ SkScalar w = devRect.width() - dx; |
+ SkScalar h = devRect.height() - dy; |
+ spare = SkTMin(w, h); |
+ } |
+ |
+ bool degenerate = spare <= 0; |
+ if (degenerate) { |
+ devInside.fLeft = devInside.fRight = devRect.centerX(); |
+ devInside.fTop = devInside.fBottom = devRect.centerY(); |
+ } |
+ |
SkRect devOutsideAssist(devRect); |
// For bevel-stroke, use 2 SkRect instances(devOutside and devOutsideAssist) |
@@ -69,7 +74,7 @@ GrDrawBatch* CreateAAStroke(GrColor color, |
} |
return GrAAStrokeRectBatch::Create(color, viewMatrix, devOutside, devOutsideAssist, devInside, |
- miterStroke); |
+ miterStroke, degenerate); |
} |
GrDrawBatch* CreateAAFillNestedRects(GrColor color, |
@@ -82,11 +87,8 @@ GrDrawBatch* CreateAAFillNestedRects(GrColor color, |
viewMatrix.mapRect(&devOutside, rects[0]); |
viewMatrix.mapRect(&devInside, rects[1]); |
- if (devInside.isEmpty()) { |
- return CreateAAFill(color, viewMatrix, devOutside, devOutside); |
- } |
- |
- return GrAAStrokeRectBatch::Create(color, viewMatrix, devOutside, devOutside, devInside, true); |
+ return GrAAStrokeRectBatch::Create(color, viewMatrix, devOutside, devOutside, devInside, true, |
+ devInside.isEmpty()); |
} |
}; |