-- -----------------------------------------------------------------------
--
-- $Source: /repository/uni/htk/resources/Colour.hs,v $
--
-- HTk - a GUI toolkit for Haskell - (c) Universitaet Bremen
--
-- $Revision: 1.3 $ from $Date: 2002/04/10 19:58:02 $
-- Last modification by $Author: ger $
--
-- -----------------------------------------------------------------------
---
-- Basic types and classes for coloured resources.
module Colour (
ColourDesignator(..),
Colour(..)
) where
import GUIValue
import Char
-- -----------------------------------------------------------------------
-- Colour Designator
-- -----------------------------------------------------------------------
---
-- Datatypes that describe a colour instantiate the
-- class ColourDesignator.
class ColourDesignator c where
toColour :: c -> Colour
-- -----------------------------------------------------------------------
-- instances
-- -----------------------------------------------------------------------
---
-- A colour itself describes a colour.
instance ColourDesignator Colour where
---
-- Internal.
toColour = id
---
-- Strings like "red", "blue" etc. decribe colours.
instance ColourDesignator [Char] where
---
-- Internal.
toColour = Colour
---
-- A tuple of rgb values describes a colour.
instance ColourDesignator (Int,Int,Int) where
---
-- Internal.
toColour (r,g,b) = Colour (rgb r g b)
---
-- A tuple of rgb values describes a colour.
instance ColourDesignator (Double,Double,Double) where
---
-- Internal.
toColour (r,g,b) = Colour (rgb (iround r) (iround g) (iround b))
where iround :: Double -> Int
iround x = round x
-- -----------------------------------------------------------------------
-- datatype
-- -----------------------------------------------------------------------
---
-- The Colour datatype.
newtype Colour = Colour String
---
-- Internal.
instance GUIValue Colour where
---
-- Internal.
cdefault = Colour "grey"
---
-- Internal.
instance Read Colour where
---
-- Internal.
readsPrec p b =
case dropWhile (isSpace) b of
xs -> [(Colour (takeWhile (/= ' ') xs),"")]
---
-- Internal.
instance Show Colour where
---
-- Internal.
showsPrec d (Colour p) r = p ++ r
-- -----------------------------------------------------------------------
-- Colour Codes
-- -----------------------------------------------------------------------
rgb :: Int -> Int -> Int -> String
rgb r g b = "#" ++ concat (map (hex 2 "") [r,g,b]) where
hex 0 rs _ = rs
hex t rs 0 = hex (t-1) ('0':rs) 0
hex t rs i = let m = mod i 16
in hex (t-1)((chr (48+m+7*(div m 10))):rs)(div i 16)
{- this function is borrowed from the implementation of tkGofer -}