From e28a1885d7efe563c63265e90abe700f8656f789 Mon Sep 17 00:00:00 2001 From: "seongwon.shim" Date: Wed, 21 May 2014 16:02:31 +0900 Subject: [PATCH] ANIMATOR : Bug fix for loading animation Serailize & Deserailize boolean variable whether predefined or not for Keyframe Change-Id: I8a92ddc505105eb8f4caa5c64b050c906b5bc011 Signed-off-by: seongwon.shim --- .../webuibuilder/animator/model/AnimatorFrame.java | 7 ++++-- .../animator/model/AnimatorSelector.java | 26 ++++++++++++++++++++-- .../deserializer/AnimatorFrameDeserializer.java | 9 +++++--- .../model/serializer/AnimatorFrameSerializer.java | 1 + 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorFrame.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorFrame.java index a8cb361..8aa47a9 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorFrame.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorFrame.java @@ -578,8 +578,9 @@ public class AnimatorFrame extends AnimatorModel { } if (getUsedPropertiesInThisFrame().contains(key)) { - if(!keyframe.getName().contains("custom")) { - computedProperties.put(key, getComputedPropertyforPredefinedAnimationFromPreviousKeyframe(key, widgetProperties.get(key))); + if(isPredefined) { +// computedProperties.put(key, getComputedPropertyforPredefinedAnimationFromPreviousKeyframe(key, widgetProperties.get(key))); + computedProperties.put(key, getComputedPropertyforPredefinedAnimationFromPreviousCustomFrame(selector.getPreviousComputedProperty(this, key), key, widgetProperties.get(key))); } else { computedProperties.put(key, properties.get(key)); } @@ -597,6 +598,8 @@ public class AnimatorFrame extends AnimatorModel { return this.computedProperties; } + + /** * Get value that as a percentage of the css3 value * diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorSelector.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorSelector.java index f109858..e54b4ef 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorSelector.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorSelector.java @@ -419,7 +419,6 @@ public class AnimatorSelector extends AnimatorModel { mergedFrame.addProperty(key, mergedFrame.getComputedPropertyforPredefinedAnimationFromPreviousCustomFrame( previousProperty, key, widgetProperties.get(key))); - } else { String mergedFrameProperty = mergedFrame.getProperty(key); if(mergedFrameProperty != null) { @@ -585,7 +584,16 @@ public class AnimatorSelector extends AnimatorModel { return result; } - + /** + * Check with two keyframes that has same properties + * case 1. they have different properties and have same parent just keep going + * case 2. different properties and have different parent, merge to first keyframe's parent + * case 3. they have same properties and have same parent create other keyframe unit and move to last one to created keyframe unit + * case 4. they have same properties and have different parent just keep going * + * + * @param keyframe + * @return + */ public boolean mergeOrSplitKeyframe(AnimatorModelFactory modelFactory, List removedKeyframes) { boolean result = false; AnimatorFrame currentFrame = getNextAnimatorFrameByTime(null); @@ -647,6 +655,20 @@ public class AnimatorSelector extends AnimatorModel { return result; } + public String getPreviousComputedProperty(AnimatorFrame currentFrame, String key) { + AnimatorFrame frame = getPreviousAnimatorFrameByTime(currentFrame); + while(frame != null) { + if(!frame.isPredefined()) { + String value = frame.getProperty(key); + if(value != null) { + return value; + } + } + frame = getPreviousAnimatorFrameByTime(frame); + } + return null; + } + private AnimatorFrame getPreviousAnimatorFrameByTime(AnimatorFrame currentFrame) { diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/deserializer/AnimatorFrameDeserializer.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/deserializer/AnimatorFrameDeserializer.java index 09b28f8..1986939 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/deserializer/AnimatorFrameDeserializer.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/deserializer/AnimatorFrameDeserializer.java @@ -62,15 +62,18 @@ public class AnimatorFrameDeserializer extends AnimatorModelDeserializer entry : jobject.entrySet()) { String key = entry.getKey(); - if (key.equals("time")) + if (key.equals("time")) { frame.setFrameTime(entry.getValue().getAsDouble()); - else if (key.equals("curveFrames")) { + } else if (key.equals("isPredefined") ){ + frame.setPredefined(entry.getValue().getAsBoolean()); + } else if (key.equals("curveFrames")) { for (JsonElement curveFrame : jobject.get("curveFrames").getAsJsonArray()) { frame.addCurveFrame((AnimatorCurveFrame) context .deserialize(curveFrame, AnimatorCurveFrame.class)); } - } else + } else { frame.addProperty(key, entry.getValue().getAsString()); + } } return frame; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/serializer/AnimatorFrameSerializer.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/serializer/AnimatorFrameSerializer.java index e98ba76..e757f61 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/serializer/AnimatorFrameSerializer.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/serializer/AnimatorFrameSerializer.java @@ -56,6 +56,7 @@ public class AnimatorFrameSerializer implements JsonSerializer { final JsonObject json = new JsonObject(); json.addProperty("time", frame.getFrameTime()); + json.addProperty("isPredefined", frame.isPredefined()); Iterator> iterator = ((AnimatorFrame) frame).getPropertyIterator(); while (iterator.hasNext()) { -- 2.7.4