Chart-1.0: A library for generating 2D Charts and Plots

Safe HaskellNone




This module provides the API for drawing operations abstracted to arbitrary ChartBackends.


The backend Monad

type ChartBackend a = Program ChartBackendInstr aSource

A ChartBackend provides the capability to render a chart somewhere.

The coordinate system of the backend has its initial origin (0,0) in the top left corner of the drawing plane. The x-axis points towards the top right corner and the y-axis points towards the bottom left corner. The unit used by coordinates, the font size, and lengths is the always the same, but depends on the backend. All angles are measured in radians.

The line, fill and font style are set to their default values initially.

Information about the semantics of the instructions can be found in the documentation of ChartBackendInstr.

type CRender a = ChartBackend aSource

Deprecated: Use the new name ChartBackend!

Alias so the old name for rendering code still works.

Backend Operations

fillPath :: Path -> ChartBackend ()Source

Fill the given path using the current FillStyle. The given path will be closed prior to filling. This function does not perform alignment operations on the path. See Path for the exact semantic of paths.

strokePath :: Path -> ChartBackend ()Source

Stroke the outline of the given path using the current LineStyle. This function does not perform alignment operations on the path. See Path for the exact semantic of paths.

drawText :: Point -> String -> ChartBackend ()Source

Draw a single-line textual label anchored by the baseline (vertical) left (horizontal) point. Uses the current FontStyle for drawing.

textSize :: String -> ChartBackend TextSizeSource

Calculate a TextSize object with rendering information about the given string without actually rendering it.

withTransform :: Matrix -> ChartBackend a -> ChartBackend aSource

Apply the given transformation in this local environment when drawing. The given transformation is applied after the current transformation. This means both are combined.

withClipRegion :: Rect -> ChartBackend a -> ChartBackend aSource

Use the given clipping rectangle when drawing in this local environment. The new clipping region is intersected with the given clip region. You cannot escape the clip!

withFontStyle :: FontStyle -> ChartBackend a -> ChartBackend aSource

Use the given font style in this local environment when drawing text.

An implementing backend is expected to guarentee to support the following font families: serif, sans-serif and monospace;

If the backend is not able to find or load a given font it is required to fall back to a custom fail-safe font and use it instead.

withFillStyle :: FillStyle -> ChartBackend a -> ChartBackend aSource

Use the given fill style in this local environment when filling paths.

withLineStyle :: LineStyle -> ChartBackend a -> ChartBackend aSource

Use the given line style in this local environment when stroking paths.

Backend Helpers

getPointAlignFn :: ChartBackend (Point -> Point)Source

Get the point alignment function

getCoordAlignFn :: ChartBackend (Point -> Point)Source

Get the coordinate alignment function

Text Metrics

data TextSize Source

Text metrics returned by textSize.




textSizeWidth :: Double

The total width of the text.

textSizeAscent :: Double

The ascent or space above the baseline.

textSizeDescent :: Double

The decent or space below the baseline.

textSizeYBearing :: Double

The Y bearing.

textSizeHeight :: Double

The total height of the text.


Line Types

data LineCap Source

The different supported line ends.



Just cut the line straight.


Make a rounded line end.


Make a square that ends the line.

data LineJoin Source

The different supported ways to join line ends.



Extends the outline until they meet each other.


Draw a circle fragment to connet line end.


Like miter, but cuts it off if a certain threshold is exceeded.

data LineStyle Source

Data type for the style of a line.




_line_width :: Double

The thickness of a line in device units.

_line_color :: AlphaColour Double

The color of a line.

_line_dashes :: [Double]

The dash pattern. Every value at a even index gives a dash width and every value at a odd index gives a gap width in device units.

_line_cap :: LineCap

How to end a line.

_line_join :: LineJoin

How to connect two lines.


Eq LineStyle 
Show LineStyle 
Default LineStyle

The default line style.

Fill Types

newtype FillStyle Source

Abstract data type for a fill style.

The contained Cairo action sets the required fill style in the Cairo rendering state.


Eq FillStyle 
Show FillStyle 
Default FillStyle

The default fill style.

Font and Text Types

data FontWeight Source

The possible weights of a font.



Normal font style without weight.


Bold font.


data FontSlant Source

The possible slants of a font.



Normal font style without slant.


With a slight slant.


With a greater slant.


data FontStyle Source

Data type for a font.




_font_name :: String

The font family or font face to use.

_font_size :: Double

The height of the rendered font in device coordinates.

_font_slant :: FontSlant

The slant to render with.

_font_weight :: FontWeight

The weight to render with.

_font_color :: AlphaColour Double

The color to render text with.


Eq FontStyle 
Show FontStyle 
Default FontStyle

The default font style.

defaultFontStyle :: FontStyleSource

Deprecated: Use the according Data.Default instance!

The default font style.

data HTextAnchor Source

Possible horizontal anchor points for text.



data VTextAnchor Source

Possible vertical anchor points for text.

type AlignmentFn = Point -> PointSource

A function to align points for a certain rendering device.

data AlignmentFns Source

Holds the point and coordinate alignment function.

vectorAlignmentFns :: AlignmentFnsSource

Alignment to render good on vector based graphics.

bitmapAlignmentFns :: AlignmentFnsSource

Alignment to render good on raster based graphics.