Example #1
0
        private void AnimateToLayerHelper(SpriteVisual target)
        {
            // Create AnimationGroup for target visual propery animation
            CompositionAnimationGroup animationGroup = _compositor.CreateAnimationGroup();

            // Scale
            Vector3KeyFrameAnimation scaleAnimation = _compositor.CreateVector3KeyFrameAnimation();

            scaleAnimation.InsertKeyFrame(0.0f, target.Scale);
            scaleAnimation.InsertKeyFrame(1.0f, this.DepthTreatment.ChildScale);
            scaleAnimation.Duration = ConfigurationConstants.FocusAnimationDuration;
            scaleAnimation.Target   = "Scale";
            animationGroup.Add(scaleAnimation);

            target.StartAnimationGroup(animationGroup);


            // Update item color to match items in new layer. Preserve content if any.
            var brushType = target.Brush.GetType();

            if (brushType != typeof(CompositionSurfaceBrush) && brushType != typeof(CompositionEffectBrush))
            {
                target.Brush = LayerColor;
            }
        }
Example #2
0
        private void EnsureFunctionBarAninmation(Compositor compositor)
        {
            if (_functionBarAnimation != null)
            {
                return;
            }

            ConnectedAnimationService animationService = ConnectedAnimationService.GetForCurrentView();

            _functionBarAnimation = compositor.CreateAnimationGroup();

            ScalarKeyFrameAnimation offsetAnimation = compositor.CreateScalarKeyFrameAnimation();

            offsetAnimation.Target = "Offset.x";
            offsetAnimation.InsertKeyFrame(0, -5.0f);
            offsetAnimation.InsertKeyFrame(1, 0, animationService.DefaultEasingFunction);
            offsetAnimation.Duration = animationService.DefaultDuration;

            ScalarKeyFrameAnimation opacityAnimation = compositor.CreateScalarKeyFrameAnimation();

            opacityAnimation.Target = "Opacity";
            opacityAnimation.InsertKeyFrame(0, 0);
            opacityAnimation.InsertKeyFrame(1, 1, animationService.DefaultEasingFunction);
            opacityAnimation.Duration = animationService.DefaultDuration;

            _functionBarAnimation.Add(offsetAnimation);
            _functionBarAnimation.Add(opacityAnimation);
        }
        public CompositionAnimationGroup GetShadowFocusAnimations(Compositor compositor, Layer layer)
        {
            var newShadowBlurRadius          = BlurRadius + _focusShadowBlurRadiusIncreaseAmount;
            var oldShadowOffset              = Offset;
            var additionalShadowOffsetAmount = _focusShadowOffsetIncreaseAmount;
            var newShadowOffset              = new Vector3(oldShadowOffset.X + additionalShadowOffsetAmount, oldShadowOffset.Y +
                                                           additionalShadowOffsetAmount, oldShadowOffset.Z + additionalShadowOffsetAmount);


            // Create AnimationGroup
            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            // Blur Radius
            ScalarKeyFrameAnimation shadowBlurAnimation = compositor.CreateScalarKeyFrameAnimation();

            shadowBlurAnimation.InsertKeyFrame(0.0f, BlurRadius);
            shadowBlurAnimation.InsertKeyFrame(1.0f, newShadowBlurRadius);
            shadowBlurAnimation.Duration = ConfigurationConstants.FocusAnimationDuration;
            shadowBlurAnimation.Target   = "BlurRadius";
            animationGroup.Add(shadowBlurAnimation);

            // Offset
            Vector3KeyFrameAnimation shadowOffsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            shadowOffsetAnimation.InsertKeyFrame(0.0f, Offset);
            shadowOffsetAnimation.InsertKeyFrame(1.0f, newShadowOffset);
            shadowOffsetAnimation.Duration = ConfigurationConstants.FocusAnimationDuration;
            shadowOffsetAnimation.Target   = "Offset";
            animationGroup.Add(shadowOffsetAnimation);

            return(animationGroup);
        }
        private static void AssignReorderAnimation(ListViewBase listView, TimeSpan duration)
        {
            Compositor compositor = ElementCompositionPreview.GetElementVisual(listView).Compositor;
            ImplicitAnimationCollection animationCollection = (ImplicitAnimationCollection)listView.GetValue(ReorderAnimationProperty);

            if (animationCollection is null)
            {
                animationCollection = compositor.CreateImplicitAnimationCollection();

                listView.SetValue(ReorderAnimationProperty, animationCollection);
            }

            if (duration == TimeSpan.Zero)
            {
                animationCollection.Remove(nameof(Visual.Offset));
            }
            else
            {
                Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

                offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
                offsetAnimation.Duration = duration;
                offsetAnimation.Target   = nameof(Visual.Offset);

                CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

                animationGroup.Add(offsetAnimation);

                animationCollection[nameof(Visual.Offset)] = animationGroup;
            }
        }
Example #5
0
        private CompositionAnimationGroup CreateOffsetAnimation()
        {
            Vector3KeyFrameAnimation offsetAnimation = _compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromSeconds(.4);
            offsetAnimation.Target   = "Offset";

            ScalarKeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();

            fadeAnimation.InsertKeyFrame(1f, 0.8f);
            fadeAnimation.Duration = TimeSpan.FromSeconds(.4);
            fadeAnimation.Target   = "Opacity";



            ScalarKeyFrameAnimation rotationAnimation = _compositor.CreateScalarKeyFrameAnimation();

            rotationAnimation.InsertKeyFrame(.5f, 0.160f);
            rotationAnimation.InsertKeyFrame(1f, 0f);
            rotationAnimation.Duration = TimeSpan.FromSeconds(.4);
            rotationAnimation.Target   = "RotationAngle";

            CompositionAnimationGroup animationGroup = _compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);
            animationGroup.Add(rotationAnimation);
            animationGroup.Add(fadeAnimation);

            return(animationGroup);
        }
