Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Friends | List of all members
flutter::DisplayListMatrixClipState Class Reference

#include <dl_matrix_clip_tracker.h>

Public Member Functions

 DisplayListMatrixClipState (const DlRect &cull_rect, const DlMatrix &matrix)
 
 DisplayListMatrixClipState (const SkRect &cull_rect, const SkMatrix &matrix)
 
 DisplayListMatrixClipState (const SkRect &cull_rect, const SkM44 &matrix)
 
 DisplayListMatrixClipState (const DisplayListMatrixClipState &other)=default
 
void resetDeviceCullRect (const DlRect &cull_rect)
 
void resetDeviceCullRect (const SkRect &cull_rect)
 
void resetLocalCullRect (const DlRect &cull_rect)
 
void resetLocalCullRect (const SkRect &cull_rect)
 
bool using_4x4_matrix () const
 
bool is_matrix_invertable () const
 
bool has_perspective () const
 
const DlMatrixmatrix () const
 
SkM44 matrix_4x4 () const
 
SkMatrix matrix_3x3 () const
 
SkRect local_cull_rect () const
 
SkRect device_cull_rect () const
 
bool content_culled (const DlRect &content_bounds) const
 
bool content_culled (const SkRect &content_bounds) const
 
bool is_cull_rect_empty () const
 
void translate (SkScalar tx, SkScalar ty)
 
void scale (SkScalar sx, SkScalar sy)
 
void skew (SkScalar skx, SkScalar sky)
 
void rotate (SkScalar degrees)
 
void transform (const DlMatrix &matrix)
 
void transform (const SkM44 &m44)
 
void transform (const SkMatrix &matrix)
 
void transform2DAffine (SkScalar mxx, SkScalar mxy, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myt)
 
void transformFullPerspective (SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt, SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt, SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt)
 
void setTransform (const DlMatrix &matrix)
 
void setTransform (const SkMatrix &matrix)
 
void setTransform (const SkM44 &m44)
 
void setIdentity ()
 
bool inverseTransform (const DisplayListMatrixClipState &other_tracker)
 
bool mapRect (DlRect *rect) const
 
bool mapRect (const DlRect &src, DlRect *mapped) const
 
bool mapRect (SkRect *rect) const
 
bool mapRect (const SkRect &src, SkRect *mapped) const
 
void clipRect (const DlRect &rect, ClipOp op, bool is_aa)
 
void clipRect (const SkRect &rect, ClipOp op, bool is_aa)
 
void clipRRect (const SkRRect &rrect, ClipOp op, bool is_aa)
 
void clipPath (const SkPath &path, ClipOp op, bool is_aa)
 

Friends

class DisplayListMatrixClipTracker
 

Detailed Description

Definition at line 24 of file dl_matrix_clip_tracker.h.

Constructor & Destructor Documentation

◆ DisplayListMatrixClipState() [1/4]

flutter::DisplayListMatrixClipState::DisplayListMatrixClipState ( const DlRect cull_rect,
const DlMatrix matrix 
)

Definition at line 21 of file dl_matrix_clip_tracker.cc.

23 : cull_rect_(cull_rect), matrix_(matrix) {}

◆ DisplayListMatrixClipState() [2/4]

flutter::DisplayListMatrixClipState::DisplayListMatrixClipState ( const SkRect cull_rect,
const SkMatrix matrix 
)

Definition at line 25 of file dl_matrix_clip_tracker.cc.

27 : cull_rect_(ToDlRect(cull_rect)), matrix_(ToDlMatrix(matrix)) {}

◆ DisplayListMatrixClipState() [3/4]

flutter::DisplayListMatrixClipState::DisplayListMatrixClipState ( const SkRect cull_rect,
const SkM44 matrix 
)

Definition at line 29 of file dl_matrix_clip_tracker.cc.

31 : cull_rect_(ToDlRect(cull_rect)), matrix_(ToDlMatrix(matrix)) {}

◆ DisplayListMatrixClipState() [4/4]

