module Render.CG.Minus.Picture where
import qualified Graphics.Rendering.Cairo as C
import qualified Graphics.Rendering.Cairo.Matrix as C (Matrix(..))
import Data.CG.Minus.Types
import Data.CG.Minus.Picture
import qualified Render.CG.Minus as Render
fill :: Ca -> C.Render ()
fill clr = Render.colour clr >> C.fill
stroke :: Pen -> C.Render ()
stroke (Pen lw clr dash) = Render.pen lw clr dash >> C.stroke
mark :: Either Pen Ca -> C.Render ()
mark = either stroke fill
mark_render :: Mark -> C.Render ()
mark_render m =
case m of
Line pen (Ln p1 p2) -> Render.line2 p1 p2 >> stroke pen
Polygon e pt -> Render.polygon (Ls pt) >> mark e
Circle e (c,r) -> Render.circle c r >> mark e
Dot clr (c,r) -> Render.circle c r >> fill clr
picture_render :: R -> Wn R -> Picture -> C.Render ()
picture_render m w p = do
let Wn (Pt x y) (Vc _ dy) = w
C.translate (m/2 x) (dy + m/2 + y)
C.transform (C.Matrix 1 0 0 (1) 0 0)
mapM_ mark_render p
picture_to_file_set :: [Render.File_Type] -> R -> FilePath -> Picture -> IO ()
picture_to_file_set ty_set m fn p = do
let w = picture_wn p
Wn _ (Vc x y) = w
mapM_ (\ty -> Render.render_to_file ty (m + x,m + y) fn (picture_render m w p)) ty_set
picture_to_pdf :: R -> FilePath -> Picture -> IO ()
picture_to_pdf = picture_to_file_set [Render.F_PDF]
picture_to_svg :: R -> FilePath -> Picture -> IO ()
picture_to_svg = picture_to_file_set [Render.F_SVG]
picture_to_pdf_and_svg :: R -> FilePath -> Picture -> IO ()
picture_to_pdf_and_svg = picture_to_file_set [Render.F_PDF,Render.F_SVG]