From 7acbee41f33e6d64cbc2bbe9b682f3246269ca7e Mon Sep 17 00:00:00 2001 From: Jakub Grzywacz Date: Wed, 31 Jul 2024 15:13:50 +0200 Subject: [PATCH] fix: FeMerge on paper (#2384) # Summary Use empty string (`""`) instead of `undefined` for previous filter result in `FeMergeNode` --- android/src/main/java/com/horcrux/svg/FeMergeView.java | 8 +++----- apple/Filters/RNSVGFeMerge.mm | 5 +---- src/fabric/FeMergeNativeComponent.ts | 2 +- src/lib/extract/extractFilter.ts | 4 ++-- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/FeMergeView.java b/android/src/main/java/com/horcrux/svg/FeMergeView.java index 80de0860..1d666f13 100644 --- a/android/src/main/java/com/horcrux/svg/FeMergeView.java +++ b/android/src/main/java/com/horcrux/svg/FeMergeView.java @@ -6,7 +6,6 @@ import android.graphics.Canvas; import android.graphics.Paint; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; import java.util.HashMap; @SuppressLint("ViewConstructor") @@ -29,10 +28,9 @@ class FeMergeView extends FilterPrimitiveView { Canvas canvas = new Canvas(result); int nodesSize = this.mNodes.size(); for (int i = 0; i < nodesSize; i++) { - Bitmap sourceFromResults = - this.mNodes.getType(i) == ReadableType.String - ? resultsMap.get(this.mNodes.getString(i)) - : prevResult; + String nodeKey = this.mNodes.getString(i); + Bitmap sourceFromResults = nodeKey.isEmpty() ? prevResult : resultsMap.get(nodeKey); + if (sourceFromResults != null) { canvas.drawBitmap(sourceFromResults, 0, 0, new Paint()); } diff --git a/apple/Filters/RNSVGFeMerge.mm b/apple/Filters/RNSVGFeMerge.mm index 0ec05794..d3948b96 100644 --- a/apple/Filters/RNSVGFeMerge.mm +++ b/apple/Filters/RNSVGFeMerge.mm @@ -39,8 +39,6 @@ using namespace facebook::react; id json = RNSVGConvertFollyDynamicToId(node); if ([json isKindOfClass:[NSString class]]) { [nodesArray addObject:[json stringValue]]; - } else { - [nodesArray addObject:[NSNull null]]; } } self.nodes = nodesArray; @@ -78,8 +76,7 @@ using namespace facebook::react; for (int i = 0; i < [self.nodes count]; i++) { NSString *nodeKey = [self.nodes objectAtIndex:i]; - CIImage *inputImage = - [nodeKey isEqual:[NSNull null]] ? previous : [results objectForKey:[self.nodes objectAtIndex:i]]; + CIImage *inputImage = [nodeKey isEqual:@""] ? previous : [results objectForKey:nodeKey]; if (inputImage == nil) { continue; } diff --git a/src/fabric/FeMergeNativeComponent.ts b/src/fabric/FeMergeNativeComponent.ts index 68b403a7..5dba04d3 100644 --- a/src/fabric/FeMergeNativeComponent.ts +++ b/src/fabric/FeMergeNativeComponent.ts @@ -13,7 +13,7 @@ interface FilterPrimitiveCommonProps { } export interface NativeProps extends ViewProps, FilterPrimitiveCommonProps { - nodes?: ReadonlyArray>; + nodes?: ReadonlyArray; } export default codegenNativeComponent('RNSVGFeMerge'); diff --git a/src/lib/extract/extractFilter.ts b/src/lib/extract/extractFilter.ts index e2f441ba..4d47ac3a 100644 --- a/src/lib/extract/extractFilter.ts +++ b/src/lib/extract/extractFilter.ts @@ -95,7 +95,7 @@ export const extractFeMerge = ( props: FeMergeComponentProps, parent: unknown ): FeMergeNativeProps => { - const nodes: Array = []; + const nodes: Array = []; const childArray = props.children ? React.Children.map(props.children, (child) => React.cloneElement(child, { parent }) @@ -106,7 +106,7 @@ export const extractFeMerge = ( const { props: { in: in1 }, } = childArray[i]; - nodes.push(in1); + nodes.push(in1 || ''); } return { nodes };