flutter::DisplayListMatrixClipState::DisplayListMatrixClipState ( const DisplayListMatrixClipState other)
default

Member Function Documentation

◆ clipPath()

void flutter::DisplayListMatrixClipState::clipPath ( const SkPath path,
ClipOp  op,
bool  is_aa 
)

Definition at line 124 of file dl_matrix_clip_tracker.cc.

126 {
127 // Map "kDifference of inverse path" to "kIntersect of the original path" and
128 // map "kIntersect of inverse path" to "kDifference of the original path"
129 if (path.isInverseFillType()) {
130 switch (op) {
131 case ClipOp::kIntersect:
132 op = ClipOp::kDifference;
133 break;
134 case ClipOp::kDifference:
135 op = ClipOp::kIntersect;
136 break;
137 }
138 }
139
141 switch (op) {
142 case ClipOp::kIntersect:
143 bounds = path.getBounds();
144 break;
145 case ClipOp::kDifference:
146 if (!path.isRect(&bounds)) {
147 return;
148 }
149 break;
150 }
151 adjustCullRect(ToDlRect(bounds), op, is_aa);
152}
Optional< SkRect > bounds
Definition SkRecords.h:189
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switches.h:57

◆ clipRect() [1/2]

void flutter::DisplayListMatrixClipState::clipRect ( const DlRect rect,
ClipOp  op,
bool  is_aa 
)

Definition at line 102 of file dl_matrix_clip_tracker.cc.

104 {
105 adjustCullRect(rect, op, is_aa);
106}

◆ clipRect() [2/2]

void flutter::DisplayListMatrixClipState::clipRect ( const SkRect rect,
ClipOp  op,
bool  is_aa 
)
inline

Definition at line 169 of file dl_matrix_clip_tracker.h.

169 {
170 clipRect(ToDlRect(rect), op, is_aa);
171 }
void clipRect(const DlRect &rect, ClipOp op, bool is_aa)

◆ clipRRect()

void flutter::DisplayListMatrixClipState::clipRRect ( const SkRRect rrect,
ClipOp  op,
bool  is_aa 
)

Definition at line 108 of file dl_matrix_clip_tracker.cc.

110 {
112 switch (op) {
113 case ClipOp::kIntersect:
114 break;
115 case ClipOp::kDifference:
116 if (!rrect.isRect()) {
117 return;
118 }
119 break;
120 }
121 adjustCullRect(ToDlRect(bounds), op, is_aa);
122}
bool isRect() const
Definition SkRRect.h:84
const SkRect & getBounds() const
Definition SkRRect.h:279
SkRRect rrect
Definition SkRecords.h:232

◆ content_culled() [1/2]

bool flutter::DisplayListMatrixClipState::content_culled ( const DlRect content_bounds) const

Definition at line 154 of file dl_matrix_clip_tracker.cc.

155 {
156 if (cull_rect_.IsEmpty() || content_bounds.IsEmpty()) {
157 return true;
158 }
159 if (!is_matrix_invertable()) {
160 return true;
161 }
162 if (has_perspective()) {
163 return false;
164 }
165 DlRect mapped;
166 mapRect(content_bounds, &mapped);
167 return !mapped.IntersectsWithRect(cull_rect_);
168}
constexpr bool IsEmpty() const
Returns true if either of the width or height are 0, negative, or NaN.
Definition rect.h:264

◆ content_culled() [2/2]

bool flutter::DisplayListMatrixClipState::content_culled ( const SkRect content_bounds) const
inline

Definition at line 104 of file dl_matrix_clip_tracker.h.

104 {
105 return content_culled(ToDlRect(content_bounds));
106 }
bool content_culled(const DlRect &content_bounds) const

◆ device_cull_rect()

SkRect flutter::DisplayListMatrixClipState::device_cull_rect ( ) const
inline

Definition at line 101 of file dl_matrix_clip_tracker.h.

101{ return ToSkRect(cull_rect_); }

◆ has_perspective()

bool flutter::DisplayListMatrixClipState::has_perspective ( ) const
inline

