Maintainer | diagrams-discuss@googlegroups.com |
---|---|
Safe Haskell | None |
A full-featured rendering backend for diagrams using the cairo rendering engine.
To invoke the cairo backend, use methods from the
Backend
instance for Cairo
. In particular,
renderDia
has the generic type
renderDia :: b -> Options b v -> QDiagram b v m -> Result b v
(omitting a few type class constraints). b
represents the
backend type, v
the vector space, and m
the type of monoidal
query annotations on the diagram. Options
and Result
are
associated data and type families, respectively, which yield the
type of option records and rendering results specific to any
particular backend. For b ~ Cairo
and v ~ R2
, we have
data family Options Cairo R2 = CairoOptions { cairoFileName :: String -- ^ The name of the file you want generated , cairoSizeSpec :: SizeSpec2D -- ^ The requested size of the output , cairoOutputType :: OutputType -- ^ the output format and associated options , cairoBypassAdjust :: Bool -- ^ Should the 'adjustDia' step be bypassed during rendering? }
data family Render Cairo R2 = C (RenderM
())
type family Result Cairo R2 = (IO (), Render
())
So the type of renderDia
resolves to
renderDia :: Cairo -> Options Cairo R2 -> QDiagram Cairo R2 m -> (IO (), Render
())
which you could call like renderDia Cairo (CairoOptions foo.png
(Width 250) PNG) myDiagram
. This would return a pair; the first
element is an IO ()
action which will write out foo.png
to
disk, and the second is a cairo rendering action which can be used,
for example, to directly draw to a Gtk window.
- data OutputType
- = PNG
- | PS
- | SVG
- | RenderOnly
- data Cairo = Cairo
Cairo-supported output formats
data OutputType Source
Output types supported by cairo, including four different file types (PNG, PS, PDF, SVG). If you want to output directly to GTK windows, see the diagrams-gtk package.
PNG | Portable Network Graphics output. |
PS | PostScript output |
Portable Document Format output. | |
SVG | Scalable Vector Graphics output. |
RenderOnly | Don't output any file; the returned |
Cairo-specific options
Unfortunately, Haddock does not yet support documentation for associated data families, so we must just provide it manually. This module defines
data family Options Cairo R2 = CairoOptions { cairoFileName :: String -- ^ The name of the file you want generated , cairoSizeSpec :: SizeSpec2D -- ^ The requested size of the output , cairoOutputType :: OutputType -- ^ the output format and associated options }
So, for example, you could call the renderDia
function (from
Graphics.Rendering.Diagrams.Core) like this:
renderDia Cairo (CairoOptions "foo.png" (Width 250) PNG) myDiagram
Important note: a bug in GHC 7.0.x and 7.4.1 prevents re-exporting this data family. (Strangely, this bug seems to be present in 7.0 and 7.4 but not 7.2.) To bring CairoOptions into scope when using GHC 7.0.x or 7.4 you must import Diagrams.Backend.Cairo.Internal.
Backend token
This data declaration is simply used as a token to distinguish
the cairo backend: (1) when calling functions where the type
inference engine would otherwise have know way to know which
backend you wanted to use, and (2) as an argument to the
Backend
and Renderable
type classes.