diff --git a/android/src/main/java/com/horcrux/svg/RNSVGRenderableManager.java b/android/src/main/java/com/horcrux/svg/RNSVGRenderableManager.java index bd58d9e5..af177570 100644 --- a/android/src/main/java/com/horcrux/svg/RNSVGRenderableManager.java +++ b/android/src/main/java/com/horcrux/svg/RNSVGRenderableManager.java @@ -189,6 +189,7 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule { RenderableView svg = RenderableViewManager.getRenderableViewByTag(tag); Matrix screenCTM = svg.mCTM; SvgView root = svg.getSvgView(); + float scale = svg.mScale; float[] values = new float[9]; screenCTM.getValues(values); WritableMap result = Arguments.createMap(); @@ -196,8 +197,8 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule { result.putDouble("b", values[Matrix.MSKEW_Y]); result.putDouble("c", values[Matrix.MSKEW_X]); result.putDouble("d", values[Matrix.MSCALE_Y]); - result.putDouble("e", values[Matrix.MTRANS_X] + root.getLeft()); - result.putDouble("f", values[Matrix.MTRANS_Y] + root.getTop()); + result.putDouble("e", values[Matrix.MTRANS_X] + root.getLeft() / scale); + result.putDouble("f", values[Matrix.MTRANS_Y] + root.getTop() / scale); successCallback.invoke(result); } } diff --git a/ios/Elements/RNSVGSvgView.h b/ios/Elements/RNSVGSvgView.h index a5150ffc..6510e1b5 100644 --- a/ios/Elements/RNSVGSvgView.h +++ b/ios/Elements/RNSVGSvgView.h @@ -28,6 +28,7 @@ @property (nonatomic, assign) CGRect boundingBox; @property (nonatomic, assign) CGAffineTransform initialCTM; @property (nonatomic, assign) CGAffineTransform invInitialCTM; +@property (nonatomic, assign) CGAffineTransform viewBoxTransform; diff --git a/ios/Elements/RNSVGSvgView.m b/ios/Elements/RNSVGSvgView.m index e479d568..64d1485c 100644 --- a/ios/Elements/RNSVGSvgView.m +++ b/ios/Elements/RNSVGSvgView.m @@ -18,7 +18,6 @@ NSMutableDictionary *_painters; NSMutableDictionary *_markers; NSMutableDictionary *_masks; - CGAffineTransform _viewBoxTransform; CGAffineTransform _invviewBoxTransform; bool rendered; } diff --git a/ios/ViewManagers/RNSVGRenderableManager.m b/ios/ViewManagers/RNSVGRenderableManager.m index e33655ca..46465eed 100644 --- a/ios/ViewManagers/RNSVGRenderableManager.m +++ b/ios/ViewManagers/RNSVGRenderableManager.m @@ -226,12 +226,12 @@ RCT_EXPORT_METHOD(getCTM:(nonnull NSNumber *)reactTag callback:(RCTResponseSende callback( @[ @{ - @"a":n(ctm.a), - @"b":n(ctm.b), - @"c":n(ctm.c), - @"d":n(ctm.d), - @"e":n(ctm.tx), - @"f":n(ctm.ty) + @"a":@(ctm.a), + @"b":@(ctm.b), + @"c":@(ctm.c), + @"d":@(ctm.d), + @"e":@(ctm.tx), + @"f":@(ctm.ty) } ] ); @@ -242,25 +242,24 @@ RCT_EXPORT_METHOD(getCTM:(nonnull NSNumber *)reactTag callback:(RCTResponseSende attempt:0]; } -static NSNumber *n(CGFloat af) { - return [NSNumber numberWithDouble:af]; -} - RCT_EXPORT_METHOD(getScreenCTM:(nonnull NSNumber *)reactTag callback:(RCTResponseSenderBlock)callback) { [self withTag:reactTag success:^(RNSVGRenderable *svg){ - CGAffineTransform ctm = svg.screenCTM; + RNSVGSvgView* root = svg.svgView; + CGAffineTransform viewbox = [root getViewBoxTransform]; + CGAffineTransform ctm = CGAffineTransformConcat(svg.ctm, viewbox); + CGPoint offset = [root convertPoint:CGPointZero toView:svg.window]; callback( @[ @{ - @"a":n(ctm.a), - @"b":n(ctm.b), - @"c":n(ctm.c), - @"d":n(ctm.d), - @"e":n(ctm.tx), - @"f":n(ctm.ty) + @"a":@(ctm.a), + @"b":@(ctm.b), + @"c":@(ctm.c), + @"d":@(ctm.d), + @"e":@(ctm.tx + offset.x), + @"f":@(ctm.ty + offset.y) } ] );