package starling.utils {
import openfl.Vector;
/**
 *  A utility class containing predefined colors and methods converting between different
 *  *  color representations.
 *  *
 *  *  <p>The HSL and HSV calculations conform to theory and implementation found on
 *  *  <a href="https://en.wikipedia.org/wiki/HSL_and_HSV">Wikipedia</a> and
 *  *  <a href="https://www.rapidtables.com/convert/color/">rapidtables.com</a>.</p>
 *  
 * @externs
 */
public class Color {
	public static const WHITE:int = 16777215;
	public static const SILVER:int = 12632256;
	public static const GRAY:int = 8421504;
	public static const BLACK:int = 0;
	public static const RED:int = 16711680;
	public static const MAROON:int = 8388608;
	public static const YELLOW:int = 16776960;
	public static const OLIVE:int = 8421376;
	public static const LIME:int = 65280;
	public static const GREEN:int = 32768;
	public static const AQUA:int = 65535;
	public static const TEAL:int = 32896;
	public static const BLUE:int = 255;
	public static const NAVY:int = 128;
	public static const FUCHSIA:int = 16711935;
	public static const PURPLE:int = 8388736;
	/**
	 *  Returns the alpha part of an ARGB color (0 - 255). 
	 */
	public static function getAlpha(color:int):int { return 0; }
	/**
	 *  Returns the red part of an (A)RGB color (0 - 255). 
	 */
	public static function getRed(color:int):int { return 0; }
	/**
	 *  Returns the green part of an (A)RGB color (0 - 255). 
	 */
	public static function getGreen(color:int):int { return 0; }
	/**
	 *  Returns the blue part of an (A)RGB color (0 - 255). 
	 */
	public static function getBlue(color:int):int { return 0; }
	/**
	 *  Sets the alpha part of an ARGB color (0 - 255). 
	 */
	public static function setAlpha(color:int, alpha:int):int { return 0; }
	/**
	 *  Sets the red part of an (A)RGB color (0 - 255). 
	 */
	public static function setRed(color:int, red:int):int { return 0; }
	/**
	 *  Sets the green part of an (A)RGB color (0 - 255). 
	 */
	public static function setGreen(color:int, green:int):int { return 0; }
	/**
	 *  Sets the blue part of an (A)RGB color (0 - 255). 
	 */
	public static function setBlue(color:int, blue:int):int { return 0; }
	/**
	 *  Creates an RGB color, stored in an unsigned integer. Channels are expected
	 *      * in the range 0 - 255. 
	 */
	public static function rgb(red:int, green:int, blue:int):int { return 0; }
	/**
	 *  Creates an ARGB color, stored in an unsigned integer. Channels are expected
	 *      * in the range 0 - 255. 
	 */
	public static function argb(alpha:int, red:int, green:int, blue:int):int { return 0; }
	/**
	 *  Creates an RGB color from hue, saturation and value (brightness).
	 * 	 *  Assumes hue, saturation, and value are contained in the range [0, 1].
	 * 	 
	 */
	public static function hsv(hue:Number, saturation:Number, value:Number):int { return 0; }
	/**
	 *  Creates an RGB color from hue, saturation and lightness.
	 * 	 *  Assumes hue, saturation, and lightness are contained in the range [0, 1].
	 * 	 
	 */
	public static function hsl(hue:Number, saturation:Number, lightness:Number):int { return 0; }
	/**
	 *  Converts an RGB color into a vector with HSV components.
	 * 	 *
	 * 	 *  @param rgb  the standard RGB color
	 * 	 *  @param hsv  a vector to be used for the result; passing null will create a new one.
	 * 	 *  @return     a vector containing hue, saturation, and value, in this order. Range: [0..1]
	 * 	 
	 */
	public static function rgbToHsv(rgb:int, hsv:openfl.Vector = undefined):openfl.Vector { return null; }
	/**
	 *  Converts an RGB color into a vector with HSV components.
	 * 	 *
	 * 	 *  @param rgb  the standard RGB color
	 * 	 *  @param hsl  a vector to be used for the result; passing null will create a new one.
	 * 	 *  @return     a vector containing hue, saturation, and lightness, in this order. Range: [0..1]
	 * 	 
	 */
	public static function rgbToHsl(rgb:int, hsl:openfl.Vector = undefined):openfl.Vector { return null; }
	/**
	 *  Converts a color to a vector containing the RGBA components (in this order) scaled
	 * 	 *  between 0 and 1. 
	 */
	public static function toVector(color:int, out:openfl.Vector = undefined):openfl.Vector { return null; }
	/**
	 *  Multiplies all channels of an (A)RGB color with a certain factor. 
	 */
	public static function multiply(color:int, factor:Number):int { return 0; }
	/**
	 *  Calculates a smooth transition between one color to the next.
	 *         *  <code>ratio</code> is expected between 0 and 1. 
	 */
	public static function interpolate(startColor:int, endColor:int, ratio:Number):int { return 0; }
}
}
