-- | Rendering of "Data.CG.Minus.Picture". module Render.CG.Minus.Picture where import qualified Graphics.Rendering.Cairo as C {- cairo -} import qualified Graphics.Rendering.Cairo.Matrix as C (Matrix(..)) {- cairo -} import Data.CG.Minus.Types {- hcg-minus -} import Data.CG.Minus.Picture {- hcg-minus -} import qualified Render.CG.Minus as Render {- hcg-minus-cairo -} 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 -- | m = margin 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 -- | 'Render.render_to_file' of 'picture_render'. 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]