{-# LANGUAGE MultiParamTypeClasses #-} module RSAGL.Color.HCL (HCL(..)) where import RSAGL.Math.AbstractVector import RSAGL.Math.Types import RSAGL.Math.Vector import RSAGL.Math.Angle import RSAGL.Color.ColorSpace -- | A color in the hue-chroma-luminance color space. -- This is an additive color system (like RGB). data HCL = HCL { hcl_hue :: {-# UNPACK #-} !Angle, hcl_chroma :: {-# UNPACK #-} !RSdouble, hcl_luminance :: {-# UNPACK #-} !RSdouble } deriving (Eq,Ord,Read,Show) instance ColorSpace HCL where affineColorSpaceOf _ = affineColorSpaceOf color_wheel_rgbl instance ExportColorCoordinates HCL where exportColorCoordinates (HCL h c l) = transformColorFromTo (affineColorSpaceOf color_wheel_rgbl) $ Point3D u v l where (u,v) = polarToCartesian (h,c) instance ImportColorCoordinates HCL where importColorCoordinates f = HCL h c l where (h,c) = cartesianToPolar (u,v) Point3D u v l = f $ affineColorSpaceOf $ color_wheel_rgbl