ANIMATOR : Implements method that get Previous KeyframeUnit by time 43/21743/1
authorseongwon.shim <seongwon.shim@samsung.com>
Tue, 27 May 2014 08:01:33 +0000 (17:01 +0900)
committerseongwon.shim <seongwon.shim@samsung.com>
Tue, 27 May 2014 08:01:33 +0000 (17:01 +0900)
When mergeKeyframe unit get Previous Keyframe unit by current time. not index of list

Change-Id: I179dd6a8b4425bb3e10dd365262be00f6f2b0e33
Signed-off-by: seongwon.shim <seongwon.shim@samsung.com>
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/gef/command/AnimationCreateAndChangeFrameCommand.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/gef/viewer/AnimatorBrowserViewer.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorFrame.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorKeyframe.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/model/AnimatorSelector.java
org.tizen.webuibuilder/src/org/tizen/webuibuilder/gef/viewer/HoverBrowserViewer.java

index 217c336..5cd2b13 100644 (file)
@@ -109,7 +109,7 @@ public class AnimationCreateAndChangeFrameCommand extends Command {
                }
        }
        
-               AnimatorKeyframe previousParent = (AnimatorKeyframe) currentSelector.getPrevChild(keyframe);
+               AnimatorKeyframe previousParent = (AnimatorKeyframe) currentSelector.getPreviousAnimatorKeyframeByTime(keyframe);
                int keyframeChildrenSize = keyframe.getChildrenSize();
                if (keyframeChildrenSize == 1) {
                        if (keyframe.getChildIndex(frame) == 0) {
@@ -208,7 +208,7 @@ public class AnimationCreateAndChangeFrameCommand extends Command {
                        
                        //It is possible that keyframe has been changed in removeOrReplaceProperties
                        keyframe = (AnimatorKeyframe)frame.getParent();
-                       AnimatorKeyframe previousParent = (AnimatorKeyframe) currentSelector.getPrevChild(keyframe);
+                       AnimatorKeyframe previousParent = (AnimatorKeyframe) currentSelector.getPreviousAnimatorKeyframeByTime(keyframe);
                        int keyframeChildrenSize = keyframe.getChildrenSize();
                        if (keyframeChildrenSize == 1) {
                                if (keyframe.getChildIndex(frame) == 0) {
index 79b9e2e..2bcb592 100644 (file)
@@ -86,8 +86,7 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
         // AnimatorPagePart pagePart = (AnimatorPagePart) manager.getPagePart();
 
         AnimatorPagePart pagePart =
-                (AnimatorPagePart) appManager.getPageData(appManager.getPageIndex(pageData))
-                        .getPagePart();
+                (AnimatorPagePart) getPageData().getPagePart();
         List<AnimatorAnimation> animations = pagePart.getAnimations();
         if (!animations.isEmpty()) {
             this.currentAnimationGroupId = animations.get(0).getId();
@@ -103,7 +102,7 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
      */
     @Override
     public void initLayout() {
-        int index = appManager.getPageIndex(pageData);
+        int index = appManager.getPageIndex(getPageData());
 
         tempHtml =
                 appManager.getAnimatorEditHtml(index, ((AnimatorBrowserViewer) this)
@@ -232,8 +231,7 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
         //
         // String pageId = pagePart.getPropertyValue("id");
 
-        getGoingBridge().aniBridge_play(appManager.getPageData(appManager.getPageIndex(pageData))
-                                                .getName(), currentAnimationGroupId);
+        getGoingBridge().aniBridge_play(getPageData().getName(), currentAnimationGroupId);
     }
 
     /**
@@ -258,8 +256,7 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
         // AnimatorPagePart pagePart = (AnimatorPagePart) manager.getPagePart();
         //
         // String pageId = pagePart.getPropertyValue("id");
-        getGoingBridge().aniBridge_pause(appManager.getPageData(appManager.getPageIndex(pageData))
-                                                 .getName());
+        getGoingBridge().aniBridge_pause(getPageData().getName());
     }
 
     /**
@@ -268,7 +265,7 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
     public void initAnimationFW() {
         AnimatorFileWriter.checkAnimatorRelatedResources(appManager);
         //PageData pageData2 = appManager.getPageData(appManager.getPageIndex(pageData));
-        PageData pageData2 = pageData;
+        PageData pageData2 = getPageData();
 
         if (pageData2 != null) {
             getGoingBridge()
@@ -353,15 +350,9 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
                                                                                                appManager
                                                                                                        .getPageDataSet()
                                                                                                        .getBaseRootPart(),
-                                                                                               appManager
-                                                                                                       .getPageData(appManager
-                                                                                                                            .getPageIndex(pageData))
-                                                                                                       .getPagePart()));
+                                                                                               getPageData().getPagePart()));
         getGoingBridge()
-                .aniBridge_setAnimationJs(AnimatorFileWriter.getOneAnimationGroupModelString(appManager
-                                                                                                     .getPageData(appManager
-                                                                                                                          .getPageIndex(pageData))
-                                                                                                     .getName(),
+                .aniBridge_setAnimationJs(AnimatorFileWriter.getOneAnimationGroupModelString(getPageData().getName(),
                                                                                              currentAnimationGroupId,
                                                                                              appManager,
                                                                                              appManager
@@ -376,7 +367,7 @@ public class AnimatorBrowserViewer extends HoverBrowserViewer {
 //        AnimatorPagePart pagePart =
 //                (AnimatorPagePart) appManager.getPageData(appManager.getPageIndex(pageData))
 //                        .getPagePart();
-      AnimatorPagePart pagePart = (AnimatorPagePart)pageData.getPagePart();
+      AnimatorPagePart pagePart = (AnimatorPagePart)getPageData().getPagePart();
         AnimatorAnimation animation = pagePart.getAnimation(currentAnimationGroupId);
         if (animation == null) {
             return;
index c62111e..d98da7e 100644 (file)
@@ -585,12 +585,12 @@ public class AnimatorFrame extends AnimatorModel {
                 if (getUsedPropertiesInThisFrame().contains(key)) {
                        if(isPredefined) {
 //                             computedProperties.put(key, getComputedPropertyforPredefinedAnimationFromPreviousKeyframe(key, widgetProperties.get(key)));
-                               computedProperties.put(key, getComputedPropertyforPredefinedAnimationFromPreviousCustomFrame(selector.getPreviousComputedProperty(this, key), key, widgetProperties.get(key)));
+                               computedProperties.put(key, getComputedPropertyforPredefinedAnimationFromPreviousCustomFrame(selector.getComputedPropertiesFromCustomPreviousFrame(this, key), key, widgetProperties.get(key)));
                        } else {
                         computedProperties.put(key, properties.get(key));
                        }
                 } else {
-                       String computedProperty = getComputedPropertiesFromPreviousFrame(key);
+                       String computedProperty = selector.getComputedPropertiesFromPreviousFrame(this, key);
                        
                        if(computedProperty != null) {
                                computedProperties.put(key, computedProperty);
@@ -724,45 +724,7 @@ public class AnimatorFrame extends AnimatorModel {
 //     return null;            
 //    }
 
-    /**
-     * Get computed properties from previous frames
-     * 
-     * @param css3 key
-     * @return value for input key
-     */
-       public String getComputedPropertiesFromPreviousFrame(String key) {              
-               AnimatorFrame previousFrame = getPreviousAnimatorFrame(this);
-       while(previousFrame != null) {
-               String value = previousFrame.getProperty(key);
-               if(value != null) {
-                       return value;
-               }
-               previousFrame = getPreviousAnimatorFrame(previousFrame);
-       }
-       
-       return null;            
-    }
-    
-    /**
-     * Get previous AnimatorFrame
-     * 
-     * @param current AnimatorFrame
-     * @return previous AnimatorFrame
-     */
-    private static AnimatorFrame getPreviousAnimatorFrame(AnimatorFrame frame) {
-       
-       AnimatorFrame previousFrame = null;
-       AnimatorKeyframe currentKeyframe = (AnimatorKeyframe)frame.getParent();
-       previousFrame = (AnimatorFrame)currentKeyframe.getPrevChild(frame);
-       if(previousFrame == null) {
-               AnimatorKeyframe previousKeyframe = (AnimatorKeyframe)currentKeyframe.getParent().getPrevChild(currentKeyframe);
-               if(previousKeyframe != null) {
-                       previousFrame = previousKeyframe.getLastFrame();
-               }
-       }
-       
-       return previousFrame;
-    }
+
     
     /**
      * Get Computed Properties
index 4780310..71b3141 100644 (file)
@@ -23,7 +23,6 @@
 
 package org.tizen.webuibuilder.animator.model;
 
-import java.util.List;
 import java.util.Queue;
 
 import org.tizen.webuibuilder.animator.AnimatorConstants;
@@ -428,8 +427,9 @@ public class AnimatorKeyframe extends AnimatorModel {
     public boolean mergeKeyframe(AnimatorFrame frame, Queue<AnimatorKeyframe> removedKeyframes) {
        boolean result = false;
         AnimatorSelector selector = (AnimatorSelector) getParent();
-        AnimatorKeyframe previousParent = (AnimatorKeyframe) selector.getPrevChild(this);
+//        AnimatorKeyframe previousParent = (AnimatorKeyframe) selector.getPrevChild(this);
         AnimatorKeyframe nextParent = (AnimatorKeyframe) selector.getNextChild(this);
+        AnimatorKeyframe previousParent = selector.getPreviousAnimatorKeyframeByTime(this);
         int keyframeChildrenSize = getChildrenSize();
         if (keyframeChildrenSize == 1) {// case 1
             if (getChildIndex(frame) == 0) {
index e54b4ef..3569b05 100644 (file)
@@ -499,22 +499,12 @@ public class AnimatorSelector extends AnimatorModel {
         return null;
     }
     
-    /*public List<AnimatorKeyframe> getCurrentKeyframes(double currentTime) {
-       List<AnimatorKeyframe> keyframes = new ArrayList<AnimatorKeyframe>();
-        for (AnimatorModel model : getChildren()) {
-             AnimatorKeyframe keyframe = (AnimatorKeyframe) model;
-             if (keyframe.isInclude(currentTime)) {
-                keyframes.add(keyframe);
-             }
-         }
-       return keyframes;
-    }*/
     
     public List<AnimatorKeyframe> getPreviousKeyframesByCurrentTime(double currentTime) {
        List<AnimatorKeyframe> keyframes = new ArrayList<AnimatorKeyframe>();
                for (AnimatorModel model : getChildren()) {
                        AnimatorKeyframe keyframe = (AnimatorKeyframe) model;
-                       if (Double.compare(keyframe.getDelay(), currentTime) <= 0) {
+                       if (Double.compare(keyframe.getDelay(), currentTime) < 0) {
                                keyframes.add(keyframe);
                        }
         }
@@ -549,40 +539,40 @@ public class AnimatorSelector extends AnimatorModel {
        return null;
     }
 
-    /**
-     * Merge Frame if two frame at same time If next frame has property that has previous frame,
-     * next frame's property will be ignored
-     * 
-     * @param keyframe
-     * @return
-     */
-    public boolean mergeKeyframe(AnimatorKeyframe keyframe) {
-        boolean result = false;
-        AnimatorKeyframe previousKeyframe = (AnimatorKeyframe) getPrevChild(keyframe);
-        AnimatorKeyframe nextKeyframe = (AnimatorKeyframe) getNextChild(keyframe);
-
-        if (previousKeyframe != null) {
-            AnimatorFrame previousFrame = previousKeyframe.getLastFrame();
-            if (previousFrame != null) {
-                if (!previousFrame.hasSamePropertyValue(keyframe.getFirstFrame())) {
-                    previousKeyframe.mergeFrame(keyframe.getFirstFrame(), true);
-                    keyframe = previousKeyframe;
-                    result = true;
-                }
-            }
-        }
-
-        if (nextKeyframe != null) {
-            AnimatorFrame nextFrame = nextKeyframe.getFirstFrame();
-            if (nextFrame != null) {
-                if (!keyframe.getLastFrame().hasSamePropertyValue(nextFrame)) {
-                    keyframe.mergeFrame(nextFrame, true);
-                }
-            }
-        }
-
-        return result;
-    }
+//    /**
+//     * Merge Frame if two frame at same time If next frame has property that has previous frame,
+//     * next frame's property will be ignored
+//     * 
+//     * @param keyframe
+//     * @return
+//     */
+//    public boolean mergeKeyframe(AnimatorKeyframe keyframe) {
+//        boolean result = false;
+//        AnimatorKeyframe previousKeyframe = (AnimatorKeyframe) getPrevChild(keyframe);
+//        AnimatorKeyframe nextKeyframe = (AnimatorKeyframe) getNextChild(keyframe);
+//
+//        if (previousKeyframe != null) {
+//            AnimatorFrame previousFrame = previousKeyframe.getLastFrame();
+//            if (previousFrame != null) {
+//                if (!previousFrame.hasSamePropertyValue(keyframe.getFirstFrame())) {
+//                    previousKeyframe.mergeFrame(keyframe.getFirstFrame(), true);
+//                    keyframe = previousKeyframe;
+//                    result = true;
+//                }
+//            }
+//        }
+//
+//        if (nextKeyframe != null) {
+//            AnimatorFrame nextFrame = nextKeyframe.getFirstFrame();
+//            if (nextFrame != null) {
+//                if (!keyframe.getLastFrame().hasSamePropertyValue(nextFrame)) {
+//                    keyframe.mergeFrame(nextFrame, true);
+//                }
+//            }
+//        }
+//
+//        return result;
+//    }
     
     /**
      * Check with two keyframes that has same properties
@@ -655,22 +645,71 @@ 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);
+    public String getComputedPropertiesFromCustomPreviousFrame(AnimatorFrame currentFrame, String key) {
+       AnimatorFrame previousFrame = getPreviousAnimatorFrameByTime(currentFrame);
+       while(previousFrame != null) {
+               if(!previousFrame.isPredefined()) {
+                       String value = previousFrame.getProperty(key);
                        if(value != null) {
                                return value;
                        }
                }
-                       frame = getPreviousAnimatorFrameByTime(frame);
+               previousFrame = getPreviousAnimatorFrameByTime(previousFrame);
        }
        return null;
     }
     
+    /**
+     * Get computed properties from previous frames
+     * 
+     * @param css3 key
+     * @return value for input key
+     */
+       public String getComputedPropertiesFromPreviousFrame(AnimatorFrame currentFrame, String key) {          
+               AnimatorFrame previousFrame = getPreviousAnimatorFrameByTime(currentFrame);
+       while(previousFrame != null) {
+               String value = previousFrame.getProperty(key);
+               if(value != null) {
+                       return value;
+               }
+               previousFrame = getPreviousAnimatorFrameByTime(previousFrame);
+       }
+       
+       return null;            
+    }
+    
+       
+       
+       public AnimatorKeyframe getPreviousAnimatorKeyframeByTime(AnimatorModel model) {
+               Double baseTime = 0.0;
+               if(model instanceof AnimatorKeyframe) {
+                       baseTime = ((AnimatorKeyframe)model).getDelay(); 
+               } else {
+                       baseTime = ((AnimatorKeyframe)model.getParent()).getDelay(); 
+               }
+               
+               AnimatorKeyframe result = null;
+               for(AnimatorKeyframe keyframe : getPreviousKeyframesByCurrentTime(baseTime)) {
+                       if(result != null) {
+                               if(Double.compare(result.getDelay() + result.getDuration(), keyframe.getDelay() + keyframe.getDuration()) < 0) {
+                                       result = keyframe;
+                               } else if (Double.compare(result.getDelay() + result.getDuration(), keyframe.getDelay() + keyframe.getDuration()) == 0){
+                                       if(result.getName().contains("custom")) {
+                                               continue;
+                                       } else {
+                                               if(keyframe.getName().contains("custom")) {
+                                                       result = keyframe;
+                                               }
+                                       }
+                               }
+                       } else {
+                               result = keyframe;
+                       }
+               }
+               return result;
+       }
 
-    private AnimatorFrame getPreviousAnimatorFrameByTime(AnimatorFrame currentFrame) {         
+    public AnimatorFrame getPreviousAnimatorFrameByTime(AnimatorFrame currentFrame) {          
        
        AnimatorKeyframe currentKeyframe = (AnimatorKeyframe)currentFrame.getParent();
                double baseTime = currentKeyframe.getDelay() + currentFrame.getFrameTime();
index d950d4a..10ececf 100644 (file)
@@ -89,7 +89,7 @@ public class HoverBrowserViewer extends ScrollingGraphicalViewer
 
     private DesignerGoingBridge goingBridge;
     // private int currentPage = 0;
-    private EditPart currentPageEditPart = null;
+    protected EditPart currentPageEditPart = null;
     private HoverViewerRootEditPart rootEditPart;
     protected ImageBufferedBrowserProvider webBrowser;
     protected PageData pageData;
@@ -408,9 +408,15 @@ public class HoverBrowserViewer extends ScrollingGraphicalViewer
     }
 
     public PageData getPageData() {
+//     if(currentPageEditPart != null && currentPageEditPart.getModel() instanceof Part) {
+//             Part part = (Part) currentPageEditPart.getModel();
+//             if(part.getOwnerRef() instanceof PageData) {
+//                     return (PageData) part.getOwnerRef();
+//             }
+//     }
         return pageData;
     }
-
+    
     public ImageBufferedBrowserProvider getWebBrowser() {
         return webBrowser;
     }