diagrams-cairo-1.2: Cairo backend for diagrams drawing EDSL

Copyright(c) 2011 Diagrams-cairo team (see LICENSE)
LicenseBSD-style (see LICENSE)
Safe HaskellNone



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 CairoOptions.

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 Source

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 Backend and Renderable type classes.




Eq Cairo 
Ord Cairo 
Read Cairo 
Show Cairo 
Typeable * Cairo 
Backend Cairo R2 
Renderable Text Cairo 
Mainable [(String, Diagram Cairo R2)] 
Mainable [(Diagram Cairo R2, GifDelay)] 
Renderable (DImage External) Cairo 
Renderable (Trail R2) Cairo 
Renderable (Path R2) Cairo 
Show (Options Cairo R2) 
Monoid (Render Cairo R2) 
Hashable (Options Cairo R2) 
Mainable (Animation Cairo R2) 
Mainable (Diagram Cairo R2) 
Renderable (Segment Closed R2) Cairo 
type Result Cairo R2 = (IO (), Render ()) 
data Options Cairo R2 = CairoOptions {} 
data Render Cairo R2 = C (RenderM ()) 
type MainOpts [(String, Diagram Cairo R2)] = (MainOpts (Diagram Cairo R2), DiagramMultiOpts) 
type MainOpts [(Diagram Cairo R2, GifDelay)] = (DiagramOpts, GifOpts) 
type MainOpts (Animation Cairo R2) = (MainOpts (Diagram Cairo R2), DiagramAnimOpts) 
type MainOpts (Diagram Cairo R2) = (DiagramOpts, DiagramLoopOpts) 

type B = Cairo Source

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.



Portable Network Graphics output.


PostScript output


Portable Document Format output.


Scalable Vector Graphics output.


Don't output any file; the returned IO () action will do nothing, but the Render () action can be used (e.g. to draw to a Gtk window; see the diagrams-gtk package).

data CairoState Source

Custom state tracked in the RenderM monad.




_accumStyle :: Style R2

The current accumulated style.

_ignoreFill :: Bool

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.


Default CairoState 

type RenderM a = StateStackT CairoState Render a Source

The custom monad in which intermediate drawing options take place; Render is cairo's own rendering monad.

save :: RenderM () Source

Push the current context onto a stack.

restore :: RenderM () Source

Restore the context from a stack.

runC :: Render Cairo R2 -> RenderM () Source

toRender :: RTree Cairo R2 a -> Render Cairo R2 Source

cairoSizeSpec :: Lens' (Options Cairo R2) SizeSpec2D Source

renderC :: (Renderable a Cairo, V a ~ R2) => a -> RenderM () Source

Render an object that the cairo backend knows how to render.

getStyleAttrib :: AttributeClass a => (a -> b) -> RenderM (Maybe b) Source

Get an accumulated style attribute from the render monad state.

cairoStyle :: Style v -> RenderM () Source

Handle those style attributes for which we can immediately emit cairo instructions as we encounter them in the tree (clip, font size, fill rule, line width, cap, join, and dashing). Other attributes (font face, slant, weight; fill color, stroke color, opacity) must be accumulated.

fromFontWeight :: FontWeight -> Weight Source

applyOpacity :: Color c => c -> Style v -> AlphaColour Double Source

Apply the opacity from a style to a given color.

cairoTransf :: T2 -> Render () Source

Multiply the current transformation matrix by the given 2D transformation.

fromLineCap :: LineCap -> LineCap Source

cairoPath :: Path R2 -> RenderM () Source

addStop :: MonadIO m => Pattern -> GradientStop -> m () Source

cairoSpreadMethod :: SpreadMethod -> Extend Source

setTexture :: Maybe Texture -> RenderM () Source

if' :: Monad m => (a -> m ()) -> Maybe a -> m () Source