Browse Source

[Breaking Change] Replace RepeatCount with IterationCount.

Jumar Macato 7 years ago
parent
commit
7e023ee5af

+ 2 - 2
samples/RenderDemo/Pages/AnimationsPage.xaml

@@ -43,7 +43,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
       <Style Selector="Border.Rect1:pointerover">
         <Style.Animations>
           <Animation Duration="0:0:2.5"
-                     RepeatCount="4"
+                     IterationCount="4"
                      FillMode="None"
                      PlaybackDirection="AlternateReverse"
                      Easing="SineEaseInOut">
@@ -73,7 +73,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
         <Style.Animations>
           <Animation Duration="0:0:0.5"
                      Easing="QuadraticEaseInOut"
-                     RepeatCount="Loop">
+                     IterationCount="Loop">
             <KeyFrame Cue="50%">
               <Setter Property="ScaleTransform.ScaleX" Value="0.8"/>
               <Setter Property="ScaleTransform.ScaleY" Value="0.8"/>

+ 1 - 1
samples/RenderDemo/Pages/ClippingPage.xaml

@@ -8,7 +8,7 @@ xmlns="https://github.com/avaloniaui">
         </Style>
         <Style Selector="Border#clipChild">
           <Style.Animations>
-            <Animation Duration="0:0:2" RepeatCount="Loop">
+            <Animation Duration="0:0:2" IterationCount="Loop">
               <KeyFrame Cue="100%">
                 <Setter Property="RotateTransform.Angle" Value="360"/>
               </KeyFrame>

+ 2 - 2
src/Avalonia.Animation/Animation.cs

@@ -32,7 +32,7 @@ namespace Avalonia.Animation
         /// <summary>
         /// Gets or sets the repeat count for this animation.
         /// </summary>
-        public RepeatCount RepeatCount { get; set; }
+        public IterationCount IterationCount { get; set; } = new IterationCount(1);
 
         /// <summary>
         /// Gets or sets the playback direction for this animation.
