fix: getScreenCTM calculation

This commit is contained in:
Mikael Sand
2019-10-05 11:58:48 +03:00
parent f3e0b190a9
commit 5c5072dbef
4 changed files with 20 additions and 20 deletions
@@ -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);
}
}
+1
View File
@@ -28,6 +28,7 @@
@property (nonatomic, assign) CGRect boundingBox;
@property (nonatomic, assign) CGAffineTransform initialCTM;
@property (nonatomic, assign) CGAffineTransform invInitialCTM;
@property (nonatomic, assign) CGAffineTransform viewBoxTransform;
-1
View File
@@ -18,7 +18,6 @@
NSMutableDictionary<NSString *, RNSVGPainter *> *_painters;
NSMutableDictionary<NSString *, RNSVGNode *> *_markers;
NSMutableDictionary<NSString *, RNSVGNode *> *_masks;
CGAffineTransform _viewBoxTransform;
CGAffineTransform _invviewBoxTransform;
bool rendered;
}
+16 -17
View File
@@ -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)
}
]
);