Flutter Impeller
dl_builder.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
6 
8 
9 namespace impeller::interop {
10 
12  : builder_(rect) {}
13 
15 
17  builder_.Save();
18 }
19 
21  const Paint* paint,
22  const ImageFilter* backdrop) {
23  builder_.SaveLayer(
24  bounds, //
25  paint == nullptr ? nullptr : &paint->GetPaint(), //
26  backdrop == nullptr ? nullptr : backdrop->GetImageFilter().get());
27 }
28 
30  builder_.Restore();
31 }
32 
34  builder_.Scale(scale.width, scale.height);
35 }
36 
38  builder_.Rotate(angle.degrees);
39 }
40 
42  builder_.Translate(translation.x, translation.y);
43 }
44 
46  return builder_.GetMatrix();
47 }
48 
50  builder_.SetTransform(matrix);
51 }
52 
54  builder_.Transform(matrix);
55 }
56 
58  builder_.TransformReset();
59 }
60 
62  return builder_.GetSaveCount();
63 }
64 
65 void DisplayListBuilder::RestoreToCount(uint32_t count) {
66  builder_.RestoreToCount(count);
67 }
68 
69 void DisplayListBuilder::ClipRect(const Rect& rect, flutter::DlClipOp op) {
70  builder_.ClipRect(rect, op);
71 }
72 
73 void DisplayListBuilder::ClipOval(const Rect& rect, flutter::DlClipOp op) {
74  builder_.ClipOval(rect, op);
75 }
76 
78  const RoundingRadii& radii,
79  flutter::DlClipOp op) {
80  builder_.ClipRoundRect(RoundRect::MakeRectRadii(rect, radii), op);
81 }
82 
83 void DisplayListBuilder::ClipPath(const Path& path, flutter::DlClipOp op) {
84  builder_.ClipPath(flutter::DlPath(path.GetPath()), op);
85 }
86 
87 void DisplayListBuilder::DrawRect(const Rect& rect, const Paint& paint) {
88  builder_.DrawRect(rect, paint.GetPaint());
89 }
90 
91 void DisplayListBuilder::DrawOval(const Rect& oval_bounds, const Paint& paint) {
92  builder_.DrawOval(oval_bounds, paint.GetPaint());
93 }
94 
96  const RoundingRadii& radii,
97  const Paint& paint) {
98  builder_.DrawRoundRect(RoundRect::MakeRectRadii(rect, radii),
99  paint.GetPaint());
100 }
101 
103  const Rect& outer_rect,
104  const RoundingRadii& outer_radii,
105  const Rect& inner_rect,
106  const RoundingRadii& inner_radii,
107  const Paint& paint) {
108  builder_.DrawDiffRoundRect(
109  RoundRect::MakeRectRadii(outer_rect, outer_radii), //
110  RoundRect::MakeRectRadii(inner_rect, inner_radii), //
111  paint.GetPaint() //
112  );
113 }
114 
115 void DisplayListBuilder::DrawPath(const Path& path, const Paint& paint) {
116  builder_.DrawPath(flutter::DlPath(path.GetPath()), paint.GetPaint());
117 }
118 
120  builder_.DrawPaint(paint.GetPaint());
121 }
122 
124  const Point& to,
125  const Paint& paint) {
126  builder_.DrawLine(from, to, paint.GetPaint());
127 }
128 
130  const Point& to,
131  Scalar on_length,
132  Scalar off_length,
133  const Paint& paint) {
134  builder_.DrawDashedLine(from, //
135  to, //
136  on_length, //
137  off_length, //
138  paint.GetPaint() //
139  );
140 }
141 
143  return Create<DisplayList>(builder_.Build());
144 }
145 
147  Scalar opacity) {
148  builder_.DrawDisplayList(dl.GetDisplayList(), opacity);
149 }
150 
152  const Point& point,
153  flutter::DlImageSampling sampling,
154  const Paint* paint) {
155  builder_.DrawImage(texture.MakeImage(), //
156  point, //
157  sampling, //
158  paint == nullptr ? nullptr : &paint->GetPaint() //
159  );
160 }
161 
163  const Rect& src_rect,
164  const Rect& dst_rect,
165  flutter::DlImageSampling sampling,
166  const Paint* paint) {
167  builder_.DrawImageRect(texture.MakeImage(), //
168  src_rect, //
169  dst_rect, //
170  sampling, //
171  paint == nullptr ? nullptr : &paint->GetPaint() //
172  );
173 }
174 
176  Point point) {
177  const auto& handle = paragraph.GetHandle();
178  if (!handle) {
179  return;
180  }
181  handle->Paint(&builder_, point.x, point.y);
182 }
183 
185  const flutter::DlColor& color,
186  float elevation,
187  bool occluder_is_transparent,
188  float device_pixel_ratio) {
189  builder_.DrawShadow(flutter::DlPath(path.GetPath()), // path
190  color, // shadow color
191  elevation, // elevation
192  occluder_is_transparent, // occluder transparency
193  device_pixel_ratio // dpr
194  );
195 }
196 
197 } // namespace impeller::interop
void DrawPaint(const Paint &paint)
Definition: dl_builder.cc:119
void ClipRoundedRect(const Rect &rect, const RoundingRadii &radii, flutter::DlClipOp op)
Definition: dl_builder.cc:77
void DrawLine(const Point &from, const Point &to, const Paint &paint)
Definition: dl_builder.cc:123
void ClipOval(const Rect &rect, flutter::DlClipOp op)
Definition: dl_builder.cc:73
void RestoreToCount(uint32_t count)
Definition: dl_builder.cc:65
void DrawShadow(const Path &path, const flutter::DlColor &color, float elevation, bool occluder_is_transparent, float device_pixel_ratio)
Definition: dl_builder.cc:184
DisplayListBuilder(const ImpellerRect *rect)
Definition: dl_builder.cc:11
void DrawTexture(const Texture &texture, const Point &point, flutter::DlImageSampling sampling, const Paint *paint)
Definition: dl_builder.cc:151
void DrawPath(const Path &path, const Paint &paint)
Definition: dl_builder.cc:115
void DrawDashedLine(const Point &from, const Point &to, Scalar on_length, Scalar off_length, const Paint &paint)
Definition: dl_builder.cc:129
void SaveLayer(const Rect &bounds, const Paint *paint, const ImageFilter *backdrop)
Definition: dl_builder.cc:20
void DrawDisplayList(const DisplayList &dl, Scalar opacity)
Definition: dl_builder.cc:146
void DrawRect(const Rect &rect, const Paint &paint)
Definition: dl_builder.cc:87
ScopedObject< DisplayList > Build()
Definition: dl_builder.cc:142
void ClipRect(const Rect &rect, flutter::DlClipOp op)
Definition: dl_builder.cc:69
void DrawParagraph(const Paragraph &paragraph, Point point)
Definition: dl_builder.cc:175
void Translate(Point translation)
Definition: dl_builder.cc:41
void Transform(const Matrix &matrix)
Definition: dl_builder.cc:53
void DrawRoundedRect(const Rect &rect, const RoundingRadii &radii, const Paint &paint)
Definition: dl_builder.cc:95
void DrawTextureRect(const Texture &texture, const Rect &src_rect, const Rect &dst_rect, flutter::DlImageSampling sampling, const Paint *paint)
Definition: dl_builder.cc:162
void ClipPath(const Path &path, flutter::DlClipOp op)
Definition: dl_builder.cc:83
void DrawRoundedRectDifference(const Rect &outer_rect, const RoundingRadii &outer_radii, const Rect &inner_rect, const RoundingRadii &inner_radii, const Paint &paint)
Definition: dl_builder.cc:102
void DrawOval(const Rect &oval_bounds, const Paint &paint)
Definition: dl_builder.cc:91
void SetTransform(const Matrix &matrix)
Definition: dl_builder.cc:49
const sk_sp< flutter::DisplayList > GetDisplayList() const
Definition: dl.cc:18
const std::shared_ptr< flutter::DlImageFilter > & GetImageFilter() const
Definition: image_filter.cc:95
const flutter::DlPaint & GetPaint() const
Definition: paint.cc:13
const std::unique_ptr< txt::Paragraph > & GetHandle() const
Definition: paragraph.cc:46
const SkPath & GetPath() const
Definition: path.cc:13
sk_sp< DlImageImpeller > MakeImage() const
Definition: texture.cc:47
float Scalar
Definition: scalar.h:19
flutter::DlPath DlPath
Definition: dl_dispatcher.h:29
Scalar degrees
Definition: scalar.h:77
A 4x4 matrix using column-major storage.
Definition: matrix.h:37
static RoundRect MakeRectRadii(const Rect &rect, const RoundingRadii &radii)
Definition: round_rect.cc:9
Type height
Definition: size.h:29
Type width
Definition: size.h:28