| /* |
| * 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 SkPathRaw_DEFINED |
| #define SkPathRaw_DEFINED |
| |
| #include "include/core/SkPathIter.h" |
| #include "include/core/SkPathTypes.h" |
| #include "include/core/SkPoint.h" |
| #include "include/core/SkRect.h" |
| #include "include/core/SkSpan.h" |
| #include "src/core/SkPathEnums.h" // SkPathConvexity |
| |
| #include <array> |
| #include <cstddef> |
| #include <optional> |
| |
| /** |
| * SkPathRaw is a non-owning, immutable view of the path geometry. |
| * |
| * It allows us to have stack-allocated paths, see SkPathRawShapes.h |
| * |
| * It is the responsibility of the creator to ensure that the spans in SkPathRaw point to valid |
| * data that outlives the SkPathRaw instance. |
| */ |
| struct SkPathRaw { |
| SkSpan<const SkPoint> fPoints; |
| SkSpan<const SkPathVerb> fVerbs; |
| SkSpan<const float> fConics; |
| SkRect fBounds; |
| SkPathFillType fFillType; |
| SkPathConvexity fConvexity; |
| uint8_t fSegmentMask; // See SkPath::SegmentMask |
| |
| SkSpan<const SkPoint> points() const { return fPoints; } |
| SkSpan<const SkPathVerb> verbs() const { return fVerbs; } |
| SkSpan<const float> conics() const { return fConics; } |
| SkRect bounds() const { return fBounds; } |
| SkPathFillType fillType() const { return fFillType; } |
| SkPathConvexity convexity() const { return fConvexity; } |
| unsigned segmentMasks() const { return fSegmentMask; } |
| |
| bool empty() const { return fVerbs.empty(); } |
| bool isInverseFillType() const { return SkPathFillType_IsInverse(fFillType); } |
| bool isKnownToBeConvex() const { return SkPathConvexity_IsConvex(fConvexity); } |
| |
| std::optional<SkRect> isRect() const; |
| |
| SkPathIter iter() const { return {fPoints, fVerbs, fConics}; } |
| |
| static SkPathRaw Empty(SkPathFillType ft = SkPathFillType::kDefault) { |
| return { |
| {}, {}, {}, SkRect::MakeEmpty(), ft, SkPathConvexity::kConvex_Degenerate, 0, |
| }; |
| } |
| }; |
| |
| #endif |