Exemple #1
0
 public static void MoveVertexAnimations(SceneElement source, PropertyReference sourceReferencePrefix, SceneElement destination, PropertyReference destinationReferencePrefix, Transform transform, PathAnimationMovePackage animationMove)
 {
     foreach (StoryboardTimelineSceneNode parent in source.ViewModel.AnimationEditor.EnumerateStoryboardsForContainer(source.StoryboardContainer))
     {
         foreach (TimelineSceneNode timeline1 in (IEnumerable <TimelineSceneNode>)parent.Children)
         {
             if (timeline1.TargetElement == source && timeline1.TargetProperty != null && sourceReferencePrefix.IsPrefixOf(timeline1.TargetProperty))
             {
                 PropertyReference propertyReference = destinationReferencePrefix;
                 for (int count = sourceReferencePrefix.Count; count < timeline1.TargetProperty.Count; ++count)
                 {
                     propertyReference = propertyReference.Append(timeline1.TargetProperty[count]);
                 }
                 TimelineSceneNode timeline2 = (TimelineSceneNode)source.ViewModel.GetSceneNode(timeline1.DocumentNode.Clone(timeline1.DocumentContext));
                 if (transform != null)
                 {
                     PathCommandHelper.ApplyTransformToAnimation(timeline2, transform);
                 }
                 timeline2.TargetProperty = propertyReference;
                 timeline2.TargetElement  = (SceneNode)destination;
                 animationMove.Add(parent, timeline2);
                 animationMove.Remove(parent, timeline1);
             }
         }
     }
 }
        public static bool IsAnimationProxy(TimelineSceneNode timeline)
        {
            KeyFrameAnimationSceneNode animationSceneNode = timeline as KeyFrameAnimationSceneNode;

            if (animationSceneNode != null)
            {
                return(animationSceneNode.IsAnimationProxy);
            }
            return(false);
        }
        public static bool IsOptimizedAnimation(TimelineSceneNode timeline)
        {
            FromToAnimationSceneNode animationSceneNode = timeline as FromToAnimationSceneNode;

            if (animationSceneNode != null)
            {
                return(animationSceneNode.IsOptimized);
            }
            return(false);
        }
        public void Update(SceneUpdateTypeFlags updateType, DocumentNodeChangeList damage, uint changeStamp)
        {
            if (this.activeStoryboard == null || damage.Count == 0 || ((int)this.lastUpdateChangeStamp == (int)changeStamp || !this.activeStoryboard.IsInDocument))
            {
                return;
            }
            this.lastUpdateChangeStamp = changeStamp;
            bool flag = false;

            foreach (DocumentNodeChange documentNodeChange in damage.DistinctChanges)
            {
                if (this.activeStoryboard.DocumentNode.Marker.Equals((object)documentNodeChange.ParentNode.Marker) || this.activeStoryboard.DocumentNode.Marker.Contains(documentNodeChange.ParentNode.Marker))
                {
                    if (documentNodeChange.IsPropertyChange && documentNodeChange.ParentNode.IsInDocument)
                    {
                        DocumentCompositeNode documentCompositeNode = documentNodeChange.ParentNode;
                        while (documentCompositeNode != null && !PlatformTypes.Timeline.IsAssignableFrom((ITypeId)documentCompositeNode.Type))
                        {
                            documentCompositeNode = documentCompositeNode.Parent;
                        }
                        FromToAnimationSceneNode animationSceneNode = this.viewModel.GetSceneNode((DocumentNode)documentCompositeNode) as FromToAnimationSceneNode;
                        AnimationProxyManager.AnimationProxyData animationProxyData;
                        if (animationSceneNode != null && animationSceneNode.IsOptimized && this.targetPathToProxyData.TryGetValue(new AnimationProxyManager.TargetNamePropertyPair((TimelineSceneNode)animationSceneNode), out animationProxyData))
                        {
                            animationProxyData.OptimizedAnimationPropertyChanged = true;
                        }
                    }
                    else if (documentNodeChange.Action == DocumentNodeChangeAction.Add && PlatformTypes.Timeline.IsAssignableFrom((ITypeId)documentNodeChange.NewChildNode.Type))
                    {
                        TimelineSceneNode timeline = this.viewModel.GetSceneNode(documentNodeChange.NewChildNode) as TimelineSceneNode;
                        AnimationProxyManager.AnimationProxyData animationProxyData;
                        if (timeline != null && AnimationProxyManager.IsOptimizedAnimation(timeline) && this.targetPathToProxyData.TryGetValue(new AnimationProxyManager.TargetNamePropertyPair(timeline), out animationProxyData))
                        {
                            animationProxyData.OptimizedAnimationAdded = true;
                        }
                    }
                    flag = true;
                }
            }
            if (!flag)
            {
                return;
            }
            if ((updateType & SceneUpdateTypeFlags.UndoRedo) == SceneUpdateTypeFlags.None && (updateType & SceneUpdateTypeFlags.Canceled) == SceneUpdateTypeFlags.None)
            {
                this.UpdateProxyTable(AnimationProxyManager.AllowedChange.Any);
            }
            else
            {
                this.UpdateProxyTable(AnimationProxyManager.AllowedChange.None);
            }
        }
        protected virtual void ExecuteInternal(SceneNode targetStateOrStateGroup)
        {
            VisualStateSceneNode sourceState = this.SourceState;

            using (SceneEditTransaction editTransaction = this.ViewModel.CreateEditTransaction(this.UndoString, false))
            {
                VisualStateSceneNode      visualStateSceneNode = targetStateOrStateGroup as VisualStateSceneNode;
                VisualStateGroupSceneNode stateGroupSceneNode  = targetStateOrStateGroup as VisualStateGroupSceneNode;
                if (stateGroupSceneNode != null)
                {
                    visualStateSceneNode = stateGroupSceneNode.AddState(this.ViewModel.ActiveEditingContainer, sourceState.Name + StringTable.SceneModelDuplicateLabelSuffix);
                }
                if (visualStateSceneNode.Storyboard == null)
                {
                    visualStateSceneNode.Storyboard = StoryboardTimelineSceneNode.Factory.Instantiate(this.ViewModel);
                }
                Dictionary <TimelineSceneNode.PropertyNodePair, List <TimelineSceneNode> > dictionary = new Dictionary <TimelineSceneNode.PropertyNodePair, List <TimelineSceneNode> >();
                foreach (TimelineSceneNode timelineSceneNode in (IEnumerable <TimelineSceneNode>)visualStateSceneNode.Storyboard.Children)
                {
                    if (!dictionary.ContainsKey(timelineSceneNode.TargetElementAndProperty))
                    {
                        dictionary.Add(timelineSceneNode.TargetElementAndProperty, new List <TimelineSceneNode>(1));
                    }
                    dictionary[timelineSceneNode.TargetElementAndProperty].Add(timelineSceneNode);
                }
                List <TimelineSceneNode> animationsToCopy = this.GetAnimationsToCopy();
                bool flag = false;
                foreach (SceneNode sceneNode in animationsToCopy)
                {
                    TimelineSceneNode timelineSceneNode1 = this.ViewModel.GetSceneNode(sceneNode.DocumentNode.Clone(this.ViewModel.DocumentRoot.DocumentContext)) as TimelineSceneNode;
                    visualStateSceneNode.Storyboard.Children.Add(timelineSceneNode1);
                    if (dictionary.ContainsKey(timelineSceneNode1.TargetElementAndProperty))
                    {
                        flag = true;
                        foreach (TimelineSceneNode timelineSceneNode2 in dictionary[timelineSceneNode1.TargetElementAndProperty])
                        {
                            visualStateSceneNode.Storyboard.Children.Remove(timelineSceneNode2);
                        }
                    }
                }
                if (flag && this.ViewModel.DefaultView != null)
                {
                    this.ViewModel.DefaultView.ShowBubble(StringTable.AnimationAutoDeletedWarningMessage, MessageBubbleType.Warning);
                }
                editTransaction.Commit();
            }
        }
