80 {
81 if (nullptr == cullRect) {
83 return false;
84 }
85
88
89 if ((dx && dy) || (!dx && !dy)) {
90 return false;
91 }
92
95
96
97
98
102 return false;
103 }
104
105 inv.mapRect(&bounds);
106
107 if (dx) {
111
112 if (dx < 0) {
113 using std::swap;
115 }
116
118 if (maxX <= bounds.fLeft || minX >=
bounds.fRight) {
119 return false;
120 }
121
122
123
124
125
126 if (minX <
bounds.fLeft) {
128 }
129 if (maxX >
bounds.fRight) {
131 }
132
134 if (dx < 0) {
135 using std::swap;
137 }
140 } else {
144
145 if (dy < 0) {
146 using std::swap;
148 }
149
151 if (maxY <= bounds.fTop || minY >=
bounds.fBottom) {
152 return false;
153 }
154
155
156
157
158
161 }
162 if (maxY >
bounds.fBottom) {
164 }
165
167 if (dy < 0) {
168 using std::swap;
170 }
173 }
174
175 return true;
176}
static SkM44 inv(const SkM44 &m)
static void outset_for_stroke(SkRect *rect, const SkStrokeRec &rec)
#define SkScalarMod(x, y)
bool invert(SkMatrix *inverse) const
bool rectStaysRect() const
Optional< SkRect > bounds
skia_private::AutoTArray< sk_sp< SkImageFilter > > filters TypedMatrix matrix TypedMatrix matrix SkScalar dx
static void swap(TArray< T, M > &a, TArray< T, M > &b)
constexpr float y() const
constexpr float x() const