canvas->restore();
}
+
+ // reflected oval
+ for (int i = 0; i < fPaints.count(); ++i) {
+ SkRect oval = SkRect::MakeLTRB(-30, -30, 30, 30);
+ canvas->save();
+ // position the oval, and make it at off-integer coords.
+ canvas->translate(kXStart + SK_Scalar1 * kXStep * 5 + SK_Scalar1 / 4,
+ kYStart + SK_Scalar1 * kYStep * i + 3 * SK_Scalar1 / 4 +
+ SK_ScalarHalf * kYStep);
+ canvas->rotate(90);
+ canvas->scale(1, -1);
+ canvas->scale(1, 0.66f);
+
+ SkColor color = genColor(&rand);
+ fPaints[i].setColor(color);
+
+ canvas->drawRect(oval, rectPaint);
+ canvas->drawOval(oval, fPaints[i]);
+ canvas->restore();
+ }
}
private:
SkScalar ellipseXRadius = SkScalarHalf(ellipse.width());
SkScalar ellipseYRadius = SkScalarHalf(ellipse.height());
SkScalar xRadius = SkScalarAbs(viewMatrix[SkMatrix::kMScaleX] * ellipseXRadius +
- viewMatrix[SkMatrix::kMSkewY] * ellipseYRadius);
- SkScalar yRadius = SkScalarAbs(viewMatrix[SkMatrix::kMSkewX] * ellipseXRadius +
+ viewMatrix[SkMatrix::kMSkewX] * ellipseYRadius);
+ SkScalar yRadius = SkScalarAbs(viewMatrix[SkMatrix::kMSkewY] * ellipseXRadius +
viewMatrix[SkMatrix::kMScaleY] * ellipseYRadius);
// do (potentially) anisotropic mapping of stroke
const GrShaderCaps* shaderCaps) {
// we can draw circles
SkScalar width = oval.width();
- if (SkScalarNearlyEqual(width, oval.height()) && circle_stays_circle(viewMatrix)) {
+ if (width > SK_ScalarNearlyZero && SkScalarNearlyEqual(width, oval.height()) &&
+ circle_stays_circle(viewMatrix)) {
SkPoint center = {oval.centerX(), oval.centerY()};
return CircleOp::Make(color, viewMatrix, center, width / 2.f, GrStyle(stroke, nullptr));
}