mirror of
https://github.com/zoriya/react-native-svg.git
synced 2026-06-04 15:44:24 +00:00
fix(android): native method scaling and getScreenCTM offset
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user