| /* | |
| * Copyright 2025 Google LLC. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkPathRawShapes_DEFINED | |
| #define SkPathRawShapes_DEFINED | |
| #include "include/core/SkPathTypes.h" | |
| #include "include/core/SkPoint.h" | |
| #include "src/core/SkPathRaw.h" | |
| class SkRRect; | |
| struct SkRect; | |
| /** | |
| * These classes provide their own stack-based storage for path data, making them efficient | |
| * alternatives to SkPath for known geometries, avoiding heap allocations. | |
| * | |
| * The defaults were chosen to match those in SkPathBuilder.h | |
| */ | |
| namespace SkPathRawShapes { | |
| struct Rect : public SkPathRaw { | |
| SkPoint fStorage[4]; // move + 3 lines (+ close) | |
| explicit Rect(const SkRect&, SkPathDirection = SkPathDirection::kCW, unsigned index = 0); | |
| }; | |
| struct Oval : public SkPathRaw { | |
| SkPoint fStorage[9]; // move + 4 conics (+ close) | |
| explicit Oval(const SkRect&, SkPathDirection = SkPathDirection::kCW, unsigned index = 1); | |
| }; | |
| struct RRect : public SkPathRaw { | |
| SkPoint fStorage[13]; // worse case: move + 4 conics + 4 lines (+ close) | |
| RRect(const SkRRect&, SkPathDirection dir, unsigned index); | |
| RRect(const SkRRect& rr, SkPathDirection dir) | |
| : RRect(rr, dir, (dir == SkPathDirection::kCW ? 6 : 7)) {} | |
| explicit RRect(const SkRRect& rr) : RRect(rr, SkPathDirection::kCW, 6) {} | |
| }; | |
| struct Triangle : public SkPathRaw { | |
| Triangle(SkSpan<const SkPoint> threePoints, const SkRect& bounds); | |
| }; | |
| } // namespace SkPathRawShapes | |
| #endif |