fix fillrule bug on Android

This commit is contained in:
Horcrux
2016-04-23 23:01:24 +08:00
parent 5e32544e22
commit 5b630f1e4a
@@ -57,25 +57,31 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode {
private int mStrokeLinecap = CAP_ROUND;
private int mStrokeLinejoin = JOIN_ROUND;
private int mFillRule = FILL_RULE_NONZERO;
private boolean mFillRuleSet;
private boolean mPathSet;
private float[] mShapePath;
private Point mPaint;
@ReactProp(name = "d")
public void setPath(@Nullable ReadableArray shapePath) {
float[] pathData = PropHelper.toFloatArray(shapePath);
Path path = new Path();
switch (mFillRule) {
case FILL_RULE_EVENODD:
path.setFillType(Path.FillType.EVEN_ODD);
break;
case FILL_RULE_NONZERO:
break;
default:
throw new JSApplicationIllegalArgumentException(
"fillRule " + mFillRule + " unrecognized");
}
mShapePath = PropHelper.toFloatArray(shapePath);
mPathSet = true;
setupPath();
markUpdated();
}
mPath = super.createPath(pathData, path);
@ReactProp(name = "fill")
public void setFill(@Nullable ReadableArray fillColors) {
mFillColor = PropHelper.toFloatArray(fillColors);
markUpdated();
}
@ReactProp(name = "fillRule", defaultInt = FILL_RULE_NONZERO)
public void setFillRule(int fillRule) {
mFillRule = fillRule;
mFillRuleSet = true;
setupPath();
markUpdated();
}
@@ -103,20 +109,6 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode {
markUpdated();
}
@ReactProp(name = "fill")
public void setFill(@Nullable ReadableArray fillColors) {
mFillColor = PropHelper.toFloatArray(fillColors);
markUpdated();
}
@ReactProp(name = "fillRule", defaultInt = FILL_RULE_NONZERO)
public void setFillRule(int fillRule) {
mFillRule = fillRule;
markUpdated();
}
@ReactProp(name = "strokeWidth", defaultFloat = 1f)
public void setStrokeWidth(float strokeWidth) {
mStrokeWidth = strokeWidth;
@@ -159,6 +151,26 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode {
markUpdateSeen();
}
private void setupPath() {
// init path after both fillRule and path have been set
if (mFillRuleSet && mPathSet) {
Path path = new Path();
switch (mFillRule) {
case FILL_RULE_EVENODD:
path.setFillType(Path.FillType.EVEN_ODD);
break;
case FILL_RULE_NONZERO:
break;
default:
throw new JSApplicationIllegalArgumentException(
"fillRule " + mFillRule + " unrecognized");
}
mPath = super.createPath(mShapePath, path);
}
}
/*
* sorting stops and stopsColors from array
*/