Definition at line 94 of file dl_matrix_clip_tracker.h.

94{ return matrix_.HasPerspective(); }
constexpr bool HasPerspective() const
Definition matrix.h:330

◆ inverseTransform()

bool flutter::DisplayListMatrixClipState::inverseTransform ( const DisplayListMatrixClipState other_tracker)

Definition at line 93 of file dl_matrix_clip_tracker.cc.

94 {
95 if (tracker.is_matrix_invertable()) {
96 matrix_ = matrix_ * tracker.matrix_.Invert();
97 return true;
98 }
99 return false;
100}
Matrix Invert() const
Definition matrix.cc:97

◆ is_cull_rect_empty()

bool flutter::DisplayListMatrixClipState::is_cull_rect_empty ( ) const
inline

Definition at line 107 of file dl_matrix_clip_tracker.h.

107{ return cull_rect_.IsEmpty(); }

◆ is_matrix_invertable()

bool flutter::DisplayListMatrixClipState::is_matrix_invertable ( ) const
inline

Definition at line 93 of file dl_matrix_clip_tracker.h.

93{ return matrix_.GetDeterminant() != 0.0f; }
Scalar GetDeterminant() const
Definition matrix.cc:162

◆ local_cull_rect()

SkRect flutter::DisplayListMatrixClipState::local_cull_rect ( ) const

Definition at line 233 of file dl_matrix_clip_tracker.cc.

233 {
234 if (cull_rect_.IsEmpty()) {
235 return SkRect::MakeEmpty();
236 }
237 if (!is_matrix_invertable()) {
238 return SkRect::MakeEmpty();
239 }
240 if (matrix_.HasPerspective2D()) {
241 // We could do a 4-point long-form conversion, but since this is
242 // only used for culling, let's just return a non-constricting
243 // cull rect.
245 }
246 DlMatrix inverse = matrix_.Invert();
247 // We eliminated perspective above so we can use the cheaper non-clipping
248 // bounds transform method.
249 return ToSkRect(cull_rect_.TransformBounds(inverse));
250}
static constexpr SkRect kMaxCullRect
Definition dl_builder.h:32
static constexpr SkRect MakeEmpty()
Definition SkRect.h:595
constexpr bool HasPerspective2D() const
Definition matrix.h:326
constexpr TRect TransformBounds(const Matrix &transform) const
Creates a new bounding box that contains this transformed rectangle.
Definition rect.h:440

◆ mapRect() [1/4]

bool flutter::DisplayListMatrixClipState::mapRect ( const DlRect src,
DlRect mapped 
) const
inline

Definition at line 158 of file dl_matrix_clip_tracker.h.

158 {
159 *mapped = src.TransformAndClipBounds(matrix_);
160 return matrix_.IsAligned2D();
161 }
constexpr bool IsAligned2D(Scalar tolerance=0) const
Definition matrix.h:334

◆ mapRect() [2/4]

bool flutter::DisplayListMatrixClipState::mapRect ( const SkRect src,
SkRect mapped 
) const
inline

Definition at line 163 of file dl_matrix_clip_tracker.h.

163 {
164 *mapped = ToSkRect(ToDlRect(src).TransformAndClipBounds(matrix_));
165 return matrix_.IsAligned2D();
166 }

◆ mapRect() [3/4]

bool flutter::DisplayListMatrixClipState::mapRect ( DlRect rect) const
inline

Definition at line 157 of file dl_matrix_clip_tracker.h.

157{ return mapRect(*rect, rect); }

◆ mapRect() [4/4]

bool flutter::DisplayListMatrixClipState::mapRect ( SkRect rect) const
inline

Definition at line 162 of file dl_matrix_clip_tracker.h.

162{ return mapRect(*rect, rect); }

◆ matrix()

const DlMatrix & flutter::DisplayListMatrixClipState::matrix ( ) const
inline

Definition at line 96 of file dl_matrix_clip_tracker.h.

96{ return matrix_; }

◆ matrix_3x3()

