{-# LANGUAGE OverloadedStrings, RecordWildCards, FlexibleInstances #-} module Graphics.Rendering.Rect.CSS(RectStyle(..), colour) where import Stylist (PropertyParser(..)) import Graphics.Rendering.Rect.CSS.Colour (ColourPallet(foreground)) import Graphics.Rendering.Rect.CSS.Backgrounds (Backgrounds(..)) import Data.Text (Text) import Data.Colour(AlphaColour) data RectStyle img = RectStyle { colours :: ColourPallet, backgrounds :: Backgrounds img } deriving (Eq, Show, Read) colour :: RectStyle img -> AlphaColour Float colour = foreground . colours instance PropertyParser (RectStyle Text) where temp = RectStyle { colours = temp, backgrounds = temp } inherit RectStyle {..} = RectStyle { colours = inherit colours, backgrounds = temp } shorthand self key value | ret@(_:_) <- shorthand (backgrounds self) key value = ret | Just _ <- longhand self self key value = [(key, value)] | otherwise = [] longhand parent self key value | Just ret <- longhand (backgrounds parent) { pallet = colours parent } (backgrounds self) { pallet = colours self } key value = Just self { backgrounds = ret } | Just ret <- longhand (colours parent) (colours self) key value = Just self { colours = ret } | otherwise = Nothing