/src/skia/src/gpu/graphite/geom/AnalyticClip.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright 2024 Google LLC |
3 | | * |
4 | | * Use of this source code is governed by a BSD-style license that can be |
5 | | * found in the LICENSE file. |
6 | | */ |
7 | | |
8 | | #ifndef skgpu_graphite_geom_AnalyticClip_DEFINED |
9 | | #define skgpu_graphite_geom_AnalyticClip_DEFINED |
10 | | |
11 | | #include "src/gpu/graphite/geom/Rect.h" |
12 | | |
13 | | namespace skgpu::graphite { |
14 | | |
15 | | /** |
16 | | * Represents a rect or rrect clip with any non-rect corners having the same circular radii. |
17 | | */ |
18 | | struct CircularRRectClip { |
19 | | // Indicate which edges are adjacent to circular corners. |
20 | | enum EdgeFlags { |
21 | | kLeft_EdgeFlag = 0b0001, |
22 | | kTop_EdgeFlag = 0b0010, |
23 | | kRight_EdgeFlag = 0b0100, |
24 | | kBottom_EdgeFlag = 0b1000, |
25 | | |
26 | | kNone_EdgeFlag = 0b0000, |
27 | | kAll_EdgeFlag = 0b1111, |
28 | | }; |
29 | | Rect fBounds; // Bounds of clip |
30 | | float fRadius = 0; // Circular radius, if any |
31 | | uint32_t fEdgeFlags = kNone_EdgeFlag; |
32 | | bool fInverted = false; |
33 | | |
34 | 0 | bool isEmpty() const { return fBounds.isEmptyNegativeOrNaN(); } |
35 | 0 | SkRect edgeSelectRect() const { |
36 | 0 | return { fEdgeFlags & kLeft_EdgeFlag ? 1.f : 0.f, |
37 | 0 | fEdgeFlags & kTop_EdgeFlag ? 1.f : 0.f, |
38 | 0 | fEdgeFlags & kRight_EdgeFlag ? 1.f : 0.f, |
39 | 0 | fEdgeFlags & kBottom_EdgeFlag ? 1.f : 0.f }; |
40 | 0 | } |
41 | | }; |
42 | | |
43 | | } // namespace skgpu::graphite |
44 | | |
45 | | #endif // skgpu_graphite_geom_AnalyticClip_DEFINED |