{-# LANGUAGE UnicodeSyntax, LambdaCase #-} module DMenu.Color ( Color(..), showColorAsHex, ) where import Numeric (showHex) -- | Multiple representations for colors. -- -- For example, green can be defined as -- -- > green1 = HexColor 0x00FF00 -- > green2 = RGBColor 0 255 0 -- > green3 = RGBColorF 0 1 0 data Color = HexColor Int | RGBColor Int Int Int | RGBColorF Float Float Float deriving (Eq, Ord, Read, Show) -- | Render a color to a hexadecimal @String@ representation. For example -- -- >>> showColorAsHex (RGBColor 5 5 5) -- "#050505" showColorAsHex :: Color → String showColorAsHex = \case HexColor i → "#" ++ fillLeft '0' 6 (showHex i "") RGBColor r g b → showColorAsHex $ HexColor $ r*256*256 + g*256 + b RGBColorF r g b → showColorAsHex $ RGBColor (f r) (f g) (f b) where f = floor . (* 255) fillLeft c i s = replicate (i - length s) c ++ s