public AnimationBuilder Scale(
            double to,
            double?from           = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            RepeatOption?repeat   = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                Vector3?from3 = from is null ? null : new((float)(double)from);
                Vector3 to3   = new((float)to);

                AddCompositionAnimationFactory(nameof(Visual.Scale), to3, from3, delay, duration, repeat, easingType, easingMode);
            }
            else
            {
                AddXamlTransformDoubleAnimationFactory(nameof(CompositeTransform.ScaleX), to, from, delay, duration, repeat, easingType, easingMode);
                AddXamlTransformDoubleAnimationFactory(nameof(CompositeTransform.ScaleY), to, from, delay, duration, repeat, easingType, easingMode);
            }

            return(this);
        }
コード例 #2
0
        public AnimationBuilder TimedKeyFrames <T, TState>(
            string property,
            TState state,
            Action <ITimedKeyFrameAnimationBuilder <T>, TState> build,
            TimeSpan?delay            = null,
            RepeatOption?repeatOption = null,
            FrameworkLayer layer      = FrameworkLayer.Composition)
            where T : unmanaged
        {
            if (layer == FrameworkLayer.Composition)
            {
                TimedKeyFrameAnimationBuilder <T> .Composition builder = new(property, delay, repeatOption ?? RepeatOption.Once);

                build(builder, state);

                this.compositionAnimationFactories.Add(builder);
            }
            else
            {
                TimedKeyFrameAnimationBuilder <T> .Xaml builder = new(property, delay, repeatOption ?? RepeatOption.Once);

                build(builder, state);

                this.xamlAnimationFactories.Add(builder);
            }

            return(this);
        }
コード例 #3
0
        public AnimationBuilder TimedKeyFrames <T>(
            string property,
            Action <ITimedKeyFrameAnimationBuilder <T> > build,
            TimeSpan?delay      = null,
            RepeatOption?repeat = null,
            AnimationDelayBehavior?delayBehavior = null,
            FrameworkLayer layer = FrameworkLayer.Composition)
            where T : unmanaged
        {
            if (layer == FrameworkLayer.Composition)
            {
                TimedKeyFrameAnimationBuilder <T> .Composition builder = new(
                    property,
                    delay,
                    repeat ?? RepeatOption.Once,
                    delayBehavior ?? DefaultDelayBehavior);

                build(builder);

                this.compositionAnimationFactories.Add(builder);
            }
            else
            {
                TimedKeyFrameAnimationBuilder <T> .Xaml builder = new(property, delay, repeat ?? RepeatOption.Once);

                build(builder);

                this.xamlAnimationFactories.Add(builder);
            }

            return(this);
        }
コード例 #4
0
        public IPropertyAnimationBuilder <double> Size(Axis axis, FrameworkLayer layer = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                return(new PropertyAnimationBuilder <double>(this, Properties.Composition.Size(axis), layer));
            }

            return(new PropertyAnimationBuilder <double>(this, Properties.Xaml.Size(axis), layer));
        }
コード例 #5
0
        public IPropertyAnimationBuilder <double> RotationInDegrees(FrameworkLayer layer = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                return(new PropertyAnimationBuilder <double>(this, nameof(Visual.RotationAngleInDegrees), layer));
            }

            return(new XamlTransformPropertyAnimationBuilder(this, nameof(CompositeTransform.Rotation)));
        }
コード例 #6
0
        public IPropertyAnimationBuilder <double> Translation(Axis axis, FrameworkLayer layer = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                return(new PropertyAnimationBuilder <double>(this, Properties.Composition.Translation(axis), layer));
            }

            return(new XamlTransformPropertyAnimationBuilder(this, Properties.Xaml.Translation(axis)));
        }
コード例 #7
0
        public static IAnimationBuilder Animation([NotNull] this UIElement target, FrameworkLayer layer = FrameworkLayer.Composition)
        {
            switch (layer)
            {
            case FrameworkLayer.Composition: return(new CompositionAnimationBuilder(target));

            case FrameworkLayer.Xaml: return(new XamlAnimationBuilder(target));

            default: throw new ArgumentOutOfRangeException(nameof(layer), layer, $"The {layer} value isn't valid");
            }
        }
コード例 #8
0
        public AnimationBuilder Opacity(
            double to,
            double?from           = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(nameof(Visual.Opacity), (float)to, (float?)from, delay, duration, easingType, easingMode);
            }
            else
            {
                AddXamlAnimationFactory(nameof(UIElement.Opacity), to, from, delay, duration, easingType, easingMode);
            }

            return(this);
        }
