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

Copyright(c) 2011 diagrams-lib team (see LICENSE)
LicenseBSD-style (see LICENSE)
Maintainerdiagrams-discuss@googlegroups.com
Safe HaskellNone
LanguageHaskell2010

Diagrams.TwoD.Size

Contents

Description

Utilities for working with sizes of two-dimensional objects.

Synopsis

Size and extent of diagrams in R2

Computing sizes

width :: (Enveloped a, V a ~ R2) => a -> Double Source

Compute the width of an enveloped object.

height :: (Enveloped a, V a ~ R2) => a -> Double Source

Compute the height of an enveloped object.

size2D :: (Enveloped a, V a ~ R2) => a -> (Double, Double) Source

Compute the width and height of an enveloped object.

sizeSpec2D :: (Enveloped a, V a ~ R2) => a -> SizeSpec2D Source

Compute the size of an enveloped object as a SizeSpec2D value.

extentX :: (Enveloped a, V a ~ R2) => a -> Maybe (Double, Double) Source

Compute the absolute x-coordinate range of an enveloped object in R2, in the form (lo,hi). Return Nothing for objects with an empty envelope.

extentY :: (Enveloped a, V a ~ R2) => a -> Maybe (Double, Double) Source

Compute the absolute y-coordinate range of an enveloped object in R2, in the form (lo,hi).

center2D :: (Enveloped a, V a ~ R2) => a -> P2 Source

Compute the point at the center (in the x- and y-directions) of a enveloped object. Return the origin for objects with an empty envelope.

Specifying sizes

data SizeSpec2D Source

A specification of a (requested) rectangular size.

Constructors

Width !Double

Specify an explicit width. The height should be determined automatically (so as to preserve aspect ratio).

Height !Double

Specify an explicit height. The width should be determined automatically (so as to preserve aspect ratio).

Dims !Double !Double

An explicit specification of a width and height.

Absolute

Absolute size: use whatever size an object already has; do not rescale.

mkSizeSpec :: Maybe Double -> Maybe Double -> SizeSpec2D Source

Create a size specification from a possibly-specified width and height.

requiredScaleT :: SizeSpec2D -> (Double, Double) -> Transformation R2 Source

requiredScaleT spec sz returns a transformation (a uniform scale) which can be applied to something of size sz to make it fit the requested size spec, without changing the aspect ratio.

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

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.

Changing the size of things

sized :: (Transformable a, Enveloped a, V a ~ R2) => SizeSpec2D -> a -> a Source

Uniformly scale any enveloped object so that it fits within the given size.

sizedAs :: (Transformable a, Enveloped a, V a ~ R2, Enveloped b, V b ~ R2) => b -> a -> a Source

Uniformly scale an enveloped object so that it "has the same size as" (fits within the width and height of) some other object.

sizePair :: SizeSpec2D -> (Double, Double) Source

Make width and height of SizeSpec2D into a tuple.