module Dep.Bricks.Layered (
Layer
, createImage, mergeLayers
) where
import Dep.Utils(flatRaster)
import Graphics.Vty.Image(Image, (<->), (<|>), char, emptyImage)
import Graphics.Vty.Attributes(Attr)
type Layer a = [[a]]
mergeLayers
:: (Char -> Bool)
-> [(Attr, Layer Char)]
-> Image
mergeLayers :: (Char -> Bool) -> [(Attr, Layer Char)] -> Image
mergeLayers Char -> Bool
p = [[(Attr, Char)]] -> Image
createImage ([[(Attr, Char)]] -> Image)
-> ([(Attr, Layer Char)] -> [[(Attr, Char)]])
-> [(Attr, Layer Char)]
-> Image
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> [(Attr, Layer Char)] -> [[(Attr, Char)]]
forall b a. (b -> Bool) -> [(a, Raster b)] -> Raster (a, b)
flatRaster Char -> Bool
p
createImage
:: [[(Attr, Char)]]
-> Image
createImage :: [[(Attr, Char)]] -> Image
createImage = ([(Attr, Char)] -> Image -> Image)
-> Image -> [[(Attr, Char)]] -> Image
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Image -> Image -> Image
(<->) (Image -> Image -> Image)
-> ([(Attr, Char)] -> Image) -> [(Attr, Char)] -> Image -> Image
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Attr, Char) -> Image -> Image)
-> Image -> [(Attr, Char)] -> Image
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Image -> Image -> Image
(<|>) (Image -> Image -> Image)
-> ((Attr, Char) -> Image) -> (Attr, Char) -> Image -> Image
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Attr -> Char -> Image) -> (Attr, Char) -> Image
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Attr -> Char -> Image
char) Image
emptyImage) Image
emptyImage