Example #6
0
        private void Batch_Completed(object sender, CompositionBatchCompletedEventArgs args)
        {
            // Start the second part of the animations

            // Get offset/size of new active scenario button
            var activeScenarioNum = _scenarios.IndexOf(_currentScenario);
            var buttonWidth       = (float)ProgressIndicatorStackPanel.Children[activeScenarioNum].RenderSize.Width;
            var buttonOffset      = ProgressIndicatorStackPanel.Children[activeScenarioNum].GetOffset(ProgressIndicatorStackPanel);
            var offsetDeltaX      = Math.Abs(buttonOffset.X - _activeScenarioVisualIndicator.Offset.X);

            CompositionAnimationGroup animationGroup = _compositor.CreateAnimationGroup();

            // Animate line size
            ScalarKeyFrameAnimation sizeShrinkAnimation = _compositor.CreateScalarKeyFrameAnimation();

            sizeShrinkAnimation.Duration = ConfigurationConstants.NavAnimationDuration;
            sizeShrinkAnimation.InsertKeyFrame(0.0f, _activeScenarioVisualIndicator.Size.X);
            sizeShrinkAnimation.InsertKeyFrame(1.0f, buttonWidth);
            sizeShrinkAnimation.Target = "Size.X";
            animationGroup.Add(sizeShrinkAnimation);

            if (buttonOffset.X > _activeScenarioVisualIndicator.Offset.X)
            {
                // Animate line to new offset
                ScalarKeyFrameAnimation offsetAnimation = _compositor.CreateScalarKeyFrameAnimation();
                offsetAnimation.InsertKeyFrame(0.0f, _activeScenarioVisualIndicator.Offset.X);
                offsetAnimation.InsertKeyFrame(1.0f, buttonOffset.X);
                offsetAnimation.Duration = ConfigurationConstants.NavAnimationDuration;
                offsetAnimation.Target   = "Offset.X";
                animationGroup.Add(offsetAnimation);
            }

            _activeScenarioVisualIndicator.StartAnimationGroup(animationGroup);
        }
Example #7
0
        private static CompositionAnimationGroup CreateOffsetAnimation(Compositor compositor)
        {
            // Define Offset Animation for the Animation group
            Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromSeconds(.2);

            // Define Animation Target for this animation to animate using definition.
            offsetAnimation.Target = "Offset";

            //// Define Rotation Animation for Animation Group.
            //ScalarKeyFrameAnimation rotationAnimation = compositor.CreateScalarKeyFrameAnimation();
            //rotationAnimation.InsertKeyFrame(.5f, 0.160f);
            //rotationAnimation.InsertKeyFrame(1f, 0f);
            //rotationAnimation.Duration = TimeSpan.FromSeconds(.4);

            //// Define Animation Target for this animation to animate using definition.
            //rotationAnimation.Target = "RotationAngle";

            // Add Animations to Animation group.
            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);
            //animationGroup.Add(rotationAnimation);

            return(animationGroup);
        }
        private void EnsureAnimation()
        {
            if (_animationGroup != null)
            {
                return;
            }

            var linear = Window.Current.Compositor.CreateLinearEasingFunction();

            _opacityAnimation = Window.Current.Compositor.CreateScalarKeyFrameAnimation();
            _opacityAnimation.DelayBehavior = AnimationDelayBehavior.SetInitialValueBeforeDelay;
            _opacityAnimation.DelayTime     = TimeSpan.FromMilliseconds(200);
            _opacityAnimation.InsertKeyFrame(0, 0);
            _opacityAnimation.InsertKeyFrame(0.2f, 0, linear);
            _opacityAnimation.InsertKeyFrame(1, 1, linear);
            _opacityAnimation.Duration = TimeSpan.FromMilliseconds(600);
            _opacityAnimation.Target   = nameof(Visual.Opacity);

            _flyInTranslationAnimation = Window.Current.Compositor.CreateVector3KeyFrameAnimation();
            _flyInTranslationAnimation.DelayBehavior = AnimationDelayBehavior.SetInitialValueBeforeDelay;
            _flyInTranslationAnimation.DelayTime     = TimeSpan.FromMilliseconds(200);
            _flyInTranslationAnimation.InsertKeyFrame(0, new Vector3(0, 2000, 0));
            _flyInTranslationAnimation.InsertKeyFrame(1, Vector3.Zero);
            _flyInTranslationAnimation.Duration = TimeSpan.FromMilliseconds(600);
            _flyInTranslationAnimation.Target   = "Translation";
            _animationGroup = Window.Current.Compositor.CreateAnimationGroup();
            _animationGroup.Add(_opacityAnimation);
            _animationGroup.Add(_flyInTranslationAnimation);
        }
        internal CompositionAnimationGroup GetCompositionAnimationGroup(UIElement parent)
        {
            Compositor compositor = ElementCompositionPreview.GetElementVisual(parent).Compositor;
            CompositionAnimationGroup animations = compositor.CreateAnimationGroup();

            foreach (IImplicitTimeline timeline in this)
            {
                animations.Add(timeline.GetAnimation(parent, out _));
            }

            return(animations);
        }
