Maintainer | diagrams-discuss@googlegroups.com |
---|---|

Safe Haskell | Safe-Infered |

A default diagram-adjustment implementation for two-dimensional diagrams, useful for backend implementors.

- adjustDia2D :: Monoid' m => (Options b R2 -> SizeSpec2D) -> (SizeSpec2D -> Options b R2 -> Options b R2) -> b -> Options b R2 -> QDiagram b R2 m -> (Options b R2, QDiagram b R2 m)
- adjustSize :: SizeSpec2D -> (Double, Double) -> Transformation R2
- requiredScale :: SizeSpec2D -> (Double, Double) -> Double

# Documentation

adjustDia2D :: Monoid' m => (Options b R2 -> SizeSpec2D) -> (SizeSpec2D -> Options b R2 -> Options b R2) -> b -> Options b R2 -> QDiagram b R2 m -> (Options b R2, QDiagram b R2 m)Source

`adjustDia2D`

provides a useful default implementation of
the `adjustDia`

method from the `Backend`

type class.

As its first two arguments it requires a method for extracting the requested output size from the rendering options, and a way of updating the rendering options with a new (more specific) size.

It then performs the following adjustments:

- Set some default attributes (in case they have not been set):
- Line width 0.01
- Line color black
- Font size 1
- Freeze the diagram in its final form
- Scale and translate the diagram to fit within the requested size
- Also return the actual adjusted size of the diagram.

adjustSize :: SizeSpec2D -> (Double, Double) -> Transformation R2Source

`adjustSize spec sz`

returns a transformation (a uniform scale)
which can be applied to something of size `sz`

to make it the
requested size `spec`

.

requiredScale :: SizeSpec2D -> (Double, Double) -> DoubleSource

`requiredScale spec sz`

returns a scaling factor necessary to
make something of size `sz`

fit the requested size `spec`

,
without changing the aspect ratio. Hence an explicit
specification of both dimensions may not be honored if the aspect
ratios do not match; in that case the scaling will be as large as
possible so that the object still fits within the requested size.