packages feed

lhae-0.0.2: src/Util/Color.hs

module Util.Color (Color (..),fromWXColor,toWXColor,toHexColor)
    where

import qualified Graphics.UI.WX as WX
import Util.Sexp (Sexp (..))
import Util.Sexpable (Sexpable (..), unexpected)
import Numeric (showHex)

newtype Color = Color (Int,Int,Int)

instance Sexpable Color where
    toSexp (Color (r,g,b)) = List [toSexp r,toSexp g,toSexp b]
    fromSexp (List [red,green,blue]) = 
        do r <- fromSexp red
           g <- fromSexp green
           b <- fromSexp blue
           return $ Color (r,g,b)
    fromSexp sexp = unexpected sexp

fromWXColor :: WX.Color -> Color
fromWXColor c = Color (WX.colorRed c, WX.colorGreen c, WX.colorBlue c)

toWXColor :: Color -> WX.Color
toWXColor (Color (r,g,b)) = WX.rgb r g b

toHexColor :: Color -> String
toHexColor (Color (r,g,b)) = 
    let hex x = case showHex x "" of
                  [y] -> ['0',y]
                  y -> y
    in
      concat ["#", hex r, hex g, hex b]