fix(android): native method scaling and getScreenCTM offset

This commit is contained in:
Mikael Sand
2019-10-04 20:49:54 +03:00
parent 8687a3d1e9
commit f3e0b190a9
@@ -104,7 +104,8 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule {
public void getTotalLength(int tag, Callback successCallback) { public void getTotalLength(int tag, Callback successCallback) {
RenderableView svg = RenderableViewManager.getRenderableViewByTag(tag); RenderableView svg = RenderableViewManager.getRenderableViewByTag(tag);
PathMeasure pm = new PathMeasure(svg.getPath(null, null), false); PathMeasure pm = new PathMeasure(svg.getPath(null, null), false);
successCallback.invoke(pm.getLength()); float scale = svg.mScale;
successCallback.invoke(pm.getLength() / scale);
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
@@ -119,8 +120,9 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule {
pm.getPosTan(Math.max(0, Math.min(length, pathLength)), pos, tan); pm.getPosTan(Math.max(0, Math.min(length, pathLength)), pos, tan);
double angle = Math.atan2(tan[1], tan[0]); double angle = Math.atan2(tan[1], tan[0]);
WritableMap result = Arguments.createMap(); WritableMap result = Arguments.createMap();
result.putDouble("x", pos[0]); float scale = svg.mScale;
result.putDouble("y", pos[1]); result.putDouble("x", pos[0] / scale);
result.putDouble("y", pos[1] / scale);
result.putDouble("angle", angle); result.putDouble("angle", angle);
successCallback.invoke(result); successCallback.invoke(result);
} }
@@ -152,10 +154,11 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule {
} }
} }
WritableMap result = Arguments.createMap(); WritableMap result = Arguments.createMap();
result.putDouble("x", bounds.left); float scale = svg.mScale;
result.putDouble("y", bounds.top); result.putDouble("x", bounds.left / scale);
result.putDouble("width", bounds.width()); result.putDouble("y", bounds.top / scale);
result.putDouble("height", bounds.height()); result.putDouble("width", bounds.width() / scale);
result.putDouble("height", bounds.height() / scale);
successCallback.invoke(result); successCallback.invoke(result);
} }
@@ -185,6 +188,7 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule {
public void getScreenCTM(int tag, Callback successCallback) { public void getScreenCTM(int tag, Callback successCallback) {
RenderableView svg = RenderableViewManager.getRenderableViewByTag(tag); RenderableView svg = RenderableViewManager.getRenderableViewByTag(tag);
Matrix screenCTM = svg.mCTM; Matrix screenCTM = svg.mCTM;
SvgView root = svg.getSvgView();
float[] values = new float[9]; float[] values = new float[9];
screenCTM.getValues(values); screenCTM.getValues(values);
WritableMap result = Arguments.createMap(); WritableMap result = Arguments.createMap();
@@ -192,8 +196,8 @@ class RNSVGRenderableManager extends ReactContextBaseJavaModule {
result.putDouble("b", values[Matrix.MSKEW_Y]); result.putDouble("b", values[Matrix.MSKEW_Y]);
result.putDouble("c", values[Matrix.MSKEW_X]); result.putDouble("c", values[Matrix.MSKEW_X]);
result.putDouble("d", values[Matrix.MSCALE_Y]); result.putDouble("d", values[Matrix.MSCALE_Y]);
result.putDouble("e", values[Matrix.MTRANS_X]); result.putDouble("e", values[Matrix.MTRANS_X] + root.getLeft());
result.putDouble("f", values[Matrix.MTRANS_Y]); result.putDouble("f", values[Matrix.MTRANS_Y] + root.getTop());
successCallback.invoke(result); successCallback.invoke(result);
} }
} }