@@ -195,7 +195,7 @@ namespace Avalonia.Animation
         {
             var run = new TaskCompletionSource<object>();
 
-            if (this.RepeatCount == RepeatCount.Loop)
+            if (this.IterationCount == IterationCount.Loop)
                 run.SetException(new InvalidOperationException("Looping animations must not use the Run method."));
 
             IDisposable subscriptions = null;

+ 3 - 10
src/Avalonia.Animation/AnimationInstance`1.cs

@@ -54,16 +54,9 @@ namespace Avalonia.Animation
             _duration = animation.Duration;
             _iterationDelay = animation.DelayBetweenIterations;
 
-            switch (animation.RepeatCount.RepeatType)
-            {
-                case RepeatType.None:
-                    _iterationCount = 1;
-                    break;
-                case RepeatType.Repeat:
-                    _iterationCount = animation.RepeatCount.Value;
-                    break;
-            }
-
+            if (animation.IterationCount.RepeatType == IterationType.Many)
+                _iterationCount = animation.IterationCount.Value;
+                
             _animationDirection = animation.PlaybackDirection;
             _fillMode = animation.FillMode;
             _onCompleteAction = OnComplete;

+ 176 - 0
src/Avalonia.Animation/IterationCount.cs

@@ -0,0 +1,176 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System;
+using System.ComponentModel;
+using System.Globalization;
+
+namespace Avalonia.Animation
+{
+    /// <summary>
+    /// Defines the valid modes for a <see cref="IterationCount"/>.
+    /// </summary>
+    public enum IterationType
+    {
+        Many,
+        Loop
+    }
+
+    /// <summary>
+    /// Determines the number of iterations of an animation.
+    /// Also defines its repeat behavior. 
+    /// </summary>
+    [TypeConverter(typeof(IterationCountTypeConverter))]
+    public struct IterationCount : IEquatable<IterationCount>
+    {
+        private readonly IterationType _type;
+        private readonly ulong _value;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IterationCount"/> struct.
+        /// </summary>
+        /// <param name="value">The number of iterations of an animation.</param>
+        public IterationCount(ulong value)
+            : this(value, IterationType.Many)
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="IterationCount"/> struct.
+        /// </summary>
+        /// <param name="value">The size of the IterationCount.</param>
+        /// <param name="type">The unit of the IterationCount.</param>
+        public IterationCount(ulong value, IterationType type)
+        {
+            if (type > IterationType.Loop)
+            {
+                throw new ArgumentException("Invalid value", "type");
+            }
+
+            _type = type;
+            _value = value;
+        }
+
+        /// <summary>
+        /// Gets an instance of <see cref="IterationCount"/> that indicates that an animation
+        /// should repeat forever.
+        /// </summary>
+        public static IterationCount Loop => new IterationCount(0, IterationType.Loop);
+
+        /// <summary>
+        /// Gets the unit of the <see cref="IterationCount"/>.
+        /// </summary>
+        public IterationType RepeatType => _type;
+
+        /// <summary>
+        /// Gets a value that indicates whether the <see cref="IterationCount"/> is set to loop.
+        /// </summary>
+        public bool IsLoop => _type == IterationType.Loop;
+
+        /// <summary>
+        /// Gets the number of repeat iterations.
+        /// </summary>
+        public ulong Value => _value;
+
+        /// <summary>
+        /// Compares two IterationCount structures for equality.
+        /// </summary>
+        /// <param name="a">The first IterationCount.</param>
+        /// <param name="b">The second IterationCount.</param>
+        /// <returns>True if the structures are equal, otherwise false.</returns>
+        public static bool operator ==(IterationCount a, IterationCount b)
+        {
+            return (a.IsLoop && b.IsLoop)
+                || (a._value == b._value && a._type == b._type);
+        }
+
+        /// <summary>
+        /// Compares two IterationCount structures for inequality.
+        /// </summary>
+        /// <param name="rc1">The first IterationCount.</param>
+        /// <param name="rc2">The first IterationCount.</param>
+        /// <returns>True if the structures are unequal, otherwise false.</returns>
+        public static bool operator !=(IterationCount rc1, IterationCount rc2)
+        {
+            return !(rc1 == rc2);
+        }
+
+        /// <summary>
+        /// Determines whether the <see cref="IterationCount"/> is equal to the specified object.
+        /// </summary>
+        /// <param name="o">The object with which to test equality.</param>
+        /// <returns>True if the objects are equal, otherwise false.</returns>
+        public override bool Equals(object o)
+        {
+            if (o == null)
+            {
+                return false;
+            }
+
+            if (!(o is IterationCount))
+            {
+                return false;
+            }
+
+            return this == (IterationCount)o;
+        }
+
+        /// <summary>
+        /// Compares two IterationCount structures for equality.
+        /// </summary>
+        /// <param name="IterationCount">The structure with which to test equality.</param>
+        /// <returns>True if the structures are equal, otherwise false.</returns>
+        public bool Equals(IterationCount IterationCount)
+        {
+            return this == IterationCount;
+        }
+
+        /// <summary>
+        /// Gets a hash code for the IterationCount.
+        /// </summary>
+        /// <returns>The hash code.</returns>
+        public override int GetHashCode()
+        {
+            return _value.GetHashCode() ^ _type.GetHashCode();
+        }
+
+        /// <summary>
+        /// Gets a string representation of the <see cref="IterationCount"/>.
+        /// </summary>
+        /// <returns>The string representation.</returns>
+        public override string ToString()
+        {
+            if (IsLoop)
+            {
+                return "Loop";
+            }
+
+            string s = _value.ToString();
+            return s;
+        }
+
+        /// <summary>
+        /// Parses a string to return a <see cref="IterationCount"/>.
+        /// </summary>
+        /// <param name="s">The string.</param>
+        /// <returns>The <see cref="IterationCount"/>.</returns>
+        public static IterationCount Parse(string s)
+        {
+            s = s.ToUpperInvariant().Trim();
+
+            if (s.EndsWith("LOOP"))
+            {
+                return Loop;
+            }
+            else
+            {
+                if (s.StartsWith("-"))
+                    throw new InvalidCastException("IterationCount can't be a negative number.");
+
+                var value = ulong.Parse(s, CultureInfo.InvariantCulture);
+
+                return new IterationCount(value);
+            }
+        }
+    }
+}

+ 2 - 2
src/Avalonia.Animation/RepeatCountTypeConverter.cs → src/Avalonia.Animation/IterationCountTypeConverter.cs

@@ -7,7 +7,7 @@ using System.Globalization;
 
 namespace Avalonia.Animation
 {
-    public class RepeatCountTypeConverter : TypeConverter
+    public class IterationCountTypeConverter : TypeConverter
     {
         public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
         {
@@ -16,7 +16,7 @@ namespace Avalonia.Animation
 
         public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
         {
-            return RepeatCount.Parse((string)value);
+            return IterationCount.Parse((string)value);
         }
     }
 }

+ 0 - 199
src/Avalonia.Animation/RepeatCount.cs

@@ -1,199 +0,0 @@
-// Copyright (c) The Avalonia Project. All rights reserved.
-// Licensed under the MIT license. See licence.md file in the project root for full license information.
-
-using System;
-using System.ComponentModel;
-using System.Globalization;
-
-namespace Avalonia.Animation
-{
-    /// <summary>
-    /// Defines the valid modes for a <see cref="RepeatCount"/>.
-    /// </summary>
-    public enum RepeatType
-    {
-        None,
-        Repeat,
-        Loop
-    }
-
-    /// <summary>
-    /// Determines the number of iterations of an animation.
-    /// Also defines its repeat behavior. 
-    /// </summary>
-    [TypeConverter(typeof(RepeatCountTypeConverter))]
-    public struct RepeatCount : IEquatable<RepeatCount>
-    {
-        private readonly RepeatType _type;
-        private readonly ulong _value;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RepeatCount"/> struct.
-        /// </summary>
-        /// <param name="value">The number of iterations of an animation.</param>
-        public RepeatCount(ulong value)
-            : this(value, RepeatType.Repeat)
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="RepeatCount"/> struct.
-        /// </summary>
-        /// <param name="value">The size of the RepeatCount.</param>
-        /// <param name="type">The unit of the RepeatCount.</param>
-        public RepeatCount(ulong value, RepeatType type)
-        {
-            if (type < RepeatType.None || type > RepeatType.Loop)
-            {
-                throw new ArgumentException("Invalid value", "type");
-            }
-
-            _type = type;
-            _value = value;
-        }
-
-        /// <summary>
-        /// Gets an instance of <see cref="RepeatCount"/> that indicates that an animation
-        /// should repeat forever.
-        /// </summary>
-        public static RepeatCount Loop => new RepeatCount(0, RepeatType.Loop);
-
-        /// <summary>
-        /// Gets an instance of <see cref="RepeatCount"/> that indicates that an animation
-        /// should not repeat.
-        /// </summary>
-        public static RepeatCount None => new RepeatCount(0, RepeatType.None);
-
-        /// <summary>
-        /// Gets the unit of the <see cref="RepeatCount"/>.
-        /// </summary>
-        public RepeatType RepeatType => _type;
-
-        /// <summary>
-        /// Gets a value that indicates whether the <see cref="RepeatCount"/> is set to loop.
-        /// </summary>
-        public bool IsLoop => _type == RepeatType.Loop;
-
-        /// <summary>
-        /// Gets a value that indicates whether the <see cref="RepeatCount"/> is set to not repeat.
-        /// </summary>
-        public bool IsNone => _type == RepeatType.None;
-
-        /// <summary>
-        /// Gets the number of repeat iterations.
-        /// </summary>
-        public ulong Value => _value;
-
-        /// <summary>
-        /// Compares two RepeatCount structures for equality.
-        /// </summary>
-        /// <param name="a">The first RepeatCount.</param>
-        /// <param name="b">The second RepeatCount.</param>
-        /// <returns>True if the structures are equal, otherwise false.</returns>
-        public static bool operator ==(RepeatCount a, RepeatCount b)
-        {
-            return (a.IsNone && b.IsNone) && (a.IsLoop && b.IsLoop)
-                || (a._value == b._value && a._type == b._type);
-        }
-
-        /// <summary>
-        /// Compares two RepeatCount structures for inequality.
-        /// </summary>
-        /// <param name="rc1">The first RepeatCount.</param>
-        /// <param name="rc2">The first RepeatCount.</param>
-        /// <returns>True if the structures are unequal, otherwise false.</returns>
-        public static bool operator !=(RepeatCount rc1, RepeatCount rc2)
-        {
-            return !(rc1 == rc2);
-        }
-
-        /// <summary>
-        /// Determines whether the <see cref="RepeatCount"/> is equal to the specified object.
-        /// </summary>
-        /// <param name="o">The object with which to test equality.</param>
-        /// <returns>True if the objects are equal, otherwise false.</returns>
-        public override bool Equals(object o)
-        {
-            if (o == null)
-            {
-                return false;
-            }
-
-            if (!(o is RepeatCount))
-            {
-                return false;
-            }
-
-            return this == (RepeatCount)o;
-        }
-
-        /// <summary>
-        /// Compares two RepeatCount structures for equality.
-        /// </summary>
-        /// <param name="RepeatCount">The structure with which to test equality.</param>
-        /// <returns>True if the structures are equal, otherwise false.</returns>
-        public bool Equals(RepeatCount RepeatCount)
-        {
-            return this == RepeatCount;
-        }
-
-        /// <summary>
-        /// Gets a hash code for the RepeatCount.
-        /// </summary>
-        /// <returns>The hash code.</returns>
-        public override int GetHashCode()
-        {
-            return _value.GetHashCode() ^ _type.GetHashCode();
-        }
-
-        /// <summary>
-        /// Gets a string representation of the <see cref="RepeatCount"/>.
-        /// </summary>
-        /// <returns>The string representation.</returns>
-        public override string ToString()
-        {
-            if (IsLoop)
-            {
-                return "Auto";
-            }
-            else if (IsNone)
-            {
-                return "None";
-            }
-
-            string s = _value.ToString();
-            return s;
-        }
-
-        /// <summary>
-        /// Parses a string to return a <see cref="RepeatCount"/>.
-        /// </summary>
-        /// <param name="s">The string.</param>
-        /// <returns>The <see cref="RepeatCount"/>.</returns>
-        public static RepeatCount Parse(string s)
-        {
-            s = s.ToUpperInvariant().Trim();
-
-            if (s == "NONE")
-            {
-                return None;
-            }
-            else if (s.EndsWith("LOOP"))
-            {
-                return Loop;
-            }
-            else
-            {
-                if(s.StartsWith("-"))
-                    throw new InvalidCastException("RepeatCount can't be a negative number.");
-
-                var value = ulong.Parse(s, CultureInfo.InvariantCulture);
-             
-                if (value == 1)
-                    return None;
-
-                return new RepeatCount(value);
-            }
-        }
-    }
-}

+ 2 - 2
src/Avalonia.Themes.Default/ProgressBar.xaml

@@ -33,7 +33,7 @@
   <Style Selector="ProgressBar:horizontal:indeterminate /template/ Border#PART_Indicator">
       <Style.Animations>
           <Animation Duration="0:0:3"
-                     RepeatCount="Loop"
+                     IterationCount="Loop"
                      Easing="LinearEasing">
               <KeyFrame Cue="0%">
                   <Setter Property="TranslateTransform.X"
@@ -49,7 +49,7 @@
   <Style Selector="ProgressBar:vertical:indeterminate /template/ Border#PART_Indicator">
       <Style.Animations>
           <Animation Duration="0:0:3"
-                     RepeatCount="Loop"
+                     IterationCount="Loop"
                      Easing="LinearEasing">
               <KeyFrame Cue="0%">
                   <Setter Property="TranslateTransform.Y"