Exemple #6
0
        public static void ApplyTransformToAnimation(TimelineSceneNode timeline, Transform transform)
        {
            KeyFrameAnimationSceneNode animationSceneNode = timeline as KeyFrameAnimationSceneNode;

            if (animationSceneNode == null)
            {
                return;
            }
            foreach (KeyFrameSceneNode keyFrameSceneNode in animationSceneNode.KeyFrames)
            {
                object obj = keyFrameSceneNode.Value;
                if (obj != null && PlatformTypes.Point.IsAssignableFrom((ITypeId)timeline.Platform.Metadata.GetType(obj.GetType())))
                {
                    Point point1 = (Point)timeline.ViewModel.DefaultView.ConvertToWpfValue(obj);
                    Point point2 = transform.Transform(point1);
                    keyFrameSceneNode.Value = timeline.ViewModel.DefaultView.ConvertFromWpfValue((object)point2);
                }
            }
        }
Exemple #7
0
 private void ChangeAnimationProperty(PropertyReference fromProperty, PropertyReference toProperty, Dictionary <TimelineSceneNode, StoryboardTimelineSceneNode> toAdd, Dictionary <TimelineSceneNode, StoryboardTimelineSceneNode> toRemove, bool exactMatch)
 {
     foreach (StoryboardTimelineSceneNode timelineSceneNode in this.targetElement.ViewModel.AnimationEditor.EnumerateStoryboardsForContainer(this.targetElement.StoryboardContainer))
     {
         foreach (TimelineSceneNode timeline in (IEnumerable <TimelineSceneNode>)timelineSceneNode.Children)
         {
             if (timeline.TargetElement == this.targetElement && timeline.TargetProperty != null)
             {
                 PropertyReference propertyReference = toProperty;
                 bool flag1 = AnimationProxyManager.IsOptimizedAnimation(timeline);
                 bool flag2 = !flag1 && fromProperty.Equals((object)timeline.TargetProperty);
                 if (!flag1 && !exactMatch && !flag2)
                 {
                     flag2 = fromProperty.IsPrefixOf(timeline.TargetProperty);
                     if (flag2)
                     {
                         for (int count = toProperty.Count; count < timeline.TargetProperty.Count; ++count)
                         {
                             propertyReference = propertyReference.Append(timeline.TargetProperty[count]);
                         }
                     }
                 }
                 if (flag2)
                 {
                     if (toRemove != null)
                     {
                         toRemove[timeline] = timelineSceneNode;
                     }
                     TimelineSceneNode index = (TimelineSceneNode)this.targetElement.ViewModel.GetSceneNode(timeline.DocumentNode.Clone(timeline.DocumentContext));
                     index.TargetProperty  = propertyReference;
                     index.ShouldSerialize = true;
                     KeyFrameAnimationSceneNode animationSceneNode = index as KeyFrameAnimationSceneNode;
                     if (animationSceneNode != null)
                     {
                         animationSceneNode.IsAnimationProxy = false;
                     }
                     toAdd[index] = timelineSceneNode;
                 }
             }
         }
     }
 }
 public void Add(StoryboardTimelineSceneNode parent, TimelineSceneNode timeline)
 {
     this.toAdd.Add(new KeyValuePair <StoryboardTimelineSceneNode, TimelineSceneNode>(parent, timeline));
 }
 public TargetNamePropertyPair(TimelineSceneNode timeline)
 {
     this.targetName     = timeline.TargetName;
     this.targetProperty = timeline.TargetProperty;
 }
