基线 SVN r240

SVN-Revision: r240
This commit is contained in:
cyf
2025-02-06 06:46:06 +00:00
commit ab56a9bcf7
5317 changed files with 902274 additions and 0 deletions
@@ -0,0 +1,638 @@
using System;
using System.ComponentModel;
namespace Lskj.Control.ImageLibrary
{
/// <summary>
/// 动画定时器类
/// </summary>
[Category("动画定时器类")]
[DefaultProperty("Options")]
[DefaultEvent("Animationing")]
[TypeConverter(typeof(EmptyExpandableObjectConverter))]
public class AnimationTimer : IDisposable
{
#region
public delegate void AnimationEventHandler(object sender, AnimationEventArgs e);
private event AnimationEventHandler animationStart = null;
/// <summary>
/// 动画开始前事件
/// </summary>
[Description("动画开始前事件")]
public event AnimationEventHandler AnimationStart
{
add { this.animationStart += value; }
remove { this.animationStart -= value; }
}
private event AnimationEventHandler animationing = null;
/// <summary>
/// 动画时间间隔发生事件
/// </summary>
[Description("动画时间间隔发生事件")]
public event AnimationEventHandler Animationing
{
add { this.animationing += value; }
remove { this.animationing -= value; }
}
private event AnimationEventHandler animationEnding = null;
/// <summary>
/// 动画结束时事件
/// </summary>
[Description("动画结束时事件")]
public event AnimationEventHandler AnimationEnding
{
add { this.animationEnding += value; }
remove { this.animationEnding -= value; }
}
private event AnimationEventHandler animationRepetition = null;
/// <summary>
/// 动画重复间隔时事件
/// </summary>
[Description("动画重复间隔时事件")]
public event AnimationEventHandler AnimationRepetition
{
add { this.animationRepetition += value; }
remove { this.animationRepetition -= value; }
}
#endregion
#region
public AnimationTypes animationType = AnimationTypes.EaseIn;
/// <summary>
/// 动画类型(默认值EaseIn)
/// </summary>
[Description("动画类型")]
[DefaultValue(AnimationTypes.EaseIn)]
public AnimationTypes AnimationType
{
get { return this.animationType; }
set { this.animationType = value; }
}
public System.Windows.Forms.Control _control = null;
/// <summary>
/// 动画所属控件
/// </summary>
[Description("动画所属控件")]
[DefaultValue(null)]
public System.Windows.Forms.Control Control
{
get { return this._control; }
set { this._control = value; }
}
private AnimationOptions options;
/// <summary>
/// 动画设置参数
/// </summary>
[Description("动画设置参数")]
public AnimationOptions Options
{
get { return this.options; }
set { this.options = value; }
}
private int interval = 20;
/// <summary>
/// 动画定时器时间间隔(默认值20毫秒)
/// </summary>
[Description("动画定时器时间间隔")]
[DefaultValue(20)]
public int Interval
{
get { return this.interval; }
set
{
if (this.interval == value)
return;
this.interval = value;
if (this.timer != null)
this.timer.Interval = this.interval;
}
}
private double animationUsedTime = 0.0;
/// <summary>
/// 动画已经使用了多少时间(默认值0.0毫秒)
/// </summary>
[Description("动画已经使用了多少时间(默认值0.0毫秒)")]
[Browsable(false)]
[DefaultValue(0.0)]
public double AnimationUsedTime
{
get { return this.animationUsedTime; }
}
#endregion
#region
private bool disposed = false;
/// <summary>
/// 动画定时器
/// </summary>
private System.Windows.Forms.Timer timer = null;
/// <summary>
/// 添加还是减少动画时间间隔(决定动画方向)
/// </summary>
private AnimationIntervalTypes intervalTypes = AnimationIntervalTypes.Add;
/// <summary>
/// 动画进行中时间累计器
/// </summary>
[DefaultValue(0.0)]
private double runTime = 0.0;
#endregion
#region
/// <summary>
/// 用于组件的初始化
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public AnimationTimer()
{
}
/// <summary>
///
/// </summary>
/// <param name="_control">要变化动画的控件</param>
/// <param name="_options">动画配置</param>
public AnimationTimer(System.Windows.Forms.Control _control, AnimationOptions _options)
{
this._control = _control;
this.options = _options;
}
#endregion
#region
/// <summary>
/// 动画开始
/// </summary>
/// <param name="_intervalTypes">添加还是减少动画时间间隔(决定动画方向)</param>
/// <param name="_usedTime">动画已经使用了多少时间(默认值0.0毫秒)</param>
public void Start(AnimationIntervalTypes _intervalTypes, double _usedTime)
{
this.intervalTypes = _intervalTypes;
this.Stop();
this.runTime = _usedTime;
if (this.animationStart != null)
{
this.animationStart.Invoke(this._control, new AnimationEventArgs() { Data = this.options.Data, AllTransformValue = this.options.AllTransformValue, AnimationUsedTime = this.runTime, ProgressValue = GetProgress(this.AnimationType, this.options, this.runTime) });
}
if (this.timer == null || this.options.EveryNewTimer)
{
this.timer = new System.Windows.Forms.Timer();
this.timer.Tick += new EventHandler(this.timer_Tick);
this.timer.Interval = this.interval;
}
this.timer.Start();
}
/// <summary>
/// 动画停止
/// </summary>
public void Stop()
{
if (this.timer != null)
{
this.timer.Enabled = false;
if (this.options.EveryNewTimer)
{
this.timer.Dispose();
}
}
}
/// <summary>
/// 暂停
/// </summary>
public void Suspend()
{
if (this.timer != null)
{
this.timer.Enabled = false;
}
}
/// <summary>
/// 继续
/// </summary>
public void Continue()
{
if (this.timer != null)
{
this.timer.Enabled = true;
}
}
/// <summary>
/// 获取动画的进度(0.0-1.0
/// </summary>
/// <param name="_animationType">动画类型</param>
/// <param name="_options">动画参数</param>
/// <param name="_usedTime">动画已经使用了多少时间</param>
/// <returns></returns>
public static double GetProgress(AnimationTypes _animationType, AnimationOptions _options, double _usedTime)
{
if (_usedTime <= 0)
return 0.0;
if (_usedTime >= _options.AllTransformTime)
return 1.0;
double result = 0.0;
switch (_animationType)
{
case AnimationTypes.UniformMotion:
result = AnimationCore.UniformMotionCore(_usedTime, _options.AllTransformTime);
break;
case AnimationTypes.EaseIn:
result = AnimationCore.EaseInCore(_usedTime / _options.AllTransformTime, _options.Power);
break;
case AnimationTypes.EaseOut:
result = AnimationCore.EaseOutCore(_usedTime / _options.AllTransformTime, _options.Power);
break;
case AnimationTypes.EaseBoth:
result = AnimationCore.EaseBothCore(_usedTime / _options.AllTransformTime, _options.Power);
break;
case AnimationTypes.BackIn:
result = AnimationCore.BackInCore(_usedTime / _options.AllTransformTime, _options.Power, _options.Amplitude);
break;
case AnimationTypes.BackOut:
result = AnimationCore.BackOutCore(_usedTime / _options.AllTransformTime, _options.Power, _options.Amplitude);
break;
case AnimationTypes.BackBoth:
result = AnimationCore.BackBothCore(_usedTime / _options.AllTransformTime, _options.Power, _options.Amplitude);
break;
case AnimationTypes.BounceIn:
result = AnimationCore.BounceInCore(_usedTime / _options.AllTransformTime, _options.Bounces, _options.Bounciness);
break;
case AnimationTypes.BounceOut:
result = AnimationCore.BounceOutCore(_usedTime / _options.AllTransformTime, _options.Bounces, _options.Bounciness);
break;
case AnimationTypes.BounceBoth:
result = AnimationCore.BounceBothCore(_usedTime / _options.AllTransformTime, _options.Bounces, _options.Bounciness);
break;
case AnimationTypes.ElasticIn:
result = AnimationCore.ElasticInCore(_usedTime / _options.AllTransformTime, _options.Oscillations, _options.Springiness);
break;
case AnimationTypes.ElasticOut:
result = AnimationCore.ElasticOutCore(_usedTime / _options.AllTransformTime, _options.Oscillations, _options.Springiness);
break;
case AnimationTypes.ElasticBoth:
result = AnimationCore.ElasticBothCore(_usedTime / _options.AllTransformTime, _options.Oscillations, _options.Springiness);
break;
case AnimationTypes.QuadraticIn:
result = AnimationCore.QuadraticInCore(_usedTime / _options.AllTransformTime);
break;
case AnimationTypes.QuadraticOut:
result = AnimationCore.QuadraticOutCore(_usedTime / _options.AllTransformTime);
break;
}
return result;
}
#endregion
#region
/// <summary>
/// 动画定时更新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer_Tick(object sender, EventArgs e)
{
if (this.intervalTypes == AnimationIntervalTypes.Add)
this.runTime += this.timer.Interval;
else
this.runTime -= this.timer.Interval;
if ((this.runTime >= 0 && this.runTime < this.options.AllTransformTime) || this.options.AnimationTimerType == AnimationTimerTypes.AlwaysAnimation)
{
if (this.animationing != null)
{
this.animationUsedTime = this.runTime;
this.animationing.Invoke(this._control, new AnimationEventArgs() { Data = this.options.Data, AllTransformValue = this.options.AllTransformValue, AnimationUsedTime = this.runTime, ProgressValue = GetProgress(this.AnimationType, this.options, this.runTime) });
}
}
else
{
if (this.animationing != null)//保证最后一次百分百变化
{
this.animationUsedTime = this.runTime < 0 ? 0.0 : this.options.AllTransformTime;
this.animationing.Invoke(this._control, new AnimationEventArgs() { Data = this.options.Data, AllTransformValue = this.options.AllTransformValue, AnimationUsedTime = this.runTime, ProgressValue = GetProgress(this.AnimationType, this.options, this.runTime) });
}
if (this.options.AnimationTimerType == AnimationTimerTypes.AlwaysRepeatAnimation)
{
this.runTime = 0.0;
if (this.animationRepetition != null)
{
this.animationRepetition.Invoke(this._control, new AnimationEventArgs() { Data = this.options.Data, AllTransformValue = this.options.AllTransformValue, AnimationUsedTime = this.runTime, ProgressValue = GetProgress(this.AnimationType, this.options, this.runTime) });
}
}
else
{
this.Stop();
if (this.animationEnding != null)
{
this.animationUsedTime = this.runTime < 0 ? 0.0 : this.options.AllTransformTime;
this.animationEnding.Invoke(this._control, new AnimationEventArgs() { Data = this.options.Data, AllTransformValue = this.options.AllTransformValue, AnimationUsedTime = this.animationUsedTime, ProgressValue = this.runTime < 0 ? 0.0 : 1.0 });
}
}
}
}
#endregion
#region
~AnimationTimer()
{
this.Dispose(false);
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize((object)this);
}
protected virtual void Dispose(bool disposing)
{
if (this.disposed)
return;
if (disposing)
{
if (this.timer != null)
{
this.timer.Dispose();
this.timer = (System.Windows.Forms.Timer)null;
}
}
this.disposed = true;
}
#endregion
}
#region
/// <summary>
/// 动画参数设置
/// </summary>
[Description("动画参数设置")]
[TypeConverter(typeof(EmptyExpandableObjectConverter))]
public class AnimationOptions
{
private bool everyNewTimer = true;
/// <summary>
/// 是否每一次调用Start方法是都重新创建一个Timer定时器实例(默认值为true)
/// </summary>
[Description("是否每一次调用Start方法是都重新创建一个Timer定时器实例(默认值为true)")]
[DefaultValue(true)]
public bool EveryNewTimer
{
get { return this.everyNewTimer; }
set { this.everyNewTimer = value; }
}
private AnimationTimerTypes animationTimerType = AnimationTimerTypes.Normal;
/// <summary>
/// 动画定时器类型
/// </summary>
[Description("动画定时器类型")]
[DefaultValue(AnimationTimerTypes.Normal)]
public AnimationTimerTypes AnimationTimerType
{
get { return this.animationTimerType; }
set { this.animationTimerType = value; }
}
private double allTransformTime = 300.0;
/// <summary>
/// 动画要变换的总时间(默认值300.0)
/// </summary>
[Description("动画要变换的总时间(默认值300.0)")]
[DefaultValue(300.0)]
public double AllTransformTime
{
get { return this.allTransformTime; }
set { this.allTransformTime = value; }
}
private double allTransformValue = 10.0;
/// <summary>
/// 动画要变换的总变化值(默认值10.0)
/// </summary>
[Description("动画要变换的总变化值(默认值10.0)")]
[DefaultValue(10.0)]
public double AllTransformValue
{
get { return this.allTransformValue; }
set { this.allTransformValue = value; }
}
private object data = null;
/// <summary>
/// 自定义参数
/// </summary>
[Description("自定义参数")]
[Browsable(false)]
public object Data
{
get { return this.data; }
set { this.data = value; }
}
private double power = 3.0;
/// <summary>
/// 动画曲线幂(默认值3.0)
/// (限于EaseIn、EaseOut、EaseBoth、BackIn、BackOut、BackBoth)
/// </summary>
[Description("动画曲线幂(默认值3)")]
[DefaultValue(3.0)]
public double Power
{
get { return this.power; }
set { this.power = value; }
}
private double amplitude = 1.0;
/// <summary>
/// 收缩与相关联的幅度动画。此值必须大于或等于 0。 默认值为 1.0。
/// (限于BackIn、BackOut、BackBoth)
/// </summary>
[Description("收缩与相关联的幅度动画。此值必须大于或等于 0。 默认值为 1.0")]
[DefaultValue(1.0)]
public double Amplitude
{
get { return this.amplitude; }
set { this.amplitude = value; }
}
private int bounces = 3;
/// <summary>
/// 反弹次数。值必须大于或等于零(默认值为3)
/// (限于BounceIn、BounceOut、BounceBoth
/// </summary>
[Description("反弹次数。值必须大于或等于零(默认值为3)")]
[DefaultValue(3)]
public int Bounces
{
get { return this.bounces; }
set { this.bounces = value; }
}
private double bounciness = 2.0;
/// <summary>
/// 指定反弹动画的弹性大小。虽然较高的值都会导致反弹 (弹性较小),此属性中的结果很少或者反弹低值会丢失反弹 (弹性较大) 之间的高度。此值必须是正数(默认值为 2.0)
/// (限于BounceIn、BounceOut、BounceBoth
/// </summary>
[Description("指定反弹动画的弹性大小。虽然较高的值都会导致反弹 (弹性较小),此属性中的结果很少或者反弹低值会丢失反弹 (弹性较大) 之间的高度。此值必须是正数(默认值为 2.0)")]
[DefaultValue(2.0)]
public double Bounciness
{
get { return this.bounciness; }
set { this.bounciness = value; }
}
private int oscillations = 3;
/// <summary>
/// 目标来回滑过动画目标的次数。此值必须大于或等于0 (默认值为3)
/// (限于ElasticIn、ElasticOut、ElasticBoth
/// </summary>
[Description("目标来回滑过动画目标的次数。此值必须大于或等于0 (默认值为3)")]
[DefaultValue(3)]
public int Oscillations
{
get { return this.oscillations; }
set { this.oscillations = value; }
}
private double springiness = 3.0;
/// <summary>
/// 弹簧铡度。 越小的 Springiness 值为,严格 spring,通过每个振动的强度减小的速度越快弹性。一个正数(默认值为3.0)
/// (限于ElasticIn、ElasticOut、ElasticBoth
/// </summary>
[Description("弹簧铡度。 越小的 Springiness 值为,严格 spring,通过每个振动的强度减小的速度越快弹性。一个正数(默认值为3.0)")]
[DefaultValue(3.0)]
public double Springiness
{
get { return this.springiness; }
set { this.springiness = value; }
}
}
/// <summary>
/// 动画事件数据
/// </summary>
[Description("动画事件数据")]
public class AnimationEventArgs : EventArgs
{
/// <summary>
/// 动画要变换的总变化值
/// </summary>
public double AllTransformValue { get; set; }
/// <summary>
/// 已进行了多少动画时间
/// </summary>
public double AnimationUsedTime { get; set; }
/// <summary>
/// 动画总变化值的进度(0.0-1.0)
/// </summary>
public double ProgressValue { get; set; }
/// <summary>
/// 自定义参数
/// </summary>
public object Data { get; set; }
}
#endregion
#region
/// <summary>
/// 动画定时器类型
/// </summary>
[Description("动画定时器类型")]
public enum AnimationTimerTypes
{
/// <summary>
/// 一次性动画
/// </summary>
Normal,
/// <summary>
/// 永久动画
/// </summary>
AlwaysAnimation,
/// <summary>
/// 永久重复动画
/// </summary>
AlwaysRepeatAnimation
}
/// <summary>
/// 动画时间操作类型(决定动画方向)
/// </summary>
[Description("动画时间操作类型(决定动画方向)")]
public enum AnimationIntervalTypes
{
/// <summary>
/// 添加
/// </summary>
Add,
/// <summary>
/// 减少
/// </summary>
Subtrac
}
#endregion
#region Design
/// <summary>
/// 展开属性选型去除描述
/// </summary>
[Description("展开属性选型去除描述")]
public class EmptyExpandableObjectConverter : ExpandableObjectConverter
{
/// <summary>
/// 当该属性为展开属性选型时,属性编辑器删除该属性的描述
/// </summary>
/// <param name="context"></param>
/// <param name="culture"></param>
/// <param name="value"></param>
/// <param name="destinationType"></param>
/// <returns></returns>
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType)
{
if (destinationType == typeof(string))
return (object)"";
return base.ConvertTo(context, culture, value, destinationType);
}
}
#endregion
}