SkMatrix flutter::DisplayListMatrixClipState::matrix_3x3 ( ) const
inline

Definition at line 98 of file dl_matrix_clip_tracker.h.

98{ return ToSkMatrix(matrix_); }

◆ matrix_4x4()

SkM44 flutter::DisplayListMatrixClipState::matrix_4x4 ( ) const
inline

Definition at line 97 of file dl_matrix_clip_tracker.h.

97{ return SkM44::ColMajor(matrix_.m); }
static SkM44 ColMajor(const SkScalar c[16])
Definition SkM44.h:218
Scalar m[16]
Definition matrix.h:39

◆ resetDeviceCullRect() [1/2]

void flutter::DisplayListMatrixClipState::resetDeviceCullRect ( const DlRect cull_rect)

Definition at line 170 of file dl_matrix_clip_tracker.cc.

170 {
171 if (cull_rect.IsEmpty()) {
172 cull_rect_ = DlRect();
173 } else {
174 cull_rect_ = cull_rect;
175 }
176}

◆ resetDeviceCullRect() [2/2]

void flutter::DisplayListMatrixClipState::resetDeviceCullRect ( const SkRect cull_rect)
inline

Definition at line 84 of file dl_matrix_clip_tracker.h.

84 {
85 resetDeviceCullRect(ToDlRect(cull_rect));
86 }
void resetDeviceCullRect(const DlRect &cull_rect)

◆ resetLocalCullRect() [1/2]

void flutter::DisplayListMatrixClipState::resetLocalCullRect ( const DlRect cull_rect)

Definition at line 178 of file dl_matrix_clip_tracker.cc.

178 {
179 if (!cull_rect.IsEmpty()) {
180 mapRect(cull_rect, &cull_rect_);
181 if (!cull_rect_.IsEmpty()) {
182 return;
183 }
184 }
185 cull_rect_ = DlRect();
186}

◆ resetLocalCullRect() [2/2]

void flutter::DisplayListMatrixClipState::resetLocalCullRect ( const SkRect cull_rect)
inline

Definition at line 88 of file dl_matrix_clip_tracker.h.

88 {
89 resetLocalCullRect(ToDlRect(cull_rect));
90 }
void resetLocalCullRect(const DlRect &cull_rect)

◆ rotate()

void flutter::DisplayListMatrixClipState::rotate ( SkScalar  degrees)
inline

Definition at line 118 of file dl_matrix_clip_tracker.h.

118 {
119 matrix_ = matrix_ * DlMatrix::MakeRotationZ(DlDegrees(degrees));
120 }
static Matrix MakeRotationZ(Radians r)
Definition matrix.h:213

◆ scale()

void flutter::DisplayListMatrixClipState::scale ( SkScalar  sx,
SkScalar  sy 
)
inline

Definition at line 112 of file dl_matrix_clip_tracker.h.

112 {
113 matrix_ = matrix_.Scale({sx, sy, 1.0f});
114 }
constexpr Matrix Scale(const Vector3 &s) const
Definition matrix.h:252

◆ setIdentity()

void flutter::DisplayListMatrixClipState::setIdentity ( )
inline

Definition at line 151 of file dl_matrix_clip_tracker.h.

151{ matrix_ = DlMatrix(); }

◆ setTransform() [1/3]

void flutter::DisplayListMatrixClipState::setTransform ( const DlMatrix matrix)
inline

Definition at line 148 of file dl_matrix_clip_tracker.h.

148{ matrix_ = matrix; }

◆ setTransform() [2/3]

void flutter::DisplayListMatrixClipState::setTransform ( const SkM44 m44)
inline

Definition at line 150 of file dl_matrix_clip_tracker.h.

150{ matrix_ = ToDlMatrix(m44); }

◆ setTransform() [3/3]

void flutter::DisplayListMatrixClipState::setTransform ( const SkMatrix matrix)
inline

Definition at line 149 of file dl_matrix_clip_tracker.h.

149{ matrix_ = ToDlMatrix(matrix); }