Exemple #10
0
        public bool Test(SceneNode subject)
        {
            TimelineSceneNode timelineSceneNode = subject as TimelineSceneNode;

            return(timelineSceneNode != null && (this.target == null || this.target == timelineSceneNode.TargetElement) && (this.animationRoot == null || timelineSceneNode.TargetProperty != null && timelineSceneNode.TargetProperty[0] == this.animationRoot) && (this.animationPrefix == null || timelineSceneNode.TargetProperty != null && this.animationPrefix.IsPrefixOf(timelineSceneNode.TargetProperty)));
        }
 protected void RemoveScheduledAnimation(TimelineSceneNode scheduledAnimation)
 {
     this.scheduledAnimations.Remove(scheduledAnimation);
     this.TimelineItemManager.RemoveTimelineItem((SceneNode)scheduledAnimation);
 }
 protected void InsertScheduledAnimation(int index, TimelineSceneNode scheduledAnimation)
 {
     this.scheduledAnimations.Insert(index, scheduledAnimation);
     this.TimelineItemManager.RegisterTimelineItem((SceneNode)scheduledAnimation, (TimelineItem)this);
 }
 protected void AddScheduledAnimation(TimelineSceneNode scheduledAnimation)
 {
     this.scheduledAnimations.Add(scheduledAnimation);
     this.TimelineItemManager.RegisterTimelineItem((SceneNode)scheduledAnimation, (TimelineItem)this);
 }
 protected ScheduledTimelineItem(TimelineItemManager timelineItemManager, StoryboardTimelineSceneNode parentTimeline, TimelineSceneNode scheduledAnimation)
     : base(timelineItemManager)
 {
     this.scheduledAnimations = new List <TimelineSceneNode>();
     this.AddScheduledAnimation(scheduledAnimation);
     this.parentTimeline = parentTimeline;
 }