Example #10
0
        private CompositionAnimationGroup CreateOpacityAnimation()
        {
            ScalarKeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();

            fadeAnimation.InsertKeyFrame(1.0f, 0.0f);
            fadeAnimation.Duration = TimeSpan.FromSeconds(.35);
            fadeAnimation.Target   = "Opacity";
            CompositionAnimationGroup animationGroup = _compositor.CreateAnimationGroup();

            animationGroup.Add(fadeAnimation);

            return(animationGroup);
        }
        private static CompositionAnimationGroup CreateOffsetAnimation(Compositor compositor, double duration)
        {
            Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromMilliseconds(duration);
            offsetAnimation.Target   = nameof(Visual.Offset);

            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);

            return(animationGroup);
        }
Example #12
0
        public static CompositionAnimationGroup CreateListOffsetAnimationGroup(Compositor compositor)
        {
            Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromMilliseconds(400);
            offsetAnimation.Target   = "Offset";

            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);

            return(animationGroup);
        }
Example #13
0
        public static void SetupImplicitShowAnimations(UIElement target)
        {
            Compositor compositor = ElementCompositionPreview.GetElementVisual(target).Compositor;
            CompositionAnimationGroup animations = compositor.CreateAnimationGroup();

            ScalarKeyFrameAnimation scalarAnimation = compositor.CreateScalarKeyFrameAnimation();

            scalarAnimation.InsertKeyFrame(0.0f, 0f);
            scalarAnimation.InsertKeyFrame(1.0f, 1f);
            scalarAnimation.Duration = TimeSpan.FromSeconds(3);
            scalarAnimation.Target   = nameof(Visual.Opacity);

            animations.Add(scalarAnimation);

            ElementCompositionPreview.SetImplicitShowAnimation(target, animations);
        }
Example #14
0
        private CompositionAnimationGroup CreateLayoutAnimation(Compositor compositor)
        {
            var offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromSeconds(0.5);

            //Define Animation Target for this animation to animate using definition.
            offsetAnimation.Target = nameof(Visual.Offset);

            //Add Animations to Animation group.
            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);

            return(animationGroup);
        }
        private static CompositionAnimationGroup CreateOffsetAnimation(Compositor compositor)
        {
            // Define Offset Animation for the Animation group
            Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromSeconds(.3);

            // Define Animation Target for this animation to animate using definition.
            offsetAnimation.Target = "Offset";

            // Add Animation to Animation group.
            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);

            return(animationGroup);
        }
Example #16
0
        private void UpdateActiveScenarioIndicator(Scenario oldScenario)
        {
            oldScenario.IsActive      = false;
            _currentScenario.IsActive = true;

            var activeScenarioNum = _scenarios.IndexOf(_currentScenario);

            // Update nav active scenario indicator
            // Get offset/size of new active scenario button
            var buttonWidth  = (float)ProgressIndicatorStackPanel.Children[activeScenarioNum].RenderSize.Width;
            var buttonOffset = ProgressIndicatorStackPanel.Children[activeScenarioNum].GetOffset(ProgressIndicatorStackPanel);
            var offsetDeltaX = Math.Abs(buttonOffset.X - _activeScenarioVisualIndicator.Offset.X);

            // Scoped batch for first half of the animation
            var batch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);

            batch.Completed += Batch_Completed;

            CompositionAnimationGroup animationGroup = _compositor.CreateAnimationGroup();

            // Animate line size
            ScalarKeyFrameAnimation sizeGrowAnimation = _compositor.CreateScalarKeyFrameAnimation();

            sizeGrowAnimation.Duration = ConfigurationConstants.NavAnimationDuration;
            sizeGrowAnimation.InsertKeyFrame(0.0f, _activeScenarioVisualIndicator.Size.X);
            sizeGrowAnimation.InsertKeyFrame(1.0f, offsetDeltaX + _activeScenarioVisualIndicator.Size.X);
            sizeGrowAnimation.Target = "Size.X";
            if (buttonOffset.X < _activeScenarioVisualIndicator.Offset.X)
            {
                // Add offset animation to size change, to make the line appear to move to the left
                ScalarKeyFrameAnimation offsetAnimation = _compositor.CreateScalarKeyFrameAnimation();
                offsetAnimation.InsertKeyFrame(0.0f, _activeScenarioVisualIndicator.Offset.X);
                offsetAnimation.InsertKeyFrame(1.0f, buttonOffset.X);
                offsetAnimation.Duration = ConfigurationConstants.NavAnimationDuration;
                offsetAnimation.Target   = "Offset.X";
                animationGroup.Add(offsetAnimation);
            }

            animationGroup.Add(sizeGrowAnimation);

            _activeScenarioVisualIndicator.StartAnimationGroup(animationGroup);

            batch.End();
        }
Example #17
0
        private void Dispose(bool IsDisposing)
        {
            _visual?.Dispose();
            _visual = null;

            _brush?.Dispose();
            _brush = null;

            _surface?.Dispose();
            _surface = null;

            _animations?.Dispose();
            _animations = null;

            if (IsDisposing)
            {
                GC.SuppressFinalize(this);
            }
        }
Example #18
0
        public static ImplicitAnimationCollection CreateReorderAnimationCollection(MUXC.ItemsRepeater itemsRepeater)
        {
            Compositor compositor = ElementCompositionPreview.GetElementVisual(itemsRepeater).Compositor;
            Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();

            offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
            offsetAnimation.Duration = TimeSpan.FromMilliseconds(ReorderAnimationDuration);
            offsetAnimation.Target   = nameof(Visual.Offset);

            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            animationGroup.Add(offsetAnimation);

            ImplicitAnimationCollection animationCollection = compositor.CreateImplicitAnimationCollection();

            animationCollection[nameof(Visual.Offset)] = animationGroup;

            return(animationCollection);
        }
