Fix corner case in NonAAStrokeRectOp (stroke width > the rect's width or height)
Bug: skia:5419
Change-Id: I75a67d35c94821bf7de80b63eb835b20f2772ddd
Reviewed-on: https://skia-review.googlesource.com/31241
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/ops/GrNonAAStrokeRectOp.cpp b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
index 2c3d822..cf533a1 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -22,9 +22,6 @@
*/
static void init_stroke_rect_strip(SkPoint verts[10], const SkRect& rect, SkScalar width) {
const SkScalar rad = SkScalarHalf(width);
- // TODO we should be able to enable this assert, but we'd have to filter these draws
- // this is a bug
- // SkASSERT(rad < rect.width() / 2 && rad < rect.height() / 2);
verts[0].set(rect.fLeft + rad, rect.fTop + rad);
verts[1].set(rect.fLeft - rad, rect.fTop - rad);
@@ -36,6 +33,15 @@
verts[7].set(rect.fLeft - rad, rect.fBottom + rad);
verts[8] = verts[0];
verts[9] = verts[1];
+
+ // TODO: we should be catching this higher up the call stack and just draw a single
+ // non-AA rect
+ if (2*rad >= rect.width()) {
+ verts[0].fX = verts[2].fX = verts[4].fX = verts[6].fX = verts[8].fX = rect.centerX();
+ }
+ if (2*rad >= rect.height()) {
+ verts[0].fY = verts[2].fY = verts[4].fY = verts[6].fY = verts[8].fY = rect.centerY();
+ }
}
// Allow all hairlines and all miters, so long as the miter limit doesn't produce beveled corners.