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

Copyright | (c) Tim Docker 2014
License | BSD-style (see chart/COPYRIGHT)
Safe Haskell | None
Language | Haskell98

Graphics.Rendering.Chart.Backend

Contents

- The backend Monad
- Backend Operations
- Backend Helpers
- Text Metrics
- Line Types
- Fill Types
- Font and Text Types

Description

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

Synopsis

- type BackendProgram a = Program ChartBackendInstr a
- fillPath :: Path -> BackendProgram ()
- strokePath :: Path -> BackendProgram ()
- drawText :: Point -> String -> BackendProgram ()
- textSize :: String -> BackendProgram TextSize
- withTransform :: Matrix -> BackendProgram a -> BackendProgram a
- withClipRegion :: Rect -> BackendProgram a -> BackendProgram a
- withFontStyle :: FontStyle -> BackendProgram a -> BackendProgram a
- withFillStyle :: FillStyle -> BackendProgram a -> BackendProgram a
- withLineStyle :: LineStyle -> BackendProgram a -> BackendProgram a
- getPointAlignFn :: BackendProgram (Point -> Point)
- getCoordAlignFn :: BackendProgram (Point -> Point)
- data TextSize = TextSize {
  - textSizeWidth :: Double
  - textSizeAscent :: Double
  - textSizeDescent :: Double
  - textSizeYBearing :: Double
  - textSizeHeight :: Double
  }
- data LineCap
  - = LineCapButt
  - | LineCapRound
  - | LineCapSquare
- data LineJoin
  - = LineJoinMiter
  - | LineJoinRound
  - | LineJoinBevel
- data LineStyle = LineStyle {
  - _line_width :: Double
  - _line_color :: AlphaColour Double
  - _line_dashes :: [Double]
  - _line_cap :: LineCap
  - _line_join :: LineJoin
  }
- line_width :: Lens' LineStyle Double
- line_color :: Lens' LineStyle (AlphaColour Double)
- line_dashes :: Lens' LineStyle [Double]
- line_cap :: Lens' LineStyle LineCap
- line_join :: Lens' LineStyle LineJoin
- newtype FillStyle = FillStyleSolid {
  - _fill_color :: AlphaColour Double
  }
- data FontWeight
  - = FontWeightNormal
  - | FontWeightBold
- data FontSlant
  - = FontSlantNormal
  - | FontSlantItalic
  - | FontSlantOblique
- data FontStyle = FontStyle {
  - _font_name :: String
  - _font_size :: Double
  - _font_slant :: FontSlant
  - _font_weight :: FontWeight
  - _font_color :: AlphaColour Double
  }
- data HTextAnchor
  - = HTA_Left
  - | HTA_Centre
  - | HTA_Right
- data VTextAnchor
  - = VTA_Top
  - | VTA_Centre
  - | VTA_Bottom
  - | VTA_BaseLine
- font_name :: Lens' FontStyle String
- font_size :: Lens' FontStyle Double
- font_slant :: Lens' FontStyle FontSlant
- font_weight :: Lens' FontStyle FontWeight
- font_color :: Lens' FontStyle (AlphaColour Double)
- type AlignmentFn = Point -> Point
- data AlignmentFns
- vectorAlignmentFns :: AlignmentFns
- bitmapAlignmentFns :: AlignmentFns

# The backend Monad

type BackendProgram a = Program ChartBackendInstr a #

