From 3dc6b809531388b0f9c747dd73d3b46b95aebb32 Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Mon, 14 Jan 2019 15:44:00 +0200 Subject: [PATCH] [android] Fix Use element spec conformance (x and y interpretation) --- .../com/horcrux/svg/RenderableViewManager.java | 10 ++++++++++ .../src/main/java/com/horcrux/svg/UseView.java | 15 +++++++++++++++ elements/Use.js | 2 ++ ios/Elements/RNSVGUse.m | 2 +- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/horcrux/svg/RenderableViewManager.java b/android/src/main/java/com/horcrux/svg/RenderableViewManager.java index b2ed53b9..34d31c18 100644 --- a/android/src/main/java/com/horcrux/svg/RenderableViewManager.java +++ b/android/src/main/java/com/horcrux/svg/RenderableViewManager.java @@ -644,6 +644,16 @@ class RenderableViewManager extends ViewGroupManager { node.setHref(href); } + @ReactProp(name = "x") + public void setX(UseView node, Dynamic x) { + node.setX(x); + } + + @ReactProp(name = "y") + public void setY(UseView node, Dynamic y) { + node.setY(y); + } + @ReactProp(name = "width") public void setWidth(UseView node, Dynamic width) { node.setWidth(width); diff --git a/android/src/main/java/com/horcrux/svg/UseView.java b/android/src/main/java/com/horcrux/svg/UseView.java index 6361a5b3..b156f2de 100644 --- a/android/src/main/java/com/horcrux/svg/UseView.java +++ b/android/src/main/java/com/horcrux/svg/UseView.java @@ -23,6 +23,8 @@ import com.facebook.react.uimanager.annotations.ReactProp; @SuppressLint("ViewConstructor") class UseView extends RenderableView { private String mHref; + private SVGLength mX; + private SVGLength mY; private SVGLength mW; private SVGLength mH; @@ -36,6 +38,18 @@ class UseView extends RenderableView { invalidate(); } + @ReactProp(name = "x") + public void setX(Dynamic x) { + mX = getLengthFromDynamic(x); + invalidate(); + } + + @ReactProp(name = "y") + public void setY(Dynamic y) { + mY = getLengthFromDynamic(y); + invalidate(); + } + @ReactProp(name = "width") public void setWidth(Dynamic width) { mW = getLengthFromDynamic(width); @@ -53,6 +67,7 @@ class UseView extends RenderableView { VirtualView template = getSvgView().getDefinedTemplate(mHref); if (template != null) { + canvas.translate((float) relativeOnWidth(mX), (float) relativeOnHeight(mY)); if (template instanceof RenderableView) { ((RenderableView)template).mergeProperties(this); } diff --git a/elements/Use.js b/elements/Use.js index e101c3c3..cfcde04b 100644 --- a/elements/Use.js +++ b/elements/Use.js @@ -8,6 +8,8 @@ export default class Use extends Shape { static displayName = "Use"; static defaultProps = { + x: 0, + y: 0, width: 0, height: 0, }; diff --git a/ios/Elements/RNSVGUse.m b/ios/Elements/RNSVGUse.m index 49ba6795..5a42b568 100644 --- a/ios/Elements/RNSVGUse.m +++ b/ios/Elements/RNSVGUse.m @@ -64,7 +64,7 @@ - (void)renderLayerTo:(CGContextRef)context rect:(CGRect)rect { - CGContextTranslateCTM(context, [self relativeOnWidth:self.x], [self relativeOnWidth:self.y]); + CGContextTranslateCTM(context, [self relativeOnWidth:self.x], [self relativeOnHeight:self.y]); RNSVGNode* template = [self.svgView getDefinedTemplate:self.href]; if (template) { [self beginTransparencyLayer:context];