Implement transform matrix property for ImageShadowNode

Add conditional translation.preConcat(mMatrix) statement
This commit is contained in:
Mikael Sand
2017-06-08 17:52:47 +03:00
parent 77e54cfcfb
commit 49c95f5a30
@@ -38,6 +38,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.facebook.react.bridge.ReadableArray;
/**
* Shadow node for virtual Image view
*/
@@ -53,6 +55,10 @@ public class ImageShadowNode extends RenderableShadowNode {
private int mMeetOrSlice;
private AtomicBoolean mLoading = new AtomicBoolean(false);
private static final float[] sMatrixData = new float[9];
private static final float[] sRawMatrix = new float[9];
protected Matrix mMatrix = new Matrix();
@ReactProp(name = "x")
public void setX(String x) {
mX = x;
@@ -109,6 +115,32 @@ public class ImageShadowNode extends RenderableShadowNode {
markUpdated();
}
@ReactProp(name = "matrix")
public void setMatrix(@Nullable ReadableArray matrixArray) {
if (matrixArray != null) {
int matrixSize = PropHelper.toFloatArray(matrixArray, sMatrixData);
if (matrixSize == 6) {
sRawMatrix[0] = sMatrixData[0];
sRawMatrix[1] = sMatrixData[2];
sRawMatrix[2] = sMatrixData[4] * mScale;
sRawMatrix[3] = sMatrixData[1];
sRawMatrix[4] = sMatrixData[3];
sRawMatrix[5] = sMatrixData[5] * mScale;
sRawMatrix[6] = 0;
sRawMatrix[7] = 0;
sRawMatrix[8] = 1;
mMatrix.setValues(sRawMatrix);
} else if (matrixSize != -1) {
FLog.w(ReactConstants.TAG, "RNSVG: Transform matrices must be of size 6");
}
} else {
mMatrix = null;
}
markUpdated();
}
@Override
public void draw(final Canvas canvas, final Paint paint, final float opacity) {
if (!mLoading.get()) {
@@ -187,6 +219,9 @@ public class ImageShadowNode extends RenderableShadowNode {
transform.mapRect(renderRect);
Matrix translation = new Matrix();
translation.postTranslate(rectX, rectY);
if (mMatrix != null) {
translation.preConcat(mMatrix);
}
translation.mapRect(renderRect);
Path clip = new Path();