{-# LANGUAGE NoImplicitPrelude #-}
module Imj.Graphics.UI.Colored
( Colored(..)
, module Imj.Graphics.Class.Colorable
) where
import Imj.Prelude
import Imj.Graphics.Class.Colorable
import Imj.Graphics.Class.DiscreteColorableMorphing
import Imj.Graphics.Class.HasLayeredColor
import Imj.Graphics.Color
import Imj.Graphics.Interpolation
data Colored a = Colored {
_coloredColor :: !LayeredColor
, _coloredColorable :: !a
} deriving(Show)
instance HasLayeredColor (Colored a) where
getColor (Colored color _) = color
{-# INLINABLE getColor #-}
instance (Colorable a)
=> Drawable (Colored a) where
draw (Colored color colorable) =
drawUsingColor colorable color
instance (DiscreteColorableMorphing a) => DiscreteDistance (Colored a) where
distance (Colored colorFrom from) (Colored colorTo to) =
max (distance from to) (distance colorFrom colorTo)
{-# INLINABLE distance #-}
instance (DiscreteColorableMorphing a) => DiscreteMorphing (Colored a) where
drawMorphing (Colored colorFrom from) (Colored colorTo to) frame =
drawMorphingUsingColor from to frame (interpolate colorFrom colorTo frame)
{-# INLINABLE drawMorphing #-}