From 76fb495920fe8a02201b967e655a25bea0b51073 Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Thu, 24 Jan 2019 20:27:45 +0200 Subject: [PATCH] Fix #844 Handle svg root width/height attribute strings containing px on iOS Inherit fill/stroke attributes from Mask elements Set default bounding box of mask to fill viewport / allow missing x, y, width, height on mask element --- .../main/java/com/horcrux/svg/GroupView.java | 25 +++++++++++++++---- elements/Mask.js | 10 +++++++- elements/Svg.js | 6 +++-- elements/Use.js | 2 +- ios/Elements/RNSVGGroup.m | 7 ++++-- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/GroupView.java b/android/src/main/java/com/horcrux/svg/GroupView.java index f8b9915a..29d7ce54 100644 --- a/android/src/main/java/com/horcrux/svg/GroupView.java +++ b/android/src/main/java/com/horcrux/svg/GroupView.java @@ -88,9 +88,12 @@ class GroupView extends RenderableView { final GroupView self = this; final RectF groupRect = new RectF(); for (int i = 0; i < getChildCount(); i++) { - View lNode = getChildAt(i); - if (lNode instanceof VirtualView) { - VirtualView node = ((VirtualView)lNode); + View child = getChildAt(i); + if (child instanceof MaskView) { + continue; + } + if (child instanceof VirtualView) { + VirtualView node = ((VirtualView)child); if (node instanceof RenderableView) { ((RenderableView)node).mergeProperties(self); } @@ -111,8 +114,8 @@ class GroupView extends RenderableView { if (node.isResponsible()) { svg.enableTouchEvents(); } - } else if (lNode instanceof SvgView) { - SvgView svgView = (SvgView)lNode; + } else if (child instanceof SvgView) { + SvgView svgView = (SvgView)child; svgView.drawChildren(canvas); } } @@ -133,6 +136,9 @@ class GroupView extends RenderableView { for (int i = 0; i < getChildCount(); i++) { View node = getChildAt(i); + if (node instanceof MaskView) { + continue; + } if (node instanceof VirtualView) { VirtualView n = (VirtualView)node; Matrix transform = n.mMatrix; @@ -150,6 +156,9 @@ class GroupView extends RenderableView { final Path.Op pop = Path.Op.valueOf(op.name()); for (int i = 0; i < getChildCount(); i++) { View node = getChildAt(i); + if (node instanceof MaskView) { + continue; + } if (node instanceof VirtualView) { VirtualView n = (VirtualView)node; Matrix transform = n.mMatrix; @@ -169,6 +178,9 @@ class GroupView extends RenderableView { final Region r = new Region(); for (int i = 0; i < getChildCount(); i++) { View node = getChildAt(i); + if (node instanceof MaskView) { + continue; + } if (node instanceof VirtualView) { VirtualView n = (VirtualView)node; Matrix transform = n.mMatrix; @@ -221,6 +233,9 @@ class GroupView extends RenderableView { if (!(child instanceof VirtualView)) { continue; } + if (child instanceof MaskView) { + continue; + } VirtualView node = (VirtualView) child; diff --git a/elements/Mask.js b/elements/Mask.js index 11a15013..db60ec90 100644 --- a/elements/Mask.js +++ b/elements/Mask.js @@ -1,12 +1,20 @@ import React from "react"; import { requireNativeComponent } from "react-native"; import extractTransform from "../lib/extract/extractTransform"; +import extractProps from "react-native-svg/lib/extract/extractProps"; import units from "../lib/units"; import Shape from "./Shape"; export default class Mask extends Shape { static displayName = "Mask"; + static defaultProps = { + x: "0%", + y: "0%", + width: "100%", + height: "100%", + }; + render() { const { props } = this; const { @@ -24,7 +32,7 @@ export default class Mask extends Shape { return (