Mercurial > pub > ImplabNet
diff Implab.Fx/AnimationHelpers.cs @ 4:381095ad0a69
Implab.Fx: implemented animation object
Implab.Fx: implemented transparency animation helper
author | cin |
---|---|
date | Tue, 17 Sep 2013 04:27:30 +0400 |
parents | |
children | f2559580b481 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab.Fx/AnimationHelpers.cs Tue Sep 17 04:27:30 2013 +0400 @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; + +namespace Implab.Fx +{ + public static class AnimationHelpers + { + 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 + { + if (animation == null) + throw new ArgumentNullException("animation"); + + TVal oldValue = getter(animation.Traget); + + animation.Step += (target, elaped, duration) => + { + var value = fx(oldValue, newValue, elaped, duration); + setter(target, value); + }; + + return animation; + } + + public static Animation<Form> AnimateTransparency(this Form ctl, float newValue) + { + var anim = new Animation<Form>(ctl); + + anim.AnimateProperty( + (target, value) => target.Opacity = value, + target => target.Opacity, + newValue, + (ov, nv, el, du) => ov + ((float)el / du) * (nv - ov) + ); + return anim; + } + } +}