4
|
1 using System;
|
|
2 using System.Collections.Generic;
|
|
3 using System.Linq;
|
|
4 using System.Text;
|
|
5 using System.Windows.Forms;
|
|
6 using System.Diagnostics;
|
|
7
|
|
8 namespace Implab.Fx
|
|
9 {
|
|
10 public static class AnimationHelpers
|
|
11 {
|
|
12 public static Animation<TTarget> AnimateProperty<TTarget,TVal>(this Animation<TTarget> animation, Action<TTarget,TVal> setter, Func<TTarget,TVal> getter, TVal newValue, Func<TVal,TVal,int,int,TVal> fx) where TTarget: class
|
|
13 {
|
|
14 if (animation == null)
|
|
15 throw new ArgumentNullException("animation");
|
|
16
|
|
17 TVal oldValue = getter(animation.Traget);
|
|
18
|
|
19 animation.Step += (target, elaped, duration) =>
|
|
20 {
|
|
21 var value = fx(oldValue, newValue, elaped, duration);
|
|
22 setter(target, value);
|
|
23 };
|
|
24
|
|
25 return animation;
|
|
26 }
|
|
27
|
|
28 public static Animation<Form> AnimateTransparency(this Form ctl, float newValue)
|
|
29 {
|
|
30 var anim = new Animation<Form>(ctl);
|
|
31
|
|
32 anim.AnimateProperty(
|
|
33 (target, value) => target.Opacity = value,
|
|
34 target => target.Opacity,
|
|
35 newValue,
|
|
36 (ov, nv, el, du) => ov + ((float)el / du) * (nv - ov)
|
|
37 );
|
|
38 return anim;
|
|
39 }
|
|
40 }
|
|
41 }
|