Example #19
0
        public void AnimateAddedVisual(SpriteVisual target)
        {
            float   currShadowBlurRadius = 0f;
            Vector3 currShadowOffset     = new Vector3();

            if (target.Shadow != null)
            {
                currShadowBlurRadius = ((DropShadow)(target.Shadow)).BlurRadius;
                currShadowOffset     = ((DropShadow)(target.Shadow)).Offset;
            }
            else
            {
                DropShadow shadow = _compositor.CreateDropShadow();
                shadow.Color   = ConfigurationConstants.ShadowColor;
                shadow.Opacity = ConfigurationConstants.ShadowOpacity;
                target.Shadow  = shadow;
            }

            // Create AnimationGroup for shadow change animation
            CompositionAnimationGroup animationGroup = _compositor.CreateAnimationGroup();

            // Animate shadow blur radius change
            ScalarKeyFrameAnimation shadowBlurAnimation = _compositor.CreateScalarKeyFrameAnimation();

            shadowBlurAnimation.InsertKeyFrame(0.0f, currShadowBlurRadius);
            shadowBlurAnimation.InsertKeyFrame(1.0f, DepthTreatment.ShadowTreatment.BlurRadius);
            shadowBlurAnimation.Duration = ConfigurationConstants.FocusAnimationDuration;
            shadowBlurAnimation.Target   = "BlurRadius";
            animationGroup.Add(shadowBlurAnimation);

            // Animate shadow offset change
            Vector3KeyFrameAnimation shadowOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation();

            shadowOffsetAnimation.InsertKeyFrame(0.0f, currShadowOffset);
            shadowOffsetAnimation.InsertKeyFrame(1.0f, DepthTreatment.ShadowTreatment.Offset);
            shadowOffsetAnimation.Duration = ConfigurationConstants.FocusAnimationDuration;
            shadowOffsetAnimation.Target   = "Offset";
            animationGroup.Add(shadowOffsetAnimation);

            target.Shadow.StartAnimationGroup(animationGroup);

            AnimateToLayerHelper(target);
        }
        public CompositionAnimationGroup GetVisualFocusAnimations(Compositor compositor, Layer layer)
        {
            var oldscale = ChildScale;
            var newScale = new Vector3(oldscale.X * _focusScaleIncreaseFactor, oldscale.Y * _focusScaleIncreaseFactor, oldscale.Z);

            // Create AnimationGroup
            CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();

            // Scale
            Vector3KeyFrameAnimation scaleAnimation = compositor.CreateVector3KeyFrameAnimation();

            scaleAnimation.InsertKeyFrame(0.0f, oldscale);
            scaleAnimation.InsertKeyFrame(1.0f, newScale);
            scaleAnimation.Duration = ConfigurationConstants.FocusAnimationDuration;
            scaleAnimation.Target   = "Scale";
            animationGroup.Add(scaleAnimation);

            return(animationGroup);
        }
Example #21
0
        private void EnsureImplicitAnimations(FrameworkElement element)
        {
            if (_implicitAnimations == null)
            {
                Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;

                CubicBezierEasingFunction easeIn = compositor.CreateCubicBezierEasingFunction(new Vector2(0.215f, 0.61f), new Vector2(0.355f, 1f));

                Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
                offsetAnimation.Target = nameof(Visual.Offset);
                offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue", easeIn);
                offsetAnimation.Duration = TimeSpan.FromMilliseconds(500);

                CompositionAnimationGroup animationGroup = compositor.CreateAnimationGroup();
                animationGroup.Add(offsetAnimation);

                _implicitAnimations = compositor.CreateImplicitAnimationCollection();
                _implicitAnimations[nameof(Visual.Offset)] = animationGroup;
            }
        }
Example #22
0
        private void CreateAnimation(Size TargetSize, Vector3 StartOffset, bool OnTop, TimeSpan Duration)
        {
            if (easing == null)
            {
                easing = _compositor.CreateCubicBezierEasingFunction(new Vector2(0.17f, 0.67f), new Vector2(0.44f, 0.999f));
            }

            _animations = _compositor.CreateAnimationGroup();

            var scalean = _compositor.CreateVector3KeyFrameAnimation();

            scalean.InsertKeyFrame(0f, Vector3.Zero);
            scalean.InsertKeyFrame(0.2f, Vector3.One, easing);
            scalean.InsertKeyFrame(1f, new Vector3(0.06f, 0.06f, 1f), easing);
            scalean.Duration     = Duration;
            scalean.Target       = "Scale";
            scalean.StopBehavior = AnimationStopBehavior.SetToInitialValue;

            var offsetan = _compositor.CreateVector3KeyFrameAnimation();

            offsetan.InsertKeyFrame(0f, StartOffset, easing);
            if (OnTop)
            {
                //在上半部分
                offsetan.InsertKeyFrame(1f, new Vector3(rnd.Next(-(int)TargetSize.Width, (int)TargetSize.Width) + (int)TargetSize.Width / 2, rnd.Next(-(int)(TargetSize.Height * 1.5), 0) + (int)TargetSize.Height / 2, 0f), easing);
            }
            else
            {
                //在下半部分
                offsetan.InsertKeyFrame(1f, new Vector3(rnd.Next(-(int)TargetSize.Width, (int)TargetSize.Width) + (int)TargetSize.Width / 2, rnd.Next(0, (int)(TargetSize.Height * 1.5)) + (int)TargetSize.Height / 2, 0f), easing);
            }
            offsetan.Duration     = Duration;
            offsetan.Target       = "Offset";
            offsetan.StopBehavior = AnimationStopBehavior.SetToInitialValue;

            _animations.Add(scalean);
            _animations.Add(offsetan);
        }
