Skip to content

Commit fc6edf3

Browse files
committed
Implement Group backdropFilter prop
Only supports SkImageFilter objects, not child nodes for now
1 parent 399d86b commit fc6edf3

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

packages/skia/cpp/api/recorder/Paint.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ SkMatrix processTransform(std::optional<SkMatrix> &matrix,
4242

4343
struct SaveLayerProps {
4444
std::optional<SkCanvas::SaveLayerFlags> saveLayerFlags;
45+
std::optional<sk_sp<SkImageFilter>> backdropFilter;
4546
}
4647

4748
class SaveLayerCmd : public Command {
@@ -54,14 +55,17 @@ class SaveLayerCmd : public Command {
5455
: Command(CommandType::SaveLayer) {
5556
convertProperty(runtime, object, "saveLayerFlags", props.saveLayerFlags,
5657
variables);
58+
convertProperty(runtime, object, "backdropFilter", props.backdropFilter,
59+
variables);
5760
}
5861

5962
void saveLayer(DrawingCtx *ctx) {
6063
ctx->materializePaint();
6164
auto paint = ctx->paintDeclarations.back();
6265
ctx->paintDeclarations.pop_back();
6366

64-
SkCanvas::SaveLayerRec layerRec(nullptr, &paint, nullptr,
67+
SkCanvas::SaveLayerRec layerRec(nullptr, &paint,
68+
props.backdropFilter.value_or(nullptr),
6569
props.saveLayerFlags.value_or(0));
6670
ctx->canvas->saveLayer(layerRec);
6771
}

packages/skia/src/renderer/components/Group.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ export interface PublicGroupProps extends Omit<GroupProps, "layer"> {
1010

1111
export const Group = ({
1212
layer,
13+
backdropFilter,
1314
saveLayerFlags,
1415
...props
1516
}: SkiaProps<PublicGroupProps>) => {
1617
if (isValidElement(layer) && typeof layer === "object") {
1718
return (
1819
// keep the saveLayerFlags on whichever node triggers saveLayer
19-
<skLayer saveLayerFlags={saveLayerFlags}>
20+
<skLayer saveLayerFlags={saveLayerFlags} backdropFilter={backdropFilter}>
2021
{layer}
2122
<skGroup {...props} />
2223
</skLayer>
@@ -25,6 +26,7 @@ export const Group = ({
2526
return (
2627
<skGroup
2728
layer={layer as GroupProps["layer"]}
29+
backdropFilter={backdropFilter}
2830
saveLayerFlags={saveLayerFlags}
2931
{...props}
3032
/>

packages/skia/src/sksg/Recorder/Player.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,12 @@ const play = (ctx: DrawingContext, _command: Command) => {
120120
} else if (isDrawCommand(command, CommandType.SaveLayer)) {
121121
ctx.materializePaint();
122122
const paint = ctx.paintDeclarations.pop();
123-
ctx.canvas.saveLayer(paint, null, null, command.props.saveLayerFlags);
123+
ctx.canvas.saveLayer(
124+
paint,
125+
null,
126+
command.props.backdropFilter,
127+
command.props.saveLayerFlags
128+
);
124129
} else if (isDrawCommand(command, CommandType.SavePaint)) {
125130
if (command.props.paint) {
126131
ctx.paints.push(command.props.paint);

0 commit comments

Comments
 (0)