This module contains the internal implementation guts of the diagrams cairo backend. If you want to see how the cairo backend works under the hood, you are in the right place (try clicking on the "Source" links). (Guts under the hood, what an awful mixed metaphor.) If you know what you are doing and really want access to the internals of the implementation, you are also in the right place. Otherwise, you should have no need of this module; import Diagrams.Backend.Cairo.CmdLine or Diagrams.Backend.Cairo instead.
The one exception is that this module may have to be imported
sometimes to work around an apparent bug in certain versions of
GHC, which results in a "not in scope" error for
The types of all the
fromX functions look funny in the Haddock
output, which displays them like
Type -> Type. In fact they are
all of the form
Type -> Graphics.Rendering.Cairo.Type, i.e.
they convert from a diagrams type to a cairo type of the same name.
- data Cairo = Cairo
- data OutputType
- type RenderM a = StateT Bool Render a
- save :: RenderM ()
- restore :: RenderM ()
- renderC :: (Renderable a Cairo, V a ~ R2) => a -> RenderM ()
- cairoMiscStyle :: Style v -> RenderM ()
- fromFontSlant :: FontSlant -> FontSlant
- fromFontWeight :: FontWeight -> FontWeight
- cairoStrokeStyle :: Bool -> Style v -> Render ()
- setSource :: Color c => c -> Style v -> Render ()
- cairoTransf :: T2 -> Render ()
- fromLineCap :: LineCap -> LineCap
- fromLineJoin :: LineJoin -> LineJoin
- fromFillRule :: FillRule -> FillRule
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 no way to know which
backend you wanted to use, and (2) as an argument to the
Renderable type classes.
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
Portable Network Graphics output.
Portable Document Format output.
Scalable Vector Graphics output.
Don't output any file; the returned
The custom monad in which intermediate drawing options take
Render is cairo's own rendering
monad. Right now we simply maintain a Bool state to track
whether or not we saw any lines in the most recent path (as
opposed to loops). If we did, we should ignore any fill
attribute. diagrams-lib separates lines and loops into separate
path primitives so we don't have to worry about seeing them
together in the same path.
Render an object that the cairo backend knows how to render.
Handle "miscellaneous" style attributes (clip, font stuff, fill color and fill rule).
Handle style attributes having to do with stroke.
Multiply the current transformation matrix by the given 2D transformation.