diagrams-lib- Embedded domain-specific language for declarative graphics

Safe HaskellSafe-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)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.