A `BackendProgram` 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`.

# Backend Operations

fillPath :: Path -> BackendProgram () #

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 -> BackendProgram () #

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 -> BackendProgram () #

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

textSize :: String -> BackendProgram TextSize #

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

withTransform :: Matrix -> BackendProgram a -> BackendProgram a #

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 -> BackendProgram a -> BackendProgram a #

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 -> BackendProgram a -> BackendProgram a #

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

An implementing backend is expected to guarantee 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 -> BackendProgram a -> BackendProgram a #

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

withLineStyle :: LineStyle -> BackendProgram a -> BackendProgram a #

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

# Backend Helpers

getPointAlignFn :: BackendProgram (Point -> Point) #

Get the point alignment function

getCoordAlignFn :: BackendProgram (Point -> Point) #

Get the coordinate alignment function

# Text Metrics

data TextSize #

Text metrics returned by `textSize`.

Constructors

TextSize |
Fields 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.

#### Instances

Instances details

Show TextSize # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> TextSize -> ShowS # show :: TextSize -> String # showList :: [TextSize] -> ShowS #
Eq TextSize # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: TextSize -> TextSize -> Bool # (/=) :: TextSize -> TextSize -> Bool #

# Line Types

data LineCap #

The different supported line ends.

Constructors

LineCapButt | Just cut the line straight.
LineCapRound | Make a rounded line end.
LineCapSquare | Make a square that ends the line.

#### Instances

Instances details

Show LineCap # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> LineCap -> ShowS # show :: LineCap -> String # showList :: [LineCap] -> ShowS #
Eq LineCap # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: LineCap -> LineCap -> Bool # (/=) :: LineCap -> LineCap -> Bool #
Ord LineCap # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods compare :: LineCap -> LineCap -> Ordering # (<) :: LineCap -> LineCap -> Bool # (<=) :: LineCap -> LineCap -> Bool # (>) :: LineCap -> LineCap -> Bool # (>=) :: LineCap -> LineCap -> Bool # max :: LineCap -> LineCap -> LineCap # min :: LineCap -> LineCap -> LineCap #

data LineJoin #

The different supported ways to join line ends.

Constructors

LineJoinMiter | Extends the outline until they meet each other.
LineJoinRound | Draw a circle fragment to connet line end.
LineJoinBevel | Like miter, but cuts it off if a certain threshold is exceeded.

#### Instances

Instances details

Show LineJoin # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> LineJoin -> ShowS # show :: LineJoin -> String # showList :: [LineJoin] -> ShowS #
Eq LineJoin # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: LineJoin -> LineJoin -> Bool # (/=) :: LineJoin -> LineJoin -> Bool #
Ord LineJoin # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods compare :: LineJoin -> LineJoin -> Ordering # (<) :: LineJoin -> LineJoin -> Bool # (<=) :: LineJoin -> LineJoin -> Bool # (>) :: LineJoin -> LineJoin -> Bool # (>=) :: LineJoin -> LineJoin -> Bool # max :: LineJoin -> LineJoin -> LineJoin # min :: LineJoin -> LineJoin -> LineJoin #

data LineStyle #

Data type for the style of a line.

Constructors

LineStyle |
Fields _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.

#### Instances

Instances details

Default LineStyle # | The default line style.
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods def :: LineStyle #
Show LineStyle # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> LineStyle -> ShowS # show :: LineStyle -> String # showList :: [LineStyle] -> ShowS #
Eq LineStyle # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: LineStyle -> LineStyle -> Bool # (/=) :: LineStyle -> LineStyle -> Bool #

line_width :: Lens' LineStyle Double #

line_color :: Lens' LineStyle (AlphaColour Double) #

line_dashes :: Lens' LineStyle [Double] #

line_cap :: Lens' LineStyle LineCap #

line_join :: Lens' LineStyle LineJoin #

# Fill Types

newtype FillStyle #

Abstract data type for a fill style.

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

Constructors

FillStyleSolid |
Fields _fill_color :: AlphaColour Double

#### Instances

Instances details

Default FillStyle # | The default fill style.
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods def :: FillStyle #
Show FillStyle # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> FillStyle -> ShowS # show :: FillStyle -> String # showList :: [FillStyle] -> ShowS #
Eq FillStyle # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: FillStyle -> FillStyle -> Bool # (/=) :: FillStyle -> FillStyle -> Bool #

# Font and Text Types

data FontWeight #

The possible weights of a font.

Constructors

FontWeightNormal | Normal font style without weight.
FontWeightBold | Bold font.

#### Instances

Instances details

Default FontWeight # | The default font weight.
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods def :: FontWeight #
Show FontWeight # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> FontWeight -> ShowS # show :: FontWeight -> String # showList :: [FontWeight] -> ShowS #
Eq FontWeight # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: FontWeight -> FontWeight -> Bool # (/=) :: FontWeight -> FontWeight -> Bool #
Ord FontWeight # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods compare :: FontWeight -> FontWeight -> Ordering # (<) :: FontWeight -> FontWeight -> Bool # (<=) :: FontWeight -> FontWeight -> Bool # (>) :: FontWeight -> FontWeight -> Bool # (>=) :: FontWeight -> FontWeight -> Bool # max :: FontWeight -> FontWeight -> FontWeight # min :: FontWeight -> FontWeight -> FontWeight #

data FontSlant #

The possible slants of a font.

Constructors

FontSlantNormal | Normal font style without slant.
FontSlantItalic | With a slight slant.
FontSlantOblique | With a greater slant.

#### Instances

Instances details

Default FontSlant # | The default font slant.
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods def :: FontSlant #
Show FontSlant # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> FontSlant -> ShowS # show :: FontSlant -> String # showList :: [FontSlant] -> ShowS #
Eq FontSlant # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: FontSlant -> FontSlant -> Bool # (/=) :: FontSlant -> FontSlant -> Bool #
Ord FontSlant # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods compare :: FontSlant -> FontSlant -> Ordering # (<) :: FontSlant -> FontSlant -> Bool # (<=) :: FontSlant -> FontSlant -> Bool # (>) :: FontSlant -> FontSlant -> Bool # (>=) :: FontSlant -> FontSlant -> Bool # max :: FontSlant -> FontSlant -> FontSlant # min :: FontSlant -> FontSlant -> FontSlant #

data FontStyle #

Data type for a font.

Constructors

FontStyle |
Fields _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.

#### Instances

Instances details

Default FontStyle # | The default font style.
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods def :: FontStyle #
Show FontStyle # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> FontStyle -> ShowS # show :: FontStyle -> String # showList :: [FontStyle] -> ShowS #
Eq FontStyle # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: FontStyle -> FontStyle -> Bool # (/=) :: FontStyle -> FontStyle -> Bool #

data HTextAnchor #

Possible horizontal anchor points for text.

Constructors

HTA_Left |
HTA_Centre |
HTA_Right |

#### Instances

Instances details

Show HTextAnchor # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> HTextAnchor -> ShowS # show :: HTextAnchor -> String # showList :: [HTextAnchor] -> ShowS #
Eq HTextAnchor # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: HTextAnchor -> HTextAnchor -> Bool # (/=) :: HTextAnchor -> HTextAnchor -> Bool #
Ord HTextAnchor # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods compare :: HTextAnchor -> HTextAnchor -> Ordering # (<) :: HTextAnchor -> HTextAnchor -> Bool # (<=) :: HTextAnchor -> HTextAnchor -> Bool # (>) :: HTextAnchor -> HTextAnchor -> Bool # (>=) :: HTextAnchor -> HTextAnchor -> Bool # max :: HTextAnchor -> HTextAnchor -> HTextAnchor # min :: HTextAnchor -> HTextAnchor -> HTextAnchor #

data VTextAnchor #

Possible vertical anchor points for text.

Constructors

VTA_Top |
VTA_Centre |
VTA_Bottom |
VTA_BaseLine |

#### Instances

Instances details

Show VTextAnchor # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods showsPrec :: Int -> VTextAnchor -> ShowS # show :: VTextAnchor -> String # showList :: [VTextAnchor] -> ShowS #
Eq VTextAnchor # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods (==) :: VTextAnchor -> VTextAnchor -> Bool # (/=) :: VTextAnchor -> VTextAnchor -> Bool #
Ord VTextAnchor # |
Instance details Defined in Graphics.Rendering.Chart.Backend.Types Methods compare :: VTextAnchor -> VTextAnchor -> Ordering # (<) :: VTextAnchor -> VTextAnchor -> Bool # (<=) :: VTextAnchor -> VTextAnchor -> Bool # (>) :: VTextAnchor -> VTextAnchor -> Bool # (>=) :: VTextAnchor -> VTextAnchor -> Bool # max :: VTextAnchor -> VTextAnchor -> VTextAnchor # min :: VTextAnchor -> VTextAnchor -> VTextAnchor #

font_name :: Lens' FontStyle String #

font_size :: Lens' FontStyle Double #

font_slant :: Lens' FontStyle FontSlant #

font_weight :: Lens' FontStyle FontWeight #

font_color :: Lens' FontStyle (AlphaColour Double) #

type AlignmentFn = Point -> Point #

A function to align points for a certain rendering device.

data AlignmentFns #

Holds the point and coordinate alignment function.

vectorAlignmentFns :: AlignmentFns #

Alignment to render on vector based graphics.

bitmapAlignmentFns :: AlignmentFns #

Alignment to render on raster based graphics.