コード例 #9
0
        public AnimationBuilder RotationInDegrees(
            double to,
            double?from           = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(nameof(Visual.RotationAngleInDegrees), (float)to, (float?)from, delay, duration, easingType, easingMode);
            }
            else
            {
                AddXamlTransformDoubleAnimationFactory(nameof(CompositeTransform.Rotation), to, from, delay, duration, easingType, easingMode);
            }

            return(this);
        }
コード例 #10
0
        public AnimationBuilder CenterPoint(
            Vector2 to,
            Vector2?from          = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(Properties.Composition.CenterPointXY(), to, from, delay, duration, easingType, easingMode);
            }
            else
            {
                AddXamlTransformDoubleAnimationFactory(nameof(CompositeTransform.CenterX), to.X, from?.X, delay, duration, easingType, easingMode);
                AddXamlTransformDoubleAnimationFactory(nameof(CompositeTransform.CenterY), to.Y, from?.Y, delay, duration, easingType, easingMode);
            }

            return(this);
        }
コード例 #11
0
        public AnimationBuilder CenterPoint(
            Axis axis,
            double to,
            double?from           = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(Properties.Composition.CenterPoint(axis), (float)to, (float?)from, delay, duration, easingType, easingMode);
            }
            else
            {
                AddXamlTransformDoubleAnimationFactory(Properties.Xaml.CenterPoint(axis), to, from, delay, duration, easingType, easingMode);
            }

            return(this);
        }
コード例 #12
0
        public AnimationBuilder Size(
            Vector2 to,
            Vector2?from          = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(Properties.Composition.Size(), to, from, delay, duration, easingType, easingMode);
            }
            else
            {
                AddXamlAnimationFactory(nameof(FrameworkElement.Width), to.X, from?.X, delay, duration, easingType, easingMode);
                AddXamlAnimationFactory(nameof(FrameworkElement.Height), to.Y, from?.Y, delay, duration, easingType, easingMode);
            }

            return(this);
        }
        public AnimationBuilder Translation(
            Axis axis,
            double to,
            double?from           = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            RepeatOption?repeat   = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(Properties.Composition.Translation(axis), (float)to, (float?)from, delay, duration, repeat, easingType, easingMode);
            }
            else
            {
                AddXamlAnimationFactory(Properties.Xaml.Translation(axis), to, from, delay, duration, repeat, easingType, easingMode);
            }

            return(this);
        }
        public AnimationBuilder Rotation(
            double to,
            double?from           = null,
            TimeSpan?delay        = null,
            TimeSpan?duration     = null,
            RepeatOption?repeat   = null,
            EasingType easingType = DefaultEasingType,
            EasingMode easingMode = DefaultEasingMode,
            FrameworkLayer layer  = FrameworkLayer.Composition)
        {
            if (layer == FrameworkLayer.Composition)
            {
                AddCompositionAnimationFactory(nameof(Visual.RotationAngle), (float)to, (float?)from, delay, duration, repeat, easingType, easingMode);
            }
            else
            {
                double?fromDegrees = from * Math.PI / 180;
                double toDegrees   = to * Math.PI / 180;

                AddXamlTransformDoubleAnimationFactory(nameof(CompositeTransform.Rotation), toDegrees, fromDegrees, delay, duration, repeat, easingType, easingMode);
            }

            return(this);
        }
コード例 #15
0
        public AnimationBuilder NormalizedKeyFrames <T>(
            string property,
            Action <INormalizedKeyFrameAnimationBuilder <T> > build,
            TimeSpan?delay            = null,
            TimeSpan?duration         = null,
            RepeatOption?repeatOption = null,
            FrameworkLayer layer      = FrameworkLayer.Composition)
            where T : unmanaged
        {
            if (layer == FrameworkLayer.Composition)
            {
                NormalizedKeyFrameAnimationBuilder <T> .Composition builder = new(
                    property,
                    delay,
                    duration ?? DefaultDuration,
                    repeatOption ?? RepeatOption.Once);

                build(builder);

                this.compositionAnimationFactories.Add(builder);
            }
            else
            {
                NormalizedKeyFrameAnimationBuilder <T> .Xaml builder = new(
                    property,
                    delay,
                    duration ?? DefaultDuration,
                    repeatOption ?? RepeatOption.Once);

                build(builder);

                this.xamlAnimationFactories.Add(builder);
            }

            return(this);
        }
コード例 #16
0
 private sealed record PropertyAnimationBuilder <T>(
     AnimationBuilder Builder,
     string Property,
     FrameworkLayer Layer)
     : IPropertyAnimationBuilder <T>
コード例 #17
0
 public IPropertyAnimationBuilder <double> Opacity(FrameworkLayer layer = FrameworkLayer.Composition)
 {
     return(new PropertyAnimationBuilder <double>(this, nameof(Visual.Opacity), layer));
 }