From 074166b111cdeb5a3b2a4ec04b23fe7d0d5afa0e Mon Sep 17 00:00:00 2001 From: Horcrux Date: Sun, 8 Jan 2017 19:05:37 +0800 Subject: [PATCH] rename mergeProperties related variables --- .../java/com/horcrux/svg/GroupShadowNode.java | 6 +- .../com/horcrux/svg/RenderableShadowNode.java | 69 ++++++++----------- .../java/com/horcrux/svg/UseShadowNode.java | 2 +- .../com/horcrux/svg/ViewBoxShadowNode.java | 2 +- ios/Elements/RNSVGGroup.m | 4 +- 5 files changed, 34 insertions(+), 49 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/GroupShadowNode.java b/android/src/main/java/com/horcrux/svg/GroupShadowNode.java index fad5b612..60473c45 100644 --- a/android/src/main/java/com/horcrux/svg/GroupShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/GroupShadowNode.java @@ -38,7 +38,7 @@ public class GroupShadowNode extends RenderableShadowNode { public boolean run(VirtualNode node) { node.setupDimensions(canvas); - node.mergeProperties(self, mOwnedPropList, true); + node.mergeProperties(self, mAttributeList, true); node.draw(canvas, paint, opacity * mOpacity); node.markUpdateSeen(); @@ -109,10 +109,10 @@ public class GroupShadowNode extends RenderableShadowNode { } @Override - public void mergeProperties(final VirtualNode target, final ReadableArray mergeList) { + public void mergeProperties(final VirtualNode target, final ReadableArray mergeList, final boolean inherited) { traverseChildren(new NodeRunnable() { public boolean run(VirtualNode node) { - node.mergeProperties(target, mergeList); + node.mergeProperties(target, mergeList, inherited); return true; } }); diff --git a/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java b/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java index 2283e1cd..7d9e7fa3 100644 --- a/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RenderableShadowNode.java @@ -24,6 +24,7 @@ import android.graphics.Color; import android.util.Log; import com.facebook.common.logging.FLog; +import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.JavaOnlyArray; import com.facebook.react.bridge.ReadableArray; @@ -72,10 +73,10 @@ abstract public class RenderableShadowNode extends VirtualNode { protected Path mPath; - private ArrayList mChangedList; + private ReadableArray mLastMergedList; private ArrayList mOriginProperties; protected ReadableArray mPropList = new JavaOnlyArray(); - protected WritableArray mOwnedPropList = new JavaOnlyArray(); + protected WritableArray mAttributeList = new JavaOnlyArray(); @ReactProp(name = "fill") public void setFill(@Nullable ReadableArray fill) { @@ -136,7 +137,7 @@ abstract public class RenderableShadowNode extends VirtualNode { markUpdated(); } - @ReactProp(name = "strokeWidth", defaultFloat = 1f) + @ReactProp(name = "strokeWidth", defaultFloat = 0f) public void setStrokeWidth(float strokeWidth) { mStrokeWidth = strokeWidth; markUpdated(); @@ -188,18 +189,16 @@ abstract public class RenderableShadowNode extends VirtualNode { @ReactProp(name = "propList") public void setPropList(@Nullable ReadableArray propList) { - WritableArray copy = new JavaOnlyArray(); - if (propList != null) { + WritableArray copy = Arguments.createArray(); for (int i = 0; i < propList.size(); i++) { String fieldName = propertyNameToFieldName(propList.getString(i)); copy.pushString(fieldName); - mOwnedPropList.pushString(fieldName); + mAttributeList.pushString(fieldName); } - + mPropList = copy; } - mPropList = copy; markUpdated(); } @@ -231,22 +230,6 @@ abstract public class RenderableShadowNode extends VirtualNode { markUpdateSeen(); } } - /** - * sorting stops and stopsColors from array - */ - private static void parseGradientStops(ReadableArray value, int stopsCount, float[] stops, int[] stopsColors, int startColorsPosition) { - int startStops = value.size() - stopsCount; - for (int i = 0; i < stopsCount; i++) { - stops[i] = (float)value.getDouble(startStops + i); - stopsColors[i] = Color.argb( - (int) (value.getDouble(startColorsPosition + i * 4 + 3) * 255), - (int) (value.getDouble(startColorsPosition + i * 4) * 255), - (int) (value.getDouble(startColorsPosition + i * 4 + 1) * 255), - (int) (value.getDouble(startColorsPosition + i * 4 + 2) * 255)); - - } - } - /** * Sets up paint according to the props set on a shadow view. Returns {@code true} @@ -379,20 +362,14 @@ abstract public class RenderableShadowNode extends VirtualNode { @Override public void mergeProperties(VirtualNode target, ReadableArray mergeList, boolean inherited) { + mLastMergedList = mergeList; + if (mergeList.size() == 0) { return; } - if (!inherited) { - mOriginProperties = new ArrayList<>(); - mChangedList = new ArrayList<>(); - } - - WritableArray propList = new JavaOnlyArray(); - for (int i = 0; i < mPropList.size(); i++) { - propList.pushString(mPropList.getString(i)); - } - mOwnedPropList = propList; + mOriginProperties = new ArrayList<>(); + resetAttributeList(); for (int i = 0, size = mergeList.size(); i < size; i++) { try { @@ -402,12 +379,12 @@ abstract public class RenderableShadowNode extends VirtualNode { if (inherited) { if (!hasOwnProperty(fieldName)) { + mAttributeList.pushString(fieldName); + mOriginProperties.add(field.get(this)); field.set(this, value); - propList.pushString(fieldName); } } else { mOriginProperties.add(field.get(this)); - mChangedList.add(fieldName); field.set(this, value); } } catch (Exception e) { @@ -423,19 +400,27 @@ abstract public class RenderableShadowNode extends VirtualNode { @Override public void resetProperties() { - if (mChangedList != null) { + if (mLastMergedList != null) { try { - for (int i = mChangedList.size() - 1; i >= 0; i--) { - Field field = getClass().getField(mChangedList.get(i)); + for (int i = mLastMergedList.size() - 1; i >= 0; i--) { + Field field = getClass().getField(mLastMergedList.getString(i)); field.set(this, mOriginProperties.get(i)); } } catch (Exception e) { throw new IllegalStateException(e); } - mChangedList = null; + mLastMergedList = null; mOriginProperties = null; } + resetAttributeList(); + } + + private void resetAttributeList() { + mAttributeList = Arguments.createArray(); + for (int i = 0; i < mPropList.size(); i++) { + mAttributeList.pushString(mPropList.getString(i)); + } } // convert propertyName something like fillOpacity to fieldName like mFillOpacity @@ -451,8 +436,8 @@ abstract public class RenderableShadowNode extends VirtualNode { } private boolean hasOwnProperty(String propName) { - for (int i = mOwnedPropList.size() - 1; i >= 0; i--) { - if (mOwnedPropList.getString(i).equals(propName)) { + for (int i = mAttributeList.size() - 1; i >= 0; i--) { + if (mAttributeList.getString(i).equals(propName)) { return true; } } diff --git a/android/src/main/java/com/horcrux/svg/UseShadowNode.java b/android/src/main/java/com/horcrux/svg/UseShadowNode.java index b23137f3..40931d00 100644 --- a/android/src/main/java/com/horcrux/svg/UseShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/UseShadowNode.java @@ -60,7 +60,7 @@ public class UseShadowNode extends RenderableShadowNode { int count = saveAndSetupCanvas(canvas); clip(canvas, paint); - template.mergeProperties(this, mOwnedPropList); + template.mergeProperties(this, mAttributeList, true); template.draw(canvas, paint, opacity * mOpacity); template.resetProperties(); diff --git a/android/src/main/java/com/horcrux/svg/ViewBoxShadowNode.java b/android/src/main/java/com/horcrux/svg/ViewBoxShadowNode.java index aa0762d2..deadb22b 100644 --- a/android/src/main/java/com/horcrux/svg/ViewBoxShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/ViewBoxShadowNode.java @@ -174,7 +174,7 @@ public class ViewBoxShadowNode extends GroupShadowNode { } @Override - public void mergeProperties(VirtualNode target, ReadableArray mergeList) { + public void mergeProperties(VirtualNode target, ReadableArray mergeList, boolean inherited) { if (target instanceof UseShadowNode) { mFromSymbol = true; mBoxWidth = ((UseShadowNode)target).getWidth(); diff --git a/ios/Elements/RNSVGGroup.m b/ios/Elements/RNSVGGroup.m index b8caee79..39227861 100644 --- a/ios/Elements/RNSVGGroup.m +++ b/ios/Elements/RNSVGGroup.m @@ -83,10 +83,10 @@ } -- (void)mergeProperties:(__kindof RNSVGNode *)target mergeList:(NSArray *)mergeList +- (void)mergeProperties:(__kindof RNSVGNode *)target mergeList:(NSArray *)mergeList inherited:(BOOL)inherited { [self traverseSubviews:^(RNSVGNode *node) { - [node mergeProperties:target mergeList:mergeList]; + [node mergeProperties:target mergeList:mergeList inherited:inherited]; return YES; }]; }