dynamic-plot-0.1.1.0: Graphics/Dynamic/Plot/Colour.hs
-- |
-- Module : Graphics.Dynamic.Plot.Colour
-- Copyright : (c) Justus Sagemüller 2013
-- License : GPL v3
--
-- Maintainer : (@) sagemuej $ smail.uni-koeln.de
-- Stability : experimental
-- Portability : requires GHC>6 extensions
module Graphics.Dynamic.Plot.Colour ( module Graphics.Dynamic.Plot.Colour
, Colour, AColour, FColour, ColourScheme
) where
import qualified Data.Colour as DCol
import Data.Colour (opaque)
import qualified Data.Colour.Names as N
import Data.Colour.CIE hiding (Colour)
import qualified Data.Colour.CIE.Illuminant as Illum
import Graphics.Dynamic.Plot.Internal.Types
neutral, contrast, grey
, magenta, red, orange, yellow, green, cyan, blue, violet :: Colour
neutral = BaseColour Neutral
contrast= Contrast Neutral
grey = paler contrast
magenta = Contrast Green
red = BaseColour Red
orange = Contrast Blue
yellow = BaseColour Yellow
green = BaseColour Green
cyan = Contrast Red
blue = BaseColour Blue
violet = Contrast Yellow
paler, opposite :: Colour -> Colour
paler = Paler
opposite (BaseColour c) = Contrast c
opposite (Contrast c) = BaseColour c
opposite (Paler c) = Paler $ opposite c
opposite (CustomColour c) = CustomColour $ hueInvert c
defaultColourScheme :: ColourScheme
defaultColourScheme (BaseColour Neutral) = opaque N.black
defaultColourScheme (BaseColour Red ) = opaque N.red
defaultColourScheme (BaseColour Yellow ) = opaque N.yellow
defaultColourScheme (BaseColour Green ) = opaque N.green
defaultColourScheme (BaseColour Blue ) = opaque N.blue
defaultColourScheme (Contrast Neutral) = opaque N.white
defaultColourScheme (Contrast Red ) = opaque N.cyan
defaultColourScheme (Contrast Yellow ) = opaque N.violet
defaultColourScheme (Contrast Green ) = opaque N.magenta
defaultColourScheme (Contrast Blue ) = opaque N.orange
defaultColourScheme (Paler c) = DCol.dissolve 0.5 $ defaultColourScheme c
defaultColourScheme (CustomColour c) = opaque c
defaultColourSeq :: [Colour]
defaultColourSeq = cycle [blue, red, green, orange, cyan, magenta, yellow, violet]
hueInvert :: FColour -> FColour
hueInvert c = let (l,a,b) = cieLABView i c
in cieLAB i l (1-a) (1-b)
where i = Illum.a