Example #23
0
        public void SetDepthTreatments(DepthTreatmentConfigurations depthTreatmentConfig)
        {
            DepthTreatment = depthTreatmentConfig;
            RefreshApplyDepthTreatments();

            // Shadow Focus Animation
            _shadowAnimationGroup = DepthTreatment.ShadowTreatment.GetShadowFocusAnimations(_compositor, this);
            // Additional Focus Animations
            _visualAnimationGroup = DepthTreatment.GetVisualFocusAnimations(_compositor, this);

            // Create reversed animation groups to run on unfocus
            _reversedShadowAnimationGroup = _compositor.CreateAnimationGroup();
            _reversedVisualAnimationGroup = _compositor.CreateAnimationGroup();
            foreach (KeyFrameAnimation animation in _shadowAnimationGroup)
            {
                animation.Direction = AnimationDirection.Reverse;
                _reversedShadowAnimationGroup.Add(animation);
            }
            foreach (KeyFrameAnimation animation in _visualAnimationGroup)
            {
                animation.Direction = AnimationDirection.Reverse;
                _reversedVisualAnimationGroup.Add(animation);
            }
        }
Example #24
0
 public static void StartAnimation(this CompositionObject compositionObject, CompositionAnimationGroup animation)
 {
     compositionObject.StartAnimationGroup(animation);
 }
        /// <summary>
        /// Initializes the Composition elements
        /// </summary>
        private void InitComposition()
        {
            // Compositor
            _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
            // CompositionGenerator
            _generator = CompositionGeneratorFactory.GetCompositionGenerator(_compositor);
            
            // Fade Out Animation
            _fadeOutAnimation = _compositor.CreateScalarKeyFrameAnimation();
            _fadeOutAnimation.InsertKeyFrame(1f, 0);
            _fadeOutAnimation.Duration = TransitionDuration;
            // Fade In Animation
            _fadeInAnimation = _compositor.CreateScalarKeyFrameAnimation();
            _fadeInAnimation.InsertKeyFrame(1f, 1);
            _fadeInAnimation.Duration = TransitionDuration;
            // Color Animation
            _colorAnimation = _compositor.CreateColorKeyFrameAnimation();
            _colorAnimation.Duration = TransitionDuration;
            // Offset Animation
            _offsetAnimation = _compositor.CreateVector3KeyFrameAnimation();
            _offsetAnimation.Target = "Offset";
            _offsetAnimation.Duration = TransitionDuration;
            _offsetAnimation.InsertKeyFrame(1f, Vector3.Zero);
            // Alignment animations
            _alignXAnimation = _compositor.CreateScalarKeyFrameAnimation();
            _alignXAnimation.Duration = AlignmentTransitionDuration;
            _alignYAnimation = _compositor.CreateScalarKeyFrameAnimation();
            _alignYAnimation.Duration = AlignmentTransitionDuration;

            // ZoomIn Animation Group
            _scaleAnimation = _compositor.CreateVector3KeyFrameAnimation();
            _scaleAnimation.Target = "Scale";
            _scaleAnimation.InsertKeyFrame(1f, Vector3.One);
            _scaleAnimation.Duration = TransitionDuration;
            _zoomInAnimationGroup = _compositor.CreateAnimationGroup();
            _zoomInAnimationGroup.Add(_scaleAnimation);
            _zoomInAnimationGroup.Add(_offsetAnimation);

            // Visuals
            _rootContainer = _compositor.CreateContainerVisual();
            _frameLayer = _compositor.CreateLayerVisual();
            _frameBackgroundVisual = _compositor.CreateSpriteVisual();
            _frameContentVisual = _compositor.CreateSpriteVisual();
            _placeholderContentVisual = _compositor.CreateSpriteVisual();
            _placeholderBackgroundVisual = _compositor.CreateSpriteVisual();
            _nextVisualContent = _compositor.CreateSpriteVisual();

            _frameLayer.Children.InsertAtTop(_frameBackgroundVisual);
            _frameLayer.Children.InsertAtTop(_frameContentVisual);
            _frameLayer.Children.InsertAtTop(_placeholderBackgroundVisual);
            _frameLayer.Children.InsertAtTop(_placeholderContentVisual);
            _frameLayer.Children.InsertAtTop(_nextVisualContent);

            // Placeholder content
            _placeholderContentMask = _generator.CreateGeometrySurface(PlaceholderSize, GetPlaceHolderGeometry(),
                PlaceholderColor, PlaceholderBackground);
            _placeholderContentBrush = _compositor.CreateSurfaceBrush(_placeholderContentMask.Surface);
            _placeholderContentVisual.Brush = _placeholderContentBrush;
            // Placeholder background
            _placeholderBackgroundVisual.Brush = _compositor.CreateColorBrush(PlaceholderBackground);

            // By default placeholder visual will not be visible
            HidePlaceholder();

            // Shadow visual
            _shadowVisual = _compositor.CreateSpriteVisual();

            _rootContainer.Children.InsertAtBottom(_shadowVisual);
            _rootContainer.Children.InsertAtTop(_frameLayer);

            _frameBackgroundVisual.Brush = _compositor.CreateColorBrush(FrameBackground);

            // Create the effect to create the opacity mask
            var layerEffect = new CompositeEffect
            {
                // CanvasComposite.DestinationIn - Intersection of source and mask. 
                // Equation: O = MA * S
                // where O - Output pixel, MA - Mask Alpha, S - Source pixel.
                Mode = CanvasComposite.DestinationIn,
                Sources =
                        {
                            new CompositionEffectSourceParameter("source"),
                            new CompositionEffectSourceParameter("mask")
                        }
            };

            var layerEffectFactory = _compositor.CreateEffectFactory(layerEffect);
            _layerEffectBrush = layerEffectFactory.CreateBrush();

            // The mask for the imageFrame
            _frameLayerMask = _generator.CreateMaskSurface(new Size(0, 0), null);
            _layerEffectBrush.SetSourceParameter("mask", _compositor.CreateSurfaceBrush(_frameLayerMask.Surface));
            // Apply the mask effect to the frameLayer
            _frameLayer.Effect = _layerEffectBrush;

            ElementCompositionPreview.SetElementChildVisual(this, _rootContainer);
        }
        private void StackAndScaleAnimation(bool horizontally, bool fromLeftTop)
        {
            CompositionAnimationGroup animationGroupB = compositor.CreateAnimationGroup();
            CompositionAnimationGroup animationGroupF = compositor.CreateAnimationGroup();

            visualB.CenterPoint = new Vector3((visualB.Size.X / 2.0f), (visualB.Size.Y / 2.0f), 0.0f);
            visualF.CenterPoint = new Vector3((visualF.Size.X / 2.0f), (visualF.Size.Y / 2.0f), 0.0f);

            Vector3 small = new Vector3(0.7f, 0.7f, 7f);
            Vector3 big   = new Vector3(1.4f, 1.4f, 1f);

            int dir = fromLeftTop ? -1 : 1;

            if (isFrontVisible)
            {
                imageBack.Source = Source;
                visualB.Offset   = new Vector3(0f, 0f, 0f);
            }
            else
            {
                imageFront.Source = Source;
                visualF.Offset    = new Vector3(0f, 0f, 0f);
            }
            Vector3 vector;

            if (horizontally)
            {
                vector = new Vector3(dir * (int)ActualWidth, 0f, 0f);
            }
            else
            {
                vector = new Vector3(0f, dir * (int)ActualHeight, 0f);
            }

            if (Direction == Direction.Next)
            {
                if (isFrontVisible)
                {
                    imageBack.SetValue(Canvas.ZIndexProperty, 0);
                    imageFront.SetValue(Canvas.ZIndexProperty, 1);

                    animationGroupB.Add(animations.CreateOpacityAnimation(0.5f, 1f, Duration));
                    animationGroupB.Add(animations.CreateScaleAnimation(small, vOne, Duration));

                    animationGroupF.Add(animations.CreateSlideAnimation(vZero, vector, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
                else
                {
                    imageBack.SetValue(Canvas.ZIndexProperty, 1);
                    imageFront.SetValue(Canvas.ZIndexProperty, 0);

                    animationGroupF.Add(animations.CreateOpacityAnimation(0.5f, 1f, Duration));
                    animationGroupF.Add(animations.CreateScaleAnimation(small, vOne, Duration));

                    animationGroupB.Add(animations.CreateSlideAnimation(vZero, vector, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
            }
            else
            {
                if (isFrontVisible)
                {
                    imageBack.SetValue(Canvas.ZIndexProperty, 1);
                    imageFront.SetValue(Canvas.ZIndexProperty, 0);

                    visualB.Opacity = 1;
                    visualB.Scale   = vOne;
                    animationGroupB.Add(animations.CreateSlideAnimation(vector, vZero, Duration));

                    animationGroupF.Add(animations.CreateOpacityAnimation(1f, 0.5f, Duration));
                    animationGroupF.Add(animations.CreateScaleAnimation(vOne, small, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
                else
                {
                    imageBack.SetValue(Canvas.ZIndexProperty, 0);
                    imageFront.SetValue(Canvas.ZIndexProperty, 1);

                    visualF.Opacity = 1;
                    visualF.Scale   = vOne;
                    animationGroupF.Add(animations.CreateSlideAnimation(vector, vZero, Duration));

                    animationGroupB.Add(animations.CreateOpacityAnimation(1f, 0.5f, Duration));
                    animationGroupB.Add(animations.CreateScaleAnimation(vOne, small, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
            }
        }
        private void ScaleAndOpacityAnimation()
        {
            CompositionAnimationGroup animationGroupB = compositor.CreateAnimationGroup();
            CompositionAnimationGroup animationGroupF = compositor.CreateAnimationGroup();

            visualB.CenterPoint = new Vector3((visualB.Size.X / 2.0f), (visualB.Size.Y / 2.0f), 0.0f);
            visualF.CenterPoint = new Vector3((visualF.Size.X / 2.0f), (visualF.Size.Y / 2.0f), 0.0f);

            oldVisual.Offset = new Vector3(0f, 0f, 0f);
            newVisual.Offset = new Vector3(0f, 0f, 0f);

            Vector3 small = new Vector3(0.7f, 0.7f, 7f);
            Vector3 big   = new Vector3(1.4f, 1.4f, 1f);

            if (Direction == Direction.Next)
            {
                if (isFrontVisible)
                {
                    imageBack.Source = Source;

                    animationGroupB.Add(animations.CreateOpacityAnimation(0f, 1f, Duration));
                    animationGroupB.Add(animations.CreateScaleAnimation(small, vOne, Duration));
                    animationGroupF.Add(animations.CreateOpacityAnimation(1f, 0f, Duration));
                    animationGroupF.Add(animations.CreateScaleAnimation(vOne, big, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
                else
                {
                    imageFront.Source = Source;

                    animationGroupF.Add(animations.CreateOpacityAnimation(0f, 1f, Duration));
                    animationGroupF.Add(animations.CreateScaleAnimation(small, vOne, Duration));
                    animationGroupB.Add(animations.CreateOpacityAnimation(1f, 0f, Duration));
                    animationGroupB.Add(animations.CreateScaleAnimation(vOne, big, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
            }
            else
            {
                if (isFrontVisible)
                {
                    imageBack.Source = Source;

                    animationGroupB.Add(animations.CreateOpacityAnimation(0f, 1f, Duration));
                    animationGroupB.Add(animations.CreateScaleAnimation(big, vOne, Duration));
                    animationGroupF.Add(animations.CreateOpacityAnimation(1f, 0f, Duration));
                    animationGroupF.Add(animations.CreateScaleAnimation(vOne, small, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
                else
                {
                    imageFront.Source = Source;

                    animationGroupF.Add(animations.CreateOpacityAnimation(0f, 1f, Duration));
                    animationGroupF.Add(animations.CreateScaleAnimation(big, vOne, Duration));
                    animationGroupB.Add(animations.CreateOpacityAnimation(1f, 0f, Duration));
                    animationGroupB.Add(animations.CreateScaleAnimation(vOne, small, Duration));

                    visualB.StartAnimationGroup(animationGroupB);
                    visualF.StartAnimationGroup(animationGroupF);
                }
            }
        }
Example #28
0
        private void CreateAnimation()
        {
            ElementCompositionPreview.SetIsTranslationEnabled(this, true);

            var compositor = Window.Current.Compositor;

            _animationGroup = compositor.CreateAnimationGroup();
            _propertySet    = compositor.CreatePropertySet();
            var visual = ElementCompositionPreview.GetElementVisual(this);

            // translation
            var translationAnimation = compositor.CreateScalarKeyFrameAnimation();

            translationAnimation.InsertExpressionKeyFrame(1f, "props.TranslateTo");
            translationAnimation.SetReferenceParameter("props", _propertySet);
            translationAnimation.StopBehavior = AnimationStopBehavior.SetToFinalValue;
            translationAnimation.Duration     = TimeSpan.FromSeconds(0.6);
            _translationY = translationAnimation;

            // shadow
            var shadowVisual = compositor.CreateSpriteVisual();
            var dropShadow   = compositor.CreateDropShadow();

            dropShadow.BlurRadius = 0;
            shadowVisual.Shadow   = dropShadow;
            ElementCompositionPreview.SetElementChildVisual(xamlShadow, shadowVisual);
            _shadow = dropShadow;

            // sync size
            var imgVisual         = ElementCompositionPreview.GetElementVisual(xamlImg);
            var bindSizeAnimation = compositor.CreateExpressionAnimation("hostVisual.Size");

            bindSizeAnimation.SetReferenceParameter("hostVisual", imgVisual);
            shadowVisual.StartAnimation("Size", bindSizeAnimation);

            var blurRadiusAnimationIn = compositor.CreateScalarKeyFrameAnimation();

            blurRadiusAnimationIn.InsertExpressionKeyFrame(1f, "props.BlurRadius");
            blurRadiusAnimationIn.SetReferenceParameter("props", _propertySet);
            blurRadiusAnimationIn.StopBehavior = AnimationStopBehavior.SetToFinalValue;
            blurRadiusAnimationIn.Duration     = TimeSpan.FromSeconds(0.6);
            blurRadiusAnimationIn.Target       = "BlurRadius";
            _blurShadowIn = blurRadiusAnimationIn;

            var blurRadiusAnimationOut = compositor.CreateScalarKeyFrameAnimation();
            var easing = compositor.CreateCubicBezierEasingFunction(new Vector2(0.27f, 0.72f), new Vector2(0.82f, 0.29f));

            blurRadiusAnimationOut.InsertExpressionKeyFrame(1f, "props.BlurRadius");
            blurRadiusAnimationOut.SetReferenceParameter("props", _propertySet);
            blurRadiusAnimationOut.StopBehavior = AnimationStopBehavior.SetToFinalValue;
            blurRadiusAnimationOut.Duration     = TimeSpan.FromSeconds(0.6);
            blurRadiusAnimationOut.Target       = "BlurRadius";
            _blurShadowOut = blurRadiusAnimationOut;

            var opacityAnimation = compositor.CreateScalarKeyFrameAnimation();

            opacityAnimation.InsertExpressionKeyFrame(1f, "props.Opacity");
            opacityAnimation.SetReferenceParameter("props", _propertySet);
            opacityAnimation.StopBehavior = AnimationStopBehavior.SetToFinalValue;
            opacityAnimation.Duration     = TimeSpan.FromSeconds(0.6);
            opacityAnimation.Target       = "Opacity";
            _opacityShadow = opacityAnimation;
        }
        /// <summary>
        /// Disposes the resources
        /// </summary>
        public void Dispose()
        {
            // Clean up resources
            _compositor = null;
            Source = null;
            DataContext = null;
            Foreground = null;
            Background = null;
            _scheduledObject = null;
            _currentObject = null;

            // Clean up Composition Objects
            _imageSurface?.Dispose();
            _imageSurface = null;
            _nextImageSurface?.Dispose();
            _nextImageSurface = null;
            _frameLayerMask?.Dispose();
            _frameLayerMask = null;
            _placeholderContentMask?.Dispose();
            _placeholderContentMask = null;
            _placeholderContentBrush?.Dispose();
            _placeholderContentBrush = null;
            _nextSurfaceBrush?.Dispose();
            _nextSurfaceBrush = null;
            _rootContainer?.Dispose();
            _rootContainer = null;
            _shadowVisual?.Dispose();
            _shadowVisual = null;
            _frameLayer?.Dispose();
            _frameLayer = null;
            _frameBackgroundVisual?.Dispose();
            _frameBackgroundVisual = null;
            _placeholderBackgroundVisual?.Dispose();
            _placeholderBackgroundVisual = null;
            _placeholderContentVisual?.Dispose();
            _placeholderContentVisual = null;
            _frameContentVisual?.Dispose();
            _frameContentVisual = null;
            _nextVisualContent?.Dispose();
            _nextVisualContent = null;
            _shadow?.Dispose();
            _shadow = null;
            _layerEffectBrush?.Dispose();
            _layerEffectBrush = null;
            _imageOptions = null;
            _zoomInAnimationGroup?.Dispose();
            _zoomInAnimationGroup = null;
            _fadeOutAnimation?.Dispose();
            _fadeOutAnimation = null;
            _fadeInAnimation?.Dispose();
            _fadeInAnimation = null;
            _colorAnimation?.Dispose();
            _colorAnimation = null;
            _alignXAnimation?.Dispose();
            _alignXAnimation = null;
            _alignYAnimation?.Dispose();
            _alignYAnimation = null;
            _offsetAnimation?.Dispose();
            _offsetAnimation = null;
            _scaleAnimation?.Dispose();
            _scaleAnimation = null;

            // Dispose the generator at the end to allow the 
            // dependant composition objects to unsubscribe from
            // generator events
            _generator?.Dispose();
            _generator = null;
        }
Example #30
0
        /// <summary>
        /// Creates the default backwards composition animation
        /// </summary>
        /// <param name="outElement"></param>
        /// <param name="inElement"></param>
        /// <returns></returns>
        CompositionStoryboard CreateCompositionExpoZoomBackward(FrameworkElement outElement, FrameworkElement inElement)
        {
            Compositor compositor = ElementCompositionPreview.GetElementVisual(outElement).Compositor;

            Visual outVisual = ElementCompositionPreview.GetElementVisual(outElement);
            Visual inVisual  = ElementCompositionPreview.GetElementVisual(inElement);

            CompositionAnimationGroup outgroup = compositor.CreateAnimationGroup();
            CompositionAnimationGroup ingroup  = compositor.CreateAnimationGroup();

            TimeSpan outDuration = TimeSpan.FromSeconds(0.3);
            TimeSpan inDuration  = TimeSpan.FromSeconds(0.4);

            CubicBezierEasingFunction ease = compositor.CreateCubicBezierEasingFunction(
                new Vector2(0.95f, 0.05f),
                new Vector2(0.79f, 0.04f));

            CubicBezierEasingFunction easeOut = compositor.CreateCubicBezierEasingFunction(
                new Vector2(0.19f, 1.0f),
                new Vector2(0.22f, 1.0f));


            // OUT ELEMENT
            {
                outVisual.CenterPoint = outVisual.Size.X > 0
                    ? new Vector3(outVisual.Size / 2f, 0f)
                    : new Vector3((float)this.ActualWidth / 2f, (float)this.ActualHeight / 2f, 0f);

                // SCALE OUT
                var sO = compositor.CreateVector3KeyFrameAnimation();
                sO.Duration = outDuration;
                sO.Target   = nameof(outVisual.Scale);
                sO.InsertKeyFrame(1, new Vector3(0.7f, 0.7f, 1.0f), ease);
                outgroup.Add(sO);

                // FADE OUT
                var op = compositor.CreateScalarKeyFrameAnimation();
                op.Duration = outDuration;
                op.Target   = nameof(outVisual.Opacity);
                op.InsertKeyFrame(1, 0f, ease);
                outgroup.Add(op);
            }

            // IN ELEMENT
            {
                inVisual.CenterPoint = inVisual.Size.X > 0
                     ? new Vector3(inVisual.Size / 2f, 0f)
                     : new Vector3((float)this.ActualWidth / 2f, (float)this.ActualHeight / 2f, 0f);


                // SCALE IN
                ingroup.Add(
                    inVisual.CreateVector3KeyFrameAnimation(nameof(Visual.Scale))
                    .AddScaleKeyFrame(0, 1.3f)
                    .AddScaleKeyFrame(1, 1f, easeOut)
                    .SetDuration(inDuration)
                    .SetDelayTime(outDuration)
                    .SetDelayBehavior(AnimationDelayBehavior.SetInitialValueBeforeDelay));

                // FADE IN
                inVisual.Opacity = 0f;
                var op = inVisual.Compositor.CreateScalarKeyFrameAnimation();
                op.DelayTime = outDuration;
                op.Duration  = inDuration;
                op.Target    = nameof(outVisual.Opacity);
                op.InsertKeyFrame(1, 0f, easeOut);
                op.InsertKeyFrame(1, 1f, easeOut);
                ingroup.Add(op);
            }

            CompositionStoryboard group = new CompositionStoryboard();

            group.Add(new CompositionTimeline(outVisual, outgroup, ease));
            group.Add(new CompositionTimeline(inVisual, ingroup, easeOut));
            return(group);
        }
 /// <summary>
 /// Adds an ExpressionAnimation&lt;T&gt; to the specified animation group.
 /// </summary>
 /// <typeparam name="T">Type of the property being animated.</typeparam>
 /// <param name="animationGroup">Animation Group</param>
 /// <param name="expressionAnimation">ExpressionAnimation&lt;T&gt;</param>
 public static void Add <T>(this CompositionAnimationGroup animationGroup,
                            ExpressionAnimation <T> expressionAnimation)
 {
     animationGroup.Add(expressionAnimation.Animation);
 }
 /// <summary>
 /// Adds a KeyFrameAnimation&lt;T&gt; to the specified animation group.
 /// </summary>
 /// <typeparam name="T">Type of the property being animated.</typeparam>
 /// <param name="animationGroup">Animation Group</param>
 /// <param name="keyframeAnimation">KeyFrameAnimation&lt;T&gt;</param>
 public static void Add <T>(this CompositionAnimationGroup animationGroup,
                            KeyFrameAnimation <T> keyframeAnimation)
 {
     animationGroup.Add(keyframeAnimation.Animation);
 }