| /* | 
 |  * Copyright 2021 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #include "gm/gm.h" | 
 | #include "include/core/SkCanvas.h" | 
 | #include "include/core/SkPath.h" | 
 |  | 
 | constexpr int kSize = 1000; | 
 |  | 
 | // Makes sure PathInnerTriangulateOp uses correct stencil settings when there is a clip in the | 
 | // stencil buffer. | 
 | static void draw_clipped_flower(SkCanvas* canvas, SkPathFillType fillType) { | 
 |     canvas->clear(SK_ColorCYAN); | 
 |     SkPath clip; | 
 |     clip.setFillType(SkPathFillType::kWinding); | 
 |     constexpr static int kGridCount = 50; | 
 |     constexpr static float kCellSize = (float)kSize / kGridCount; | 
 |     for (int y = 0; y < kGridCount; ++y) { | 
 |         clip.addRect(0, y * kCellSize, kSize, (y + 1) * kCellSize, SkPathDirection(y & 1)); | 
 |     } | 
 |     for (int x = 0; x < kGridCount; ++x) { | 
 |         clip.addRect(x * kCellSize, 0, (x + 1) * kCellSize, kSize, SkPathDirection(x & 1)); | 
 |     } | 
 |     canvas->clipPath(clip); | 
 |     SkPath flower; | 
 |     flower.setFillType(fillType); | 
 |     flower.moveTo(1, 0); | 
 |     constexpr static int kNumPetals = 9; | 
 |     for (int i = 1; i <= kNumPetals; ++i) { | 
 |         float c = 2*SK_ScalarPI*(i - .5f) / kNumPetals; | 
 |         float theta = 2*SK_ScalarPI*i / kNumPetals; | 
 |         flower.quadTo(cosf(c)*2, sinf(c)*2, cosf(theta), sinf(theta)); | 
 |     } | 
 |     flower.close(); | 
 |     flower.addArc(SkRect::MakeLTRB(-.75f, -.75f, .75f, .75f), 0, 360); | 
 |     canvas->translate(kSize/2.f, kSize/2.f); | 
 |     canvas->scale(kSize/3.f, kSize/3.f); | 
 |     SkPaint p; | 
 |     p.setAntiAlias(true); | 
 |     p.setColor(SK_ColorMAGENTA); | 
 |     canvas->drawPath(flower, p); | 
 | } | 
 |  | 
 | DEF_SIMPLE_GM(largeclippedpath_winding, canvas, kSize, kSize) { | 
 |     draw_clipped_flower(canvas, SkPathFillType::kWinding); | 
 | } | 
 |  | 
 | DEF_SIMPLE_GM(largeclippedpath_evenodd, canvas, kSize, kSize) { | 
 |     draw_clipped_flower(canvas, SkPathFillType::kEvenOdd); | 
 | } |