From 1b050834d5c4a8410054bbdbe18470c561325349 Mon Sep 17 00:00:00 2001 From: Mikael Sand Date: Wed, 27 Feb 2019 22:08:10 +0200 Subject: [PATCH] [ios] Implement vectorEffect nonScalingStroke / non-scaling-stroke --- ios/RNSVGRenderable.h | 2 ++ ios/RNSVGRenderable.m | 15 +++++++++++++++ ios/ViewManagers/RNSVGRenderableManager.m | 1 + lib/extract/extractStroke.js | 1 + 4 files changed, 19 insertions(+) diff --git a/ios/RNSVGRenderable.h b/ios/RNSVGRenderable.h index d59d48ad..2973f25b 100644 --- a/ios/RNSVGRenderable.h +++ b/ios/RNSVGRenderable.h @@ -12,6 +12,7 @@ #import "RNSVGCGFCRule.h" #import "RNSVGNode.h" #import "RNSVGLength.h" +#import "RNSVGVectorEffect.h" #import "RNSVGPercentageConverter.h" @interface RNSVGRenderable : RNSVGNode @@ -27,6 +28,7 @@ @property (nonatomic, assign) CGFloat strokeMiterlimit; @property (nonatomic, strong) NSArray *strokeDasharray; @property (nonatomic, assign) CGFloat strokeDashoffset; +@property (nonatomic, assign) RNSVGVectorEffect vectorEffect; @property (nonatomic, copy) NSArray *propList; - (void)setHitArea:(CGPathRef)path; diff --git a/ios/RNSVGRenderable.m b/ios/RNSVGRenderable.m index d8067aae..d9a898b2 100644 --- a/ios/RNSVGRenderable.m +++ b/ios/RNSVGRenderable.m @@ -10,6 +10,7 @@ #import "RNSVGClipPath.h" #import "RNSVGMask.h" #import "RNSVGViewBox.h" +#import "RNSVGVectorEffect.h" @implementation RNSVGRenderable { @@ -143,6 +144,15 @@ _strokeDashoffset = strokeDashoffset; } +- (void)setVectorEffect:(RNSVGVectorEffect)vectorEffect +{ + if (vectorEffect == _vectorEffect) { + return; + } + [self invalidate]; + _vectorEffect = vectorEffect; +} + - (void)setPropList:(NSArray *)propList { if (propList == _propList) { @@ -305,6 +315,11 @@ UInt32 saturate(CGFloat value) { self.clientRect = clientRect; + if (_vectorEffect == kRNSVGVectorEffectNonScalingStroke) { + path = CGPathCreateCopyByTransformingPath(path, &svgToClientTransform); + CGContextConcatCTM(context, CGAffineTransformInvert(svgToClientTransform)); + } + CGAffineTransform vbmatrix = self.svgView.getViewBoxTransform; CGAffineTransform transform = CGAffineTransformConcat(self.matrix, self.transforms); CGAffineTransform matrix = CGAffineTransformConcat(transform, vbmatrix); diff --git a/ios/ViewManagers/RNSVGRenderableManager.m b/ios/ViewManagers/RNSVGRenderableManager.m index befdd937..fae93de7 100644 --- a/ios/ViewManagers/RNSVGRenderableManager.m +++ b/ios/ViewManagers/RNSVGRenderableManager.m @@ -31,6 +31,7 @@ RCT_EXPORT_VIEW_PROPERTY(strokeLinejoin, CGLineJoin) RCT_EXPORT_VIEW_PROPERTY(strokeDasharray, NSArray) RCT_EXPORT_VIEW_PROPERTY(strokeDashoffset, CGFloat) RCT_EXPORT_VIEW_PROPERTY(strokeMiterlimit, CGFloat) +RCT_EXPORT_VIEW_PROPERTY(vectorEffect, int) RCT_EXPORT_VIEW_PROPERTY(propList, NSArray) @end diff --git a/lib/extract/extractStroke.js b/lib/extract/extractStroke.js index a9b8cc0e..27be678a 100644 --- a/lib/extract/extractStroke.js +++ b/lib/extract/extractStroke.js @@ -20,6 +20,7 @@ const vectorEffects = { nonScalingStroke: 1, 'non-scaling-stroke': 1, inherit: 2, + uri: 3 }; export default function extractStroke(props, styleProperties) {