-- | Image type and functions. module Graphics.PS.Image where import Data.CG.Minus {- hcg-minus -} import Graphics.PS.Path import Graphics.PS.GS -- | An image is a rendering of a graph of 'Path's. data Image = Stroke GS Path | Fill GS Path | ITransform (Matrix Double) Image | Over Image Image | Empty deriving (Eq, Show) -- | Layer one 'Image' over another. over :: Image -> Image -> Image over = Over -- | List of 'Path's at 'Image'. paths :: Image -> [Path] paths = let rec m i = let f = maybe id PTransform m in case i of Stroke _ p -> [f p] Fill _ p -> [f p] ITransform m' i' -> let m'' = maybe m' (* m') m in rec (Just m'') i' Over l r -> rec m l ++ rec m r Empty -> [] in rec Nothing {- -- | Apply a function to leaf nodes. i_apply :: (Image -> Image) -> Image -> Image i_apply f (ITransform m i) = ITransform m (i_apply f i) i_apply f (Over i j) = Over (i_apply f i) (i_apply f j) i_apply f i = f i -- | Apply a path function to leaf nodes. i_p_apply :: (P.Path -> P.Path) -> Image -> Image i_p_apply f (Stroke g p) = Stroke g (P.p_apply f p) i_p_apply f (Fill g p) = Fill g (P.p_apply f p) i_p_apply f (ITransform m i) = ITransform m (i_p_apply f i) i_p_apply f (Over i j) = Over (i_p_apply f i) (i_p_apply f j) i_p_apply _ Empty = Empty -}