packages feed

craftwerk-gtk-0.1: examples/Example1.hs

module Main where

import Graphics.Craftwerk.Core
import Graphics.Craftwerk.UI
import Graphics.Craftwerk.Core.Driver.Cairo

import qualified Data.Map as Map

main = do displayMultiple ([ ("Iteration",
                              RangeOption 1 6 1 1)
                           , ("Color", ChoiceOption ["red"
                                                    ,"green"
                                                    ,"blue"] 0)])
            $
            [ ("Iterator", renderFigure 1 1
                           (\opt -> return $
                                    style newStyle { closePath = yes
                                                   , fillColor =
                                                     Just $ [red,green,blue] !!
                                                     choice (opt Map.! "Color")
                                                   , stroke = no
                                                   , fill = yes} $
                                    iterations
                                    (round $ value (opt Map.! "Iteration"))
                                    (line [(0,0),(0,1),(1,0)])
                           ))]

iterations :: Int -> Figure -> Figure
iterations 0 f = f
iterations i f =
  let nf = iterations (i-1) f
  in scale (0.5,0.5) $ composition
     [
       translate (0,1) $ nf
     , translate (0,0) $ nf
     , translate (1,0) $ nf
     ]