package flare.animate.interpolate { /** * Interpolator for color (uint) values. */ public class ColorInterpolator extends Interpolator { private var _start:uint; private var _end:uint; /** * Creates a new ColorInterpolator. * @param target the object whose property is being interpolated * @param property the property to interpolate * @param start the starting color value to interpolate from * @param end the target color value to interpolate to */ public function ColorInterpolator(target:Object, property:String, start:Object, end:Object) { super(target, property, start, end); } /** * Initializes this interpolator. * @param start the starting value of the interpolation * @param end the target value of the interpolation */ protected override function init(start:Object, end:Object) : void { _start = uint(start); _end = uint(end); } /** * Calculate and set an interpolated property value. * @param f the interpolation fraction (typically between 0 and 1) */ public override function interpolate(f:Number) : void { // we'll do all the work here to avoid the overhead of // extra method calls (rather than call Colors.interpolate) var a1:uint, a2:uint, r1:uint, r2:uint, g1:uint, g2:uint, b1:uint, b2:uint; // get color components a1 = (_start >> 24) & 0xFF; a2 = (_end >> 24) & 0xFF; r1 = (_start >> 16) & 0xFF; r2 = (_end >> 16) & 0xFF; g1 = (_start >> 8) & 0xFF; g2 = (_end >> 8) & 0xFF; b1 = _start & 0xff; b2 = _end & 0xFF; // interpolate the color components a1 += f*(a2-a1); r1 += f*(r2-r1); g1 += f*(g2-g1); b1 += f*(b2-b1); // recombine into final color a1 = ((a1 & 0xFF) << 24) | ((r1 & 0xFF) << 16) | ((g1 & 0xFF) << 8) | (b1 & 0xFF); // update the property value _prop.setValue(_target, a1); } } // end of class ColorInterpolator }