Flutter Engine
 
Loading...
Searching...
No Matches
flutter::SceneBuilder Class Reference

#include <scene_builder.h>

Inheritance diagram for flutter::SceneBuilder:
flutter::RefCountedDartWrappable< SceneBuilder > fml::RefCountedThreadSafe< T > tonic::DartWrappable fml::internal::RefCountedThreadSafeBase

Public Member Functions

 ~SceneBuilder () override
 
void pushTransformHandle (Dart_Handle layer_handle, Dart_Handle matrix4_handle, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushTransform (Dart_Handle layer_handle, tonic::Float64List &matrix4, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushOffset (Dart_Handle layer_handle, double dx, double dy, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushClipRect (Dart_Handle layer_handle, double left, double right, double top, double bottom, int clip_behavior, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushClipRRect (Dart_Handle layer_handle, const RRect &rrect, int clip_behavior, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushClipRSuperellipse (Dart_Handle layer_handle, const RSuperellipse *rse, int clip_behavior, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushClipPath (Dart_Handle layer_handle, const CanvasPath *path, int clip_behavior, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushOpacity (Dart_Handle layer_handle, int alpha, double dx, double dy, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushColorFilter (Dart_Handle layer_handle, const ColorFilter *color_filter, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushImageFilter (Dart_Handle layer_handle, const ImageFilter *image_filter, double dx, double dy, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushBackdropFilter (Dart_Handle layer_handle, ImageFilter *filter, int blend_mode, Dart_Handle backdrop_id, const fml::RefPtr< EngineLayer > &old_layer)
 
void pushShaderMask (Dart_Handle layer_handle, Shader *shader, double mask_rect_left, double mask_rect_right, double mask_rect_top, double mask_rect_bottom, int blend_mode, int filter_quality_index, const fml::RefPtr< EngineLayer > &old_layer)
 
void addRetained (const fml::RefPtr< EngineLayer > &retained_layer)
 
void pop ()
 
void addPerformanceOverlay (uint64_t enabled_options, double left, double right, double top, double bottom)
 
void addPicture (double dx, double dy, Picture *picture, int hints)
 
void addTexture (double dx, double dy, double width, double height, int64_t texture_id, bool freeze, int filter_quality)
 
void addPlatformView (double dx, double dy, double width, double height, int64_t view_id)
 
void build (Dart_Handle scene_handle)
 
const std::vector< std::shared_ptr< ContainerLayer > > & layer_stack ()
 
- Public Member Functions inherited from flutter::RefCountedDartWrappable< SceneBuilder >
virtual void RetainDartWrappableReference () const override
 
virtual void ReleaseDartWrappableReference () const override
 
- Public Member Functions inherited from fml::RefCountedThreadSafe< T >
void Release () const
 
- Public Member Functions inherited from fml::internal::RefCountedThreadSafeBase
void AddRef () const
 
bool HasOneRef () const
 
void AssertHasOneRef () const
 
- Public Member Functions inherited from tonic::DartWrappable
 DartWrappable ()
 
virtual const DartWrapperInfoGetDartWrapperInfo () const =0
 
Dart_Handle CreateDartWrapper (DartState *dart_state)
 
void AssociateWithDartWrapper (Dart_Handle wrappable)
 
void ClearDartWrapper ()
 
Dart_WeakPersistentHandle dart_wrapper () const
 

Static Public Member Functions

static void Create (Dart_Handle wrapper)
 

Additional Inherited Members

- Public Types inherited from tonic::DartWrappable
enum  DartNativeFields {
  kPeerIndex ,
  kNumberOfNativeFields
}
 
- Protected Member Functions inherited from fml::RefCountedThreadSafe< T >
 RefCountedThreadSafe ()
 
 ~RefCountedThreadSafe ()
 
- Protected Member Functions inherited from fml::internal::RefCountedThreadSafeBase
 RefCountedThreadSafeBase ()
 
 ~RefCountedThreadSafeBase ()
 
bool Release () const
 
void Adopt ()
 
- Protected Member Functions inherited from tonic::DartWrappable
virtual ~DartWrappable ()
 
- Static Protected Member Functions inherited from tonic::DartWrappable
static Dart_PersistentHandle GetTypeForWrapper (tonic::DartState *dart_state, const tonic::DartWrapperInfo &wrapper_info)
 

Detailed Description

Definition at line 26 of file scene_builder.h.

Constructor & Destructor Documentation

◆ ~SceneBuilder()

flutter::SceneBuilder::~SceneBuilder ( )
overridedefault

Member Function Documentation

◆ addPerformanceOverlay()

void flutter::SceneBuilder::addPerformanceOverlay ( uint64_t  enabled_options,
double  left,
double  right,
double  top,
double  bottom 
)

Definition at line 281 of file scene_builder.cc.

285 {
286 DlRect rect = DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top),
287 SafeNarrow(right), SafeNarrow(bottom));
288 auto layer =
289 std::make_unique<flutter::PerformanceOverlayLayer>(enabled_options);
290 layer->set_paint_bounds(rect);
291 AddLayer(std::move(layer));
292}
impeller::Rect DlRect
static float SafeNarrow(double value)
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129

References impeller::TRect< Scalar >::MakeLTRB(), and flutter::SafeNarrow().

◆ addPicture()

void flutter::SceneBuilder::addPicture ( double  dx,
double  dy,
Picture picture,
int  hints 
)

Definition at line 236 of file scene_builder.cc.

239 {
240 if (!picture) {
241 // Picture::dispose was called and it has been collected.
242 return;
243 }
244
245 // Explicitly check for display_list, since the picture object might have
246 // been disposed but not collected yet, but the display list is null.
247 if (picture->display_list()) {
248 auto layer = std::make_unique<flutter::DisplayListLayer>(
249 DlPoint(SafeNarrow(dx), SafeNarrow(dy)), picture->display_list(),
250 !!(hints & 1), !!(hints & 2));
251 AddLayer(std::move(layer));
252 }
253}
impeller::Point DlPoint

References flutter::Picture::display_list(), and flutter::SafeNarrow().

◆ addPlatformView()

void flutter::SceneBuilder::addPlatformView ( double  dx,
double  dy,
double  width,
double  height,
int64_t  view_id 
)

Definition at line 270 of file scene_builder.cc.

274 {
275 auto layer = std::make_unique<flutter::PlatformViewLayer>(
276 DlPoint(SafeNarrow(dx), SafeNarrow(dy)),
278 AddLayer(std::move(layer));
279}
G_BEGIN_DECLS FlutterViewId view_id
impeller::Size DlSize
int32_t height
int32_t width

References height, flutter::SafeNarrow(), view_id, and width.

◆ addRetained()

void flutter::SceneBuilder::addRetained ( const fml::RefPtr< EngineLayer > &  retained_layer)

Definition at line 228 of file scene_builder.cc.

228 {
229 AddLayer(retained_layer->Layer());
230}

◆ addTexture()

void flutter::SceneBuilder::addTexture ( double  dx,
double  dy,
double  width,
double  height,
int64_t  texture_id,
bool  freeze,
int  filter_quality 
)

Definition at line 255 of file scene_builder.cc.

261 {
262 auto sampling = ImageFilter::SamplingFromIndex(filter_quality_index);
263 auto layer = std::make_unique<flutter::TextureLayer>(
264 DlPoint(SafeNarrow(dx), SafeNarrow(dy)),
266 sampling);
267 AddLayer(std::move(layer));
268}
static DlImageSampling SamplingFromIndex(int filterQualityIndex)
int64_t texture_id

References height, flutter::SafeNarrow(), flutter::ImageFilter::SamplingFromIndex(), texture_id, and width.

◆ build()

void flutter::SceneBuilder::build ( Dart_Handle  scene_handle)

Definition at line 294 of file scene_builder.cc.

294 {
295 FML_DCHECK(layer_stack_.size() >= 1);
296
297 Scene::create(scene_handle, std::move(layer_stack_[0]));
298 layer_stack_.clear();
299 ClearDartWrapper(); // may delete this object.
300}
static void create(Dart_Handle scene_handle, std::shared_ptr< flutter::Layer > rootLayer)
Definition scene.cc:27
#define FML_DCHECK(condition)
Definition logging.h:122

References tonic::DartWrappable::ClearDartWrapper(), flutter::Scene::create(), and FML_DCHECK.

◆ Create()

static void flutter::SceneBuilder::Create ( Dart_Handle  wrapper)
inlinestatic

Definition at line 31 of file scene_builder.h.

31 {
33 auto res = fml::MakeRefCounted<SceneBuilder>();
34 res->AssociateWithDartWrapper(wrapper);
35 }
static void ThrowIfUIOperationsProhibited()

References flutter::UIDartState::ThrowIfUIOperationsProhibited().

◆ layer_stack()

const std::vector< std::shared_ptr< ContainerLayer > > & flutter::SceneBuilder::layer_stack ( )
inline

Definition at line 127 of file scene_builder.h.

127 {
128 return layer_stack_;
129 }

Referenced by flutter::TEST_F(), flutter::testing::TEST_F(), and flutter::testing::TEST_F().

◆ pop()

void flutter::SceneBuilder::pop ( )

Definition at line 232 of file scene_builder.cc.

232 {
233 PopLayer();
234}

◆ pushBackdropFilter()

void flutter::SceneBuilder::pushBackdropFilter ( Dart_Handle  layer_handle,
ImageFilter filter,
int  blend_mode,
Dart_Handle  backdrop_id,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 181 of file scene_builder.cc.

186 {
187 std::optional<int64_t> converted_backdrop_id;
188 if (Dart_IsInteger(backdrop_id)) {
189 int64_t out;
190 Dart_IntegerToInt64(backdrop_id, &out);
191 converted_backdrop_id = out;
192 }
193
194 auto layer = std::make_shared<flutter::BackdropFilterLayer>(
195 filter->filter(DlTileMode::kMirror), static_cast<DlBlendMode>(blend_mode),
196 converted_backdrop_id);
197 PushLayer(layer);
198 EngineLayer::MakeRetained(layer_handle, layer);
199
200 if (old_layer && old_layer->Layer()) {
201 layer->AssignOldLayer(old_layer->Layer().get());
202 }
203}
static void MakeRetained(Dart_Handle dart_handle, const std::shared_ptr< flutter::ContainerLayer > &layer)
T * get() const
Definition ref_ptr.h:117
impeller::BlendMode DlBlendMode

References flutter::ImageFilter::filter(), fml::RefPtr< T >::get(), flutter::kMirror, and flutter::EngineLayer::MakeRetained().

◆ pushClipPath()

void flutter::SceneBuilder::pushClipPath ( Dart_Handle  layer_handle,
const CanvasPath path,
int  clip_behavior,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 120 of file scene_builder.cc.

123 {
124 flutter::Clip flutter_clip_behavior =
125 static_cast<flutter::Clip>(clip_behavior);
126 FML_DCHECK(flutter_clip_behavior != flutter::Clip::kNone);
127 auto layer = std::make_shared<flutter::ClipPathLayer>(
128 path->path(), static_cast<flutter::Clip>(flutter_clip_behavior));
129 PushLayer(layer);
130 EngineLayer::MakeRetained(layer_handle, layer);
131
132 if (old_layer && old_layer->Layer()) {
133 layer->AssignOldLayer(old_layer->Layer().get());
134 }
135}
@ kNone
Definition layer.h:43
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 switch_defs.h:52

References FML_DCHECK, fml::RefPtr< T >::get(), flutter::kNone, flutter::EngineLayer::MakeRetained(), and flutter::path.

◆ pushClipRect()

void flutter::SceneBuilder::pushClipRect ( Dart_Handle  layer_handle,
double  left,
double  right,
double  top,
double  bottom,
int  clip_behavior,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 72 of file scene_builder.cc.

78 {
79 DlRect clip_rect = DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top),
80 SafeNarrow(right), SafeNarrow(bottom));
81 auto layer = std::make_shared<flutter::ClipRectLayer>(
82 clip_rect, static_cast<flutter::Clip>(clip_behavior));
83 PushLayer(layer);
84 EngineLayer::MakeRetained(layer_handle, layer);
85
86 if (old_layer && old_layer->Layer()) {
87 layer->AssignOldLayer(old_layer->Layer().get());
88 }
89}

References fml::RefPtr< T >::get(), impeller::TRect< Scalar >::MakeLTRB(), flutter::EngineLayer::MakeRetained(), and flutter::SafeNarrow().

◆ pushClipRRect()

void flutter::SceneBuilder::pushClipRRect ( Dart_Handle  layer_handle,
const RRect rrect,
int  clip_behavior,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 91 of file scene_builder.cc.

94 {
95 auto layer = std::make_shared<flutter::ClipRRectLayer>(
96 rrect.rrect, static_cast<flutter::Clip>(clip_behavior));
97 PushLayer(layer);
98 EngineLayer::MakeRetained(layer_handle, layer);
99
100 if (old_layer && old_layer->Layer()) {
101 layer->AssignOldLayer(old_layer->Layer().get());
102 }
103}

References fml::RefPtr< T >::get(), flutter::EngineLayer::MakeRetained(), and flutter::RRect::rrect.

◆ pushClipRSuperellipse()

void flutter::SceneBuilder::pushClipRSuperellipse ( Dart_Handle  layer_handle,
const RSuperellipse rse,
int  clip_behavior,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 105 of file scene_builder.cc.

109 {
110 auto layer = std::make_shared<flutter::ClipRSuperellipseLayer>(
111 rse->rsuperellipse(), static_cast<flutter::Clip>(clip_behavior));
112 PushLayer(layer);
113 EngineLayer::MakeRetained(layer_handle, layer);
114
115 if (old_layer && old_layer->Layer()) {
116 layer->AssignOldLayer(old_layer->Layer().get());
117 }
118}

References fml::RefPtr< T >::get(), flutter::EngineLayer::MakeRetained(), and flutter::RSuperellipse::rsuperellipse().

◆ pushColorFilter()

void flutter::SceneBuilder::pushColorFilter ( Dart_Handle  layer_handle,
const ColorFilter color_filter,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 152 of file scene_builder.cc.

154 {
155 auto layer =
156 std::make_shared<flutter::ColorFilterLayer>(color_filter->filter());
157 PushLayer(layer);
158 EngineLayer::MakeRetained(layer_handle, layer);
159
160 if (old_layer && old_layer->Layer()) {
161 layer->AssignOldLayer(old_layer->Layer().get());
162 }
163}

References flutter::ColorFilter::filter(), fml::RefPtr< T >::get(), and flutter::EngineLayer::MakeRetained().

◆ pushImageFilter()

void flutter::SceneBuilder::pushImageFilter ( Dart_Handle  layer_handle,
const ImageFilter image_filter,
double  dx,
double  dy,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 165 of file scene_builder.cc.

169 {
170 auto layer = std::make_shared<flutter::ImageFilterLayer>(
171 image_filter->filter(DlTileMode::kDecal),
172 DlPoint(SafeNarrow(dx), SafeNarrow(dy)));
173 PushLayer(layer);
174 EngineLayer::MakeRetained(layer_handle, layer);
175
176 if (old_layer && old_layer->Layer()) {
177 layer->AssignOldLayer(old_layer->Layer().get());
178 }
179}

References flutter::ImageFilter::filter(), fml::RefPtr< T >::get(), flutter::kDecal, flutter::EngineLayer::MakeRetained(), and flutter::SafeNarrow().

◆ pushOffset()

void flutter::SceneBuilder::pushOffset ( Dart_Handle  layer_handle,
double  dx,
double  dy,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 58 of file scene_builder.cc.

61 {
63 auto layer = std::make_shared<flutter::TransformLayer>(matrix);
64 PushLayer(layer);
65 EngineLayer::MakeRetained(layer_handle, layer);
66
67 if (old_layer && old_layer->Layer()) {
68 layer->AssignOldLayer(old_layer->Layer().get());
69 }
70}
impeller::Matrix DlMatrix
static constexpr Matrix MakeTranslation(const Vector3 &t)
Definition matrix.h:95

References fml::RefPtr< T >::get(), flutter::EngineLayer::MakeRetained(), impeller::Matrix::MakeTranslation(), and flutter::SafeNarrow().

◆ pushOpacity()

void flutter::SceneBuilder::pushOpacity ( Dart_Handle  layer_handle,
int  alpha,
double  dx,
double  dy,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 137 of file scene_builder.cc.

141 {
142 auto layer = std::make_shared<flutter::OpacityLayer>(
143 alpha, DlPoint(SafeNarrow(dx), SafeNarrow(dy)));
144 PushLayer(layer);
145 EngineLayer::MakeRetained(layer_handle, layer);
146
147 if (old_layer && old_layer->Layer()) {
148 layer->AssignOldLayer(old_layer->Layer().get());
149 }
150}

References fml::RefPtr< T >::get(), flutter::EngineLayer::MakeRetained(), and flutter::SafeNarrow().

◆ pushShaderMask()

void flutter::SceneBuilder::pushShaderMask ( Dart_Handle  layer_handle,
Shader shader,
double  mask_rect_left,
double  mask_rect_right,
double  mask_rect_top,
double  mask_rect_bottom,
int  blend_mode,
int  filter_quality_index,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 205 of file scene_builder.cc.

213 {
215 SafeNarrow(mask_rect_left), SafeNarrow(mask_rect_top),
216 SafeNarrow(mask_rect_right), SafeNarrow(mask_rect_bottom));
217 auto sampling = ImageFilter::SamplingFromIndex(filter_quality_index);
218 auto layer = std::make_shared<flutter::ShaderMaskLayer>(
219 shader->shader(sampling), rect, static_cast<DlBlendMode>(blend_mode));
220 PushLayer(layer);
221 EngineLayer::MakeRetained(layer_handle, layer);
222
223 if (old_layer && old_layer->Layer()) {
224 layer->AssignOldLayer(old_layer->Layer().get());
225 }
226}

References fml::RefPtr< T >::get(), impeller::TRect< Scalar >::MakeLTRB(), flutter::EngineLayer::MakeRetained(), flutter::SafeNarrow(), flutter::ImageFilter::SamplingFromIndex(), and flutter::Shader::shader().

◆ pushTransform()

void flutter::SceneBuilder::pushTransform ( Dart_Handle  layer_handle,
tonic::Float64List &  matrix4,
const fml::RefPtr< EngineLayer > &  old_layer 
)

Definition at line 43 of file scene_builder.cc.

45 {
46 DlMatrix matrix = ToDlMatrix(matrix4);
47 auto layer = std::make_shared<flutter::TransformLayer>(matrix);
48 PushLayer(layer);
49 // matrix4 has to be released before we can return another Dart object
50 matrix4.Release();
51 EngineLayer::MakeRetained(layer_handle, layer);
52
53 if (old_layer && old_layer->Layer()) {
54 layer->AssignOldLayer(old_layer->Layer().get());
55 }
56}
DlMatrix ToDlMatrix(const SkMatrix &matrix)

References fml::RefPtr< T >::get(), flutter::EngineLayer::MakeRetained(), and flutter::ToDlMatrix().

Referenced by pushTransformHandle().

◆ pushTransformHandle()

void flutter::SceneBuilder::pushTransformHandle ( Dart_Handle  layer_handle,
Dart_Handle  matrix4_handle,
const fml::RefPtr< EngineLayer > &  old_layer 
)
inline

Definition at line 39 of file scene_builder.h.

41 {
42 tonic::Float64List matrix4(matrix4_handle);
43 pushTransform(layer_handle, matrix4, old_layer);
44 }
void pushTransform(Dart_Handle layer_handle, tonic::Float64List &matrix4, const fml::RefPtr< EngineLayer > &old_layer)

References pushTransform().


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