{-# OPTIONS -Wall #-}
module Picture where
import Wumpus.Basic.Colour.SVGColours
import Wumpus.Basic.Graphic
import Wumpus.Basic.PictureLanguage
import Wumpus.Basic.SafeFonts
import Wumpus.Core -- package: wumpus-core
import System.Directory
main :: IO ()
main = do
createDirectoryIfMissing True "./out/"
>> writeEPS_latin1 "./out/picture_lang.eps" pictures
>> writeSVG_latin1 "./out/picture_lang.svg" pictures
pictures :: DPicture
pictures = vsep 12 pic1 [ pic2, pic3, pic4, pic5
, pic6, pic7, pic8, pic9
, pic10, pic11, pic12, pic13 ]
pic1 :: DPicture
pic1 = picAnno pic "red `over` green `over` blue"
where
pic :: DPicture
pic = illustrateBounds blue $ rect_red `over` rect_green `over` rect_blue
pic2 :: DPicture
pic2 = picAnno pic "red `under` green `under` blue"
where
pic :: DPicture
pic = illustrateBounds blue $ rect_red `under` rect_green `under` rect_blue
pic3 :: DPicture
pic3 = picAnno pic "rect_red `centerOver` rect_green `centerOver` rect_blue"
where
pic :: DPicture
pic = illustrateBounds blue $
rect_red `centerOver` rect_green `centerOver` rect_blue
-- Note - nextToH only moves pictures in the horizontal.
--
pic4 :: DPicture
pic4 = picAnno pic "rect_red `nextToH` rect_green `nextToH` rect_blue"
where
pic :: DPicture
pic = illustrateBounds blue $
rect_red `nextToH` rect_green `nextToH` rect_blue
-- Note - nextToV only moves pictures in the vertical.
--
pic5 :: DPicture
pic5 = picAnno pic "rect_red `nextToV` rect_green `nextToV` rect_blue"
where
pic :: DPicture
pic = illustrateBounds blue $
rect_red `nextToV` rect_green `nextToV` rect_blue
pic6 :: DPicture
pic6 = picAnno pic "[red, green] `stackOver` blue"
where
pic :: DPicture
pic = illustrateBounds blue $
[rect_red, rect_green] `stackOver` rect_blue
pic7 :: DPicture
pic7 = picAnno pic "zconcat red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
zconcat rect_red [rect_green, rect_blue]
pic8 :: DPicture
pic8 = picAnno pic "hcat red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
hcat rect_red [rect_green, rect_blue]
pic9 :: DPicture
pic9 = picAnno pic "vcat red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
vcat rect_red [rect_green, rect_blue]
pic10 :: DPicture
pic10 = picAnno pic "hsep 20 red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
hsep 20 rect_red [rect_green, rect_blue]
pic11 :: DPicture
pic11 = picAnno pic "vsep 20 red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
vsep 20 rect_red [rect_green, rect_blue]
pic12 :: DPicture
pic12 = picAnno pic "hcatA HTop red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
hcatA HTop rect_red [rect_green, rect_blue]
pic13 :: DPicture
pic13 = picAnno pic "vcatA VCenter red [green, blue]"
where
pic :: DPicture
pic = illustrateBounds blue $
vcatA VCenter rect_red [rect_green, rect_blue]
--------------------------------------------------------------------------------
picAnno :: DPicture -> String -> DPicture
picAnno pic msg = alignHSep HCenter 30 pic lbl
where
lbl = drawGraphicU $ supply (P2 0 0) $
textline (black,FontAttr 14 courier) msg
rect_red :: DPicture
rect_red = drawGraphicU $ supply (P2 0 10) $
strokedRectangle black 30 10 `cc` filledRectangle indian_red 30 10
rect_green :: DPicture
rect_green = drawGraphicU $ supply (P2 10 10) $
strokedRectangle black 15 15 `cc` filledRectangle olive_drab 15 15
rect_blue :: DPicture
rect_blue = drawGraphicU $ supply (P2 10 0) $
strokedRectangle black 20 30 `cc` filledRectangle powder_blue 20 30