packages feed

wumpus-basic-0.8.0: demo/Picture.hs

{-# OPTIONS -Wall #-}

module Picture where

import Wumpus.Basic.Colour.SVGColours
import Wumpus.Basic.Graphic
import Wumpus.Basic.PictureLanguage

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 "red `centerOver` green `centerOver` 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 "red `nextToH` green `nextToH` 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 "red `nextToV` green `nextToV` 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]


--------------------------------------------------------------------------------

pic_drawing_ctx :: DrawingContext
pic_drawing_ctx = standardContext 14

picAnno :: DPicture -> String -> DPicture
picAnno pic msg = alignHSep HCenter 30 pic lbl
  where
    lbl = liftToPictureU $ execDrawing pic_drawing_ctx $ 
            draw $ textline msg `at` zeroPt


rect_red :: DPicture
rect_red = liftToPictureU $ execDrawing pic_drawing_ctx $ 
              localCtx (secondaryColour indian_red)
                       (draw $ borderedRectangle 30 10 `at` (P2 0 10))
                 
rect_green :: DPicture
rect_green = liftToPictureU $ execDrawing pic_drawing_ctx $ 
              localCtx (secondaryColour olive_drab)
                       (draw $ borderedRectangle 15 15 `at` (P2 10 10))


rect_blue :: DPicture
rect_blue = liftToPictureU $ execDrawing pic_drawing_ctx $ 
              localCtx (secondaryColour powder_blue)
                       (draw $ borderedRectangle 20 30 `at` (P2 10 0))