Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 66 additions & 29 deletions lib/ui/compositing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -280,12 +280,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
}) {
assert(_matrix4IsValid(matrix4));
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushTransform'));
final TransformEngineLayer layer = TransformEngineLayer._(_pushTransform(matrix4));
final EngineLayer engineLayer = EngineLayer._();
_pushTransform(engineLayer, matrix4);
final TransformEngineLayer layer = TransformEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushTransform(Float64List matrix4) native 'SceneBuilder_pushTransform';
void _pushTransform(EngineLayer layer, Float64List matrix4) native 'SceneBuilder_pushTransform';
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we adopt a convention to indicate that these are output parameters of the native method? (e.g. prefixing these parameter names with out_?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about just out iwthout the underscore? Snake case looks weird in Dart.

But that sounds fine to me.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

out with no underscore SGTM


/// Pushes an offset operation onto the operation stack.
///
Expand All @@ -302,12 +304,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
OffsetEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushOffset'));
final OffsetEngineLayer layer = OffsetEngineLayer._(_pushOffset(dx, dy));
final EngineLayer engineLayer = EngineLayer._();
_pushOffset(engineLayer, dx, dy);
final OffsetEngineLayer layer = OffsetEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushOffset(double dx, double dy) native 'SceneBuilder_pushOffset';
void _pushOffset(EngineLayer layer, double dx, double dy) native 'SceneBuilder_pushOffset';

/// Pushes a rectangular clip operation onto the operation stack.
///
Expand All @@ -327,13 +331,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(clipBehavior != null);
assert(clipBehavior != Clip.none);
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipRect'));
final ClipRectEngineLayer layer = ClipRectEngineLayer._(
_pushClipRect(rect.left, rect.right, rect.top, rect.bottom, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushClipRect(engineLayer, rect.left, rect.right, rect.top, rect.bottom, clipBehavior.index);
final ClipRectEngineLayer layer = ClipRectEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushClipRect(double left, double right, double top, double bottom, int clipBehavior)
void _pushClipRect(EngineLayer outEngineLayer, double left, double right, double top, double bottom, int clipBehavior)
native 'SceneBuilder_pushClipRect';

/// Pushes a rounded-rectangular clip operation onto the operation stack.
Expand All @@ -354,13 +359,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(clipBehavior != null);
assert(clipBehavior != Clip.none);
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipRRect'));
final ClipRRectEngineLayer layer =
ClipRRectEngineLayer._(_pushClipRRect(rrect._value32, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushClipRRect(engineLayer, rrect._value32, clipBehavior.index);
final ClipRRectEngineLayer layer = ClipRRectEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushClipRRect(Float32List rrect, int clipBehavior)
void _pushClipRRect(EngineLayer layer, Float32List rrect, int clipBehavior)
native 'SceneBuilder_pushClipRRect';

/// Pushes a path clip operation onto the operation stack.
Expand All @@ -381,13 +387,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(clipBehavior != null);
assert(clipBehavior != Clip.none);
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushClipPath'));
final ClipPathEngineLayer layer =
ClipPathEngineLayer._(_pushClipPath(path, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushClipPath(engineLayer, path, clipBehavior.index);
final ClipPathEngineLayer layer = ClipPathEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushClipPath(Path path, int clipBehavior) native 'SceneBuilder_pushClipPath';
void _pushClipPath(EngineLayer layer, Path path, int clipBehavior) native 'SceneBuilder_pushClipPath';

/// Pushes an opacity operation onto the operation stack.
///
Expand All @@ -407,13 +414,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
OpacityEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushOpacity'));
final OpacityEngineLayer layer =
OpacityEngineLayer._(_pushOpacity(alpha, offset.dx, offset.dy));
final EngineLayer engineLayer = EngineLayer._();
_pushOpacity(engineLayer, alpha, offset.dx, offset.dy);
final OpacityEngineLayer layer = OpacityEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushOpacity(int alpha, double dx, double dy) native 'SceneBuilder_pushOpacity';
void _pushOpacity(EngineLayer layer, int alpha, double dx, double dy) native 'SceneBuilder_pushOpacity';

/// Pushes a color filter operation onto the operation stack.
///
Expand All @@ -433,12 +441,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushColorFilter'));
final _ColorFilter nativeFilter = filter._toNativeColorFilter();
assert(nativeFilter != null);
final ColorFilterEngineLayer layer = ColorFilterEngineLayer._(_pushColorFilter(nativeFilter));
final EngineLayer engineLayer = EngineLayer._();
_pushColorFilter(engineLayer, nativeFilter);
final ColorFilterEngineLayer layer = ColorFilterEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushColorFilter(_ColorFilter filter) native 'SceneBuilder_pushColorFilter';
void _pushColorFilter(EngineLayer layer, _ColorFilter filter) native 'SceneBuilder_pushColorFilter';

/// Pushes an image filter operation onto the operation stack.
///
Expand All @@ -458,12 +468,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushImageFilter'));
final _ImageFilter nativeFilter = filter._toNativeImageFilter();
assert(nativeFilter != null);
final ImageFilterEngineLayer layer = ImageFilterEngineLayer._(_pushImageFilter(nativeFilter));
final EngineLayer engineLayer = EngineLayer._();
_pushImageFilter(engineLayer, nativeFilter);
final ImageFilterEngineLayer layer = ImageFilterEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushImageFilter(_ImageFilter filter) native 'SceneBuilder_pushImageFilter';
void _pushImageFilter(EngineLayer outEngineLayer, _ImageFilter filter) native 'SceneBuilder_pushImageFilter';

/// Pushes a backdrop filter operation onto the operation stack.
///
Expand All @@ -480,13 +492,14 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
BackdropFilterEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushBackdropFilter'));
final BackdropFilterEngineLayer layer =
BackdropFilterEngineLayer._(_pushBackdropFilter(filter._toNativeImageFilter()));
final EngineLayer engineLayer = EngineLayer._();
_pushBackdropFilter(engineLayer, filter._toNativeImageFilter());
final BackdropFilterEngineLayer layer = BackdropFilterEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushBackdropFilter(_ImageFilter filter) native 'SceneBuilder_pushBackdropFilter';
void _pushBackdropFilter(EngineLayer outEngineLayer, _ImageFilter filter) native 'SceneBuilder_pushBackdropFilter';

/// Pushes a shader mask operation onto the operation stack.
///
Expand All @@ -505,13 +518,23 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
ShaderMaskEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushShaderMask'));
final ShaderMaskEngineLayer layer = ShaderMaskEngineLayer._(_pushShaderMask(
shader, maskRect.left, maskRect.right, maskRect.top, maskRect.bottom, blendMode.index));
final EngineLayer engineLayer = EngineLayer._();
_pushShaderMask(
engineLayer,
shader,
maskRect.left,
maskRect.right,
maskRect.top,
maskRect.bottom,
blendMode.index,
);
final ShaderMaskEngineLayer layer = ShaderMaskEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushShaderMask(
EngineLayer engineLayer,
Shader shader,
double maskRectLeft,
double maskRectRight,
Expand Down Expand Up @@ -545,13 +568,21 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
PhysicalShapeEngineLayer oldLayer,
}) {
assert(_debugCheckCanBeUsedAsOldLayer(oldLayer, 'pushPhysicalShape'));
final PhysicalShapeEngineLayer layer = PhysicalShapeEngineLayer._(_pushPhysicalShape(
path, elevation, color.value, shadowColor?.value ?? 0xFF000000, clipBehavior.index));
final EngineLayer engineLayer = EngineLayer._();
_pushPhysicalShape(
engineLayer,
path,
elevation,
color.value,
shadowColor?.value ?? 0xFF000000,
clipBehavior.index,
);
final PhysicalShapeEngineLayer layer = PhysicalShapeEngineLayer._(engineLayer);
assert(_debugPushLayer(layer));
return layer;
}

EngineLayer _pushPhysicalShape(Path path, double elevation, int color, int shadowColor,
EngineLayer _pushPhysicalShape(EngineLayer outEngineLayer, Path path, double elevation, int color, int shadowColor,
int clipBehavior) native 'SceneBuilder_pushPhysicalShape';

/// Ends the effect of the most recently pushed operation.
Expand Down Expand Up @@ -769,7 +800,13 @@ class SceneBuilder extends NativeFieldWrapperClass2 {
///
/// After calling this function, the scene builder object is invalid and
/// cannot be used further.
Scene build() native 'SceneBuilder_build';
Scene build() {
final Scene scene = Scene._();
_build(scene);
return scene;
}

void _build(Scene outScene) native 'SceneBuilder_build';
}

/// (Fuchsia-only) Hosts content provided by another application.
Expand Down
12 changes: 7 additions & 5 deletions lib/ui/compositing/scene.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, Scene);

DART_BIND_ALL(Scene, FOR_EACH_BINDING)

fml::RefPtr<Scene> Scene::create(std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers) {
return fml::MakeRefCounted<Scene>(
void Scene::create(Dart_Handle scene_handle,
std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers) {
auto scene = fml::MakeRefCounted<Scene>(
std::move(rootLayer), rasterizerTracingThreshold,
checkerboardRasterCacheImages, checkerboardOffscreenLayers);
scene->ClaimDartHandle(scene_handle);
}

Scene::Scene(std::shared_ptr<flutter::Layer> rootLayer,
Expand Down
9 changes: 5 additions & 4 deletions lib/ui/compositing/scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ class Scene : public RefCountedDartWrappable<Scene> {

public:
~Scene() override;
static fml::RefPtr<Scene> create(std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers);
static void create(Dart_Handle scene_handle,
std::shared_ptr<flutter::Layer> rootLayer,
uint32_t rasterizerTracingThreshold,
bool checkerboardRasterCacheImages,
bool checkerboardOffscreenLayers);

std::unique_ptr<flutter::LayerTree> takeLayerTree();

Expand Down
Loading