GeometryAnimationBase.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Globalization;
  3. using System.Threading;
  4. using System.Windows.Media;
  5. using System.Windows.Media.Animation;
  6. namespace HandyControl.Media.Animation;
  7. public abstract class GeometryAnimationBase : AnimationTimeline
  8. {
  9. protected GeometryAnimationBase()
  10. {
  11. Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
  12. }
  13. public new GeometryAnimationBase Clone() => (GeometryAnimationBase) base.Clone();
  14. public sealed override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock)
  15. {
  16. if (defaultOriginValue == null)
  17. {
  18. throw new ArgumentNullException(nameof(defaultOriginValue));
  19. }
  20. if (defaultDestinationValue == null)
  21. {
  22. throw new ArgumentNullException(nameof(defaultDestinationValue));
  23. }
  24. return GetCurrentValue((Geometry) defaultOriginValue, (Geometry) defaultDestinationValue, animationClock);
  25. }
  26. public override Type TargetPropertyType
  27. {
  28. get
  29. {
  30. ReadPreamble();
  31. return typeof(Geometry);
  32. }
  33. }
  34. public Geometry GetCurrentValue(Geometry defaultOriginValue, Geometry defaultDestinationValue, AnimationClock animationClock)
  35. {
  36. ReadPreamble();
  37. if (animationClock == null)
  38. {
  39. throw new ArgumentNullException(nameof(animationClock));
  40. }
  41. if (animationClock.CurrentState == ClockState.Stopped)
  42. {
  43. return defaultDestinationValue;
  44. }
  45. return GetCurrentValueCore(defaultOriginValue, defaultDestinationValue, animationClock);
  46. }
  47. protected abstract Geometry GetCurrentValueCore(Geometry defaultOriginValue, Geometry defaultDestinationValue, AnimationClock animationClock);
  48. }