## Changelog for diagrams-lib-0.5.0.1

If this renders badly as markdown, see the plain text version0.5: 9 March 2012

New features:

'mkSizeSpec' function for constructing a SizeSpec2D from two (Maybe Double)s

'beneath' as convenient synonym for 'flip atop'

Improvements and extensions to rounded rectangles by Peter Hall:

- roundedRect' allows rounded rectangles with a different radius specified for each corner
- both roundedRect' and roundedRect now allow negative radii, resulting in "inverted" circular corners

#64: New 'Alignable' class for things that can be aligned.

explodeTrail and explodePath have been generalized to return any PathLike type.

New path functions pathCentroid (compute the centroid of a path's vertices) and expandPath (scale a path about its centroid).

Generalized 'centroid' function now exported from new module Diagrams.Points

Initial (experimental) support for animation:

- Animation and QAnimation defined as synonyms for Active diagrams (see 'active' package)
- Instances for Active: V, HasOrigin, Transformable, HasStyle, PathLike, Juxtaposable, Alignable
- animEnvelope and animRect functions for automatic bounding of animations

addClosingSegment function for making the implicit closing segment of a closed trail explicit

Improvements to BoundingBox module from Michael Sloan: querying of BoundingBox bounds, corners, extents, and transformation of objects to fit within a given box.

Text alignment options from Michael Sloan

'view' function for restricting a diagram's envelope to a rectangular region.

'iterateN' function for iterating a finite number of times

'atAngle' for placing two diagrams next to each other along a specified angle.

padX and padY functions for padding in the X- and Y-directions independently.

generalized showOrigin function from Ian Ross

#40: add shears to Diagrams.TwoD.Transform

Performance improvements

Use a balanced folding scheme for cat', reducing time in some cases from O(n^2) to O(n log n)

More efficient implementation of beside

New instances:

- Alignable instances for QDiagram, Path, Envelope, Active, Set, Map, []
- Renderable instances for NullBackend (Trail, Path, Segment, Image, Text)
- Instances for Active: V, HasOrigin, Transformable, HasStyle, PathLike, Juxtaposable, Alignable

API changes

#61: terminology change from "bounds" to "envelope"

- boundary -> envelopeP
- "bounding region" -> "envelope"
- Bounds -> Envelope
- Boundable -> Enveloped
- getBounds -> getEnvelope
- etc.

rename AnnDiagram to QDiagram

R2 used to be a synonym for (Double, Double) but is now abstract. To convert between pairs of Doubles and R2, use the new functions 'r2' and 'unr2'. There are two reasons for this change:

- to allow for future changes to the implementation of R2;

- (Double, Double) was an awkward special case getting in the way of useful tuple instances for classes like HasOrigin, Enveloped, and so on.

'circlePath' has been removed; its functionality has been subsumed by 'circle'.

adjustSegment now takes an extra tolerance option.

Ellipses are now represented using Bezier approximations rather than a separate special type.

BoundingBox no longer has a Transformable instance; the old instance was misleading at best.

Change semantics of 'beside' (hence also (|||) and (===)) so the result's origin is the same as that of the first argument.

adjustDia2D now takes a SizeSpec2D.

'beside' and related functions are now implemented in terms of 'juxtapose'.

Instead of taking an R2, roundedRect now takes a pair of Doubles, to be more consistent with 'rect'.

Dependency/version changes

Support for GHC 7.4.1:

- depend on colour >= 2.3.2
- update base and array upper bounds

bump vector-space upper bound

Bug fixes

Avoid scale by zero error in showOrigin.

Base adjustDia2D translation on output size rather than diagram size.

0.4.0.1: 30 October 2011

- bump data-default dependency to allow version 0.3

0.4: 23 October 2011

documentation fixes

New functions and primitives:

- 'wedge' shape primitive
- 'fromDirection' function for converting angles to 2D unit vectors; inverse function 'direction' generalized to return any Angle type
- New functions for computing and adjusting segment lengths
- 'scaleUToX' and 'scaleUToY' for doing uniform scales resulting in a desired width or height.
- 'circlePath', 'reversePath', 'decoratePath'

New features:

- Completely new and improved polygon generation API
- Cubic splines
- User-controllable path fill rules

Bug fixes:

- fix incorrect corner case in arc generation
- fix incorrect reverseTrail function

0.3: 18 June 2011

New features:

- new customizable stroke' function which lets you assign names to path vertices
- circle and square functions now take a size argument
- function for adjusting 2D diagrams to requested size abstracted from cairo backend
- generalize PathLike class to include an instance for diagrams, and collapse things like polygon/polygonPath into a single polymorphic function
- basic text support
- basic support for external images
- very sketchy initial proof-of-concept library of 3D primitives. See also http://patch-tag.com/r/byorgey/diagrams-povray.

Bug fixes:

- Issue 32 (mempty not behaving correctly within concatenations)

0.2: 3 June 2011

documentation fixes

New functions and primitives:

- scaleToX and scaleToY for scaling to an absolute width/height
- reverseTrail
- new Angle class and ability to use radians, degrees, or circle fractions for specifying angles
- rotateAbout and reflectAbout transformations based on new conjugation functions
- rect and roundedRect primitives
- explodeTrail/Path for breaking trails and paths into individual segments

New features:

- opacity attribute
- support for path clipping

New modules:

- Diagrams.BoundingBox

Fixes and updates:

- withBounds now properly uses the new bounds instead of just combining them with the old

0.1.1: 18 May 2011

- minor documentation fixes
- link to new website

0.1: 17 May 2011

- initial preview release