| /* | 
 |  * Copyright 2020 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" | 
 |  | 
 | static void draw_sqooshed_rect(SkCanvas* canvas, SkVector xlate, const SkPaint& p) { | 
 |     canvas->save(); | 
 |         canvas->translate(xlate.fX, xlate.fY); | 
 |         canvas->scale(0.03f, 2.0f); | 
 |         canvas->drawRect(SkRect::MakeLTRB(-500, -10, 500, 10), p); | 
 |     canvas->restore(); | 
 | } | 
 |  | 
 | /* | 
 |  * This GM is intended to wring out any lingering anisotropic | 
 |  * stroke rect bugs. It contains a repro case for crbug.com/935303 | 
 |  * The pattern is: | 
 |  * | 
 |  *         miter @       miter @      bevel @       bevel @ | 
 |  *         whole pixels  half pixels  whole pixels  half pixels | 
 |  * | 
 |  *   AA | 
 |  * | 
 |  * non-AA | 
 |  * | 
 |  */ | 
 | class StrokeRectAnisotropicGM : public skiagm::GM { | 
 | public: | 
 |     StrokeRectAnisotropicGM() {} | 
 |  | 
 | protected: | 
 |  | 
 |     SkString onShortName() override { | 
 |         return SkString("strokerect_anisotropic"); | 
 |     } | 
 |  | 
 |     SkISize onISize() override { | 
 |         return SkISize::Make(160, 160); | 
 |     } | 
 |  | 
 |     void onDraw(SkCanvas* canvas) override { | 
 |  | 
 |         SkPaint aaPaint; | 
 |         aaPaint.setColor(SkColorSetARGB(255, 0, 0, 0)); | 
 |         aaPaint.setAntiAlias(true); | 
 |         aaPaint.setStrokeWidth(10); | 
 |         aaPaint.setStyle(SkPaint::kStroke_Style); | 
 |  | 
 |         SkPaint bwPaint; | 
 |         bwPaint.setColor(SkColorSetARGB(255, 0, 0, 0)); | 
 |         bwPaint.setStrokeWidth(10); | 
 |         bwPaint.setStyle(SkPaint::kStroke_Style); | 
 |  | 
 |         // The two miter columns | 
 |         draw_sqooshed_rect(canvas, {  20.0f, 40.5f }, aaPaint);  // whole pixels | 
 |         draw_sqooshed_rect(canvas, {  20.0f, 110.5f }, bwPaint); // whole pixels | 
 |  | 
 |         draw_sqooshed_rect(canvas, {  60.5f, 40.0f }, aaPaint);  // half pixels | 
 |         draw_sqooshed_rect(canvas, {  60.5f, 110.0f }, bwPaint); // half pixels | 
 |  | 
 |         aaPaint.setStrokeJoin(SkPaint::kBevel_Join); | 
 |         bwPaint.setStrokeJoin(SkPaint::kBevel_Join); | 
 |  | 
 |         // The two bevel columns | 
 |         draw_sqooshed_rect(canvas, { 100.0f, 40.5f }, aaPaint);  // whole pixels | 
 |         draw_sqooshed_rect(canvas, { 100.0f, 110.5f }, bwPaint); // whole pixels | 
 |  | 
 |         draw_sqooshed_rect(canvas, { 140.5f, 40.0f }, aaPaint);  // half pixels | 
 |         draw_sqooshed_rect(canvas, { 140.5f, 110.0f }, bwPaint); // half pixels | 
 |     } | 
 |  | 
 | private: | 
 |     using INHERITED = GM; | 
 | }; | 
 | DEF_GM(return new StrokeRectAnisotropicGM;) | 
 |  |