| /* | |
| * Copyright 2017 Google LLC | |
| * | |
| * 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/SkPaint.h" | |
| #include "include/core/SkRRect.h" | |
| #include "include/core/SkRect.h" | |
| #include "include/core/SkScalar.h" | |
| #include <initializer_list> | |
| DEF_SIMPLE_GM(drrect_small_inner, canvas, 170, 610) { | |
| SkPaint paint; | |
| paint.setAntiAlias(true); | |
| static constexpr SkScalar kOuterRadius = 35.f; | |
| auto outer = SkRRect::MakeOval(SkRect::MakeXYWH(0, 0, 2 * kOuterRadius, 2 * kOuterRadius)); | |
| canvas->translate(10.f, 10.f); | |
| canvas->save(); | |
| for (bool offcenter : {false, true}) { | |
| for (bool oval : {false, true}) { | |
| for (SkScalar innerRadiusX : {1.f, 0.5f, 0.1f, .01f}) { | |
| SkScalar innerRadiusY = innerRadiusX; | |
| if (oval) { | |
| innerRadiusY *= 0.95f; | |
| } | |
| SkScalar tx = kOuterRadius - innerRadiusX; | |
| SkScalar ty = kOuterRadius - innerRadiusY; | |
| if (offcenter) { | |
| tx += 1.f; | |
| } | |
| auto inner = SkRRect::MakeOval( | |
| SkRect::MakeXYWH(tx, ty, 2 * innerRadiusX, 2 * innerRadiusY)); | |
| canvas->drawDRRect(outer, inner, paint); | |
| canvas->translate(0, 2 * kOuterRadius + 5); | |
| } | |
| } | |
| canvas->restore(); | |
| canvas->translate(2 * kOuterRadius + 2, 0); | |
| } | |
| canvas->restore(); | |
| } |