115 lines
4.7 KiB
C#
115 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
|
|
namespace DevComponents.DotNetBar.Animation
|
|
{
|
|
internal class AnimationRectangle : Animation
|
|
{
|
|
#region Constructor
|
|
/// <summary>
|
|
/// Initializes a new instance of the Animation class.
|
|
/// </summary>
|
|
/// <param name="target">Target object for animation</param>
|
|
/// <param name="targetPropertyName">Target property name for animation</param>
|
|
public AnimationRectangle(AnimationEasing animationEasing, int animationDuration)
|
|
:
|
|
base(new AnimationRequest[0], animationEasing, animationDuration)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the Animation class.
|
|
/// </summary>
|
|
/// <param name="target">Target object for animation</param>
|
|
/// <param name="targetPropertyName">Target property name for animation</param>
|
|
public AnimationRectangle(AnimationRequest animationRequest, AnimationEasing animationEasing, int animationDuration)
|
|
:
|
|
base(new AnimationRequest[] { animationRequest }, animationEasing, animationDuration)
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// Initializes a new instance of the Animation class.
|
|
/// </summary>
|
|
/// <param name="target">Target object for animation</param>
|
|
/// <param name="targetPropertyName">Target property name for animation</param>
|
|
public AnimationRectangle(AnimationRequest[] animationRequests, AnimationEasing animationEasing, int animationDuration)
|
|
:
|
|
base(animationRequests, animationEasing, animationDuration) { }
|
|
#endregion
|
|
|
|
#region Implementation
|
|
protected override void WorkerDoWork(object sender, DoWorkEventArgs e)
|
|
{
|
|
AnimationRequest[] requests = (AnimationRequest[])e.Argument;
|
|
double elapsedTime = 0;
|
|
DateTime startTime = DateTime.Now;
|
|
double duration = Duration;
|
|
|
|
bool firstPass = true;
|
|
while (elapsedTime <= duration)
|
|
{
|
|
foreach (AnimationRequest request in requests)
|
|
{
|
|
Rectangle toValue = (Rectangle)request.To;
|
|
Rectangle fromValue = (Rectangle)request.From;
|
|
Rectangle change = new Rectangle(toValue.X - fromValue.X, toValue.Y - fromValue.Y,
|
|
toValue.Width - fromValue.Width, toValue.Height - fromValue.Height);
|
|
Rectangle newValue = toValue;
|
|
if (IsDisposed(request.Target)) return;
|
|
if (firstPass)
|
|
SetTargetPropertyValue(request.Target, request.Property, request.From);
|
|
|
|
if (change.X != 0)
|
|
newValue.X = (int)AnimationFunctions[(int)EasingFunction](elapsedTime, fromValue.X, change.X, duration);
|
|
if (change.Y != 0)
|
|
newValue.Y = (int)AnimationFunctions[(int)EasingFunction](elapsedTime, fromValue.Y, change.Y, duration);
|
|
if (change.Width != 0)
|
|
newValue.Width = (int)AnimationFunctions[(int)EasingFunction](elapsedTime, fromValue.Width, change.Width, duration);
|
|
if (change.Height != 0)
|
|
newValue.Height = (int)AnimationFunctions[(int)EasingFunction](elapsedTime, fromValue.Height, change.Height, duration);
|
|
|
|
SetTargetPropertyValue(request.Target, request.Property, newValue);
|
|
|
|
elapsedTime = DateTime.Now.Subtract(startTime).TotalMilliseconds;
|
|
|
|
if (e.Cancel) return;
|
|
}
|
|
|
|
ExecuteStepUpdateMethod();
|
|
|
|
//if (AnimationUpdateControl != null)
|
|
// AnimationUpdateControl.Invoke(new MethodInvoker(delegate { AnimationUpdateControl.Update(); }));
|
|
|
|
firstPass = false;
|
|
}
|
|
|
|
// Make sure final to value is assigned
|
|
foreach (AnimationRequest request in requests)
|
|
{
|
|
SetTargetPropertyValue(request.Target, request.Property, request.To);
|
|
}
|
|
|
|
//Console.WriteLine("{0} WorkerDoWork Complete", DateTime.Now);
|
|
}
|
|
|
|
private bool IsDisposed(object p)
|
|
{
|
|
if (p == null) return true;
|
|
if (p is Control && ((Control)p).IsDisposed) return true;
|
|
if (p is BaseItem && ((BaseItem)p).IsDisposed) return true;
|
|
return false;
|
|
}
|
|
|
|
protected override object GetPropertyValueCorrectType(double value)
|
|
{
|
|
return (int)value;
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|