◆ skew()

void flutter::DisplayListMatrixClipState::skew ( SkScalar  skx,
SkScalar  sky 
)
inline

Definition at line 115 of file dl_matrix_clip_tracker.h.

115 {
116 matrix_ = matrix_ * DlMatrix::MakeSkew(skx, sky);
117 }
static constexpr Matrix MakeSkew(Scalar sx, Scalar sy)
Definition matrix.h:117

◆ transform() [1/3]

void flutter::DisplayListMatrixClipState::transform ( const DlMatrix matrix)
inline

Definition at line 121 of file dl_matrix_clip_tracker.h.

121{ matrix_ = matrix_ * matrix; }

◆ transform() [2/3]

void flutter::DisplayListMatrixClipState::transform ( const SkM44 m44)
inline

Definition at line 122 of file dl_matrix_clip_tracker.h.

122{ transform(ToDlMatrix(m44)); }

◆ transform() [3/3]

void flutter::DisplayListMatrixClipState::transform ( const SkMatrix matrix)
inline

Definition at line 123 of file dl_matrix_clip_tracker.h.

123{ transform(ToDlMatrix(matrix)); }

◆ transform2DAffine()

void flutter::DisplayListMatrixClipState::transform2DAffine ( SkScalar  mxx,
SkScalar  mxy,
SkScalar  mxt,
SkScalar  myx,
SkScalar  myy,
SkScalar  myt 
)
inline

Definition at line 125 of file dl_matrix_clip_tracker.h.

127 {
128 matrix_ = matrix_ * DlMatrix::MakeColumn(
129 mxx, myx, 0.0f, 0.0f,
130 mxy, myy, 0.0f, 0.0f,
131 0.0f, 0.0f, 1.0f, 0.0f,
132 mxt, myt, 0.0f, 1.0f
133 );
134 }
static constexpr Matrix MakeColumn(Scalar m0, Scalar m1, Scalar m2, Scalar m3, Scalar m4, Scalar m5, Scalar m6, Scalar m7, Scalar m8, Scalar m9, Scalar m10, Scalar m11, Scalar m12, Scalar m13, Scalar m14, Scalar m15)
Definition matrix.h:69

◆ transformFullPerspective()

void flutter::DisplayListMatrixClipState::transformFullPerspective ( SkScalar  mxx,
SkScalar  mxy,
SkScalar  mxz,
SkScalar  mxt,
SkScalar  myx,
SkScalar  myy,
SkScalar  myz,
SkScalar  myt,
SkScalar  mzx,
SkScalar  mzy,
SkScalar  mzz,
SkScalar  mzt,
SkScalar  mwx,
SkScalar  mwy,
SkScalar  mwz,
SkScalar  mwt 
)
inline

Definition at line 135 of file dl_matrix_clip_tracker.h.

139 {
140 matrix_ = matrix_ * DlMatrix::MakeColumn(
141 mxx, myx, mzx, mwx,
142 mxy, myy, mzy, mwy,
143 mxz, myz, mzz, mwz,
144 mxt, myt, mzt, mwt
145 );
146 }

◆ translate()

void flutter::DisplayListMatrixClipState::translate ( SkScalar  tx,
SkScalar  ty 
)
inline

Definition at line 109 of file dl_matrix_clip_tracker.h.

109 {
110 matrix_ = matrix_.Translate({tx, ty});
111 }
constexpr Matrix Translate(const Vector3 &t) const
Definition matrix.h:240

◆ using_4x4_matrix()

bool flutter::DisplayListMatrixClipState::using_4x4_matrix ( ) const
inline

Definition at line 92 of file dl_matrix_clip_tracker.h.

92{ return !matrix_.IsAffine(); }
constexpr bool IsAffine() const
Definition matrix.h:321

Friends And Related Symbol Documentation

◆ DisplayListMatrixClipTracker

friend class DisplayListMatrixClipTracker
friend

Definition at line 181 of file dl_matrix_clip_tracker.h.


The documentation for this class was generated from the following files: