0.7 (9 August 2013)

New module Diagrams.TwoD.Curvature, for computing the
curvature of 2D segments at any given point.

New module Diagrams.Offset, containing an offsetSegment
function that builds a trail a fixed distance from the original
segment. This is a precursor to planned functions offsetTrail
and offsetPath.

New function Diagrams.TwoD.Transform.onBasis, for extracting a
matrix representation of a 2D transformation

New functions extrudeEnvelope and intrudeEnvelope, for
extending or shrinking an envelope only in a certain direction.

Generalize the Color class to absolute colors.
This addresses concerns raised in issue #66 by letting the backend
choose which color space to render Color instances to. Functions are
provided for backwards compatibility with the old semantics.

New function scaleInvPrim for creating a diagram from a single
scale-invariant primitive.

New module Diagrams.Parametric, containing a collection of
classes abstracting over "parametric" things: Parametric,
DomainBounds, EndValues, Sectionable, and HasArcLength,
with instances for segments, trails, and related things.

A big refactoring of segments and trails:

Segments can now be either "closed" or "open".

There are now two types of trails: "lines" (which travel
from point A to point B) or "loops" (closed curves which end
where they started). Trail is now a wrapper type which can
contain both loops and lines.

There is a new Located wrapper type for adding locations to
translation-invariant things. Paths now consist of a
collection of Located Trails.

The PathLike class is now renamed to TrailLike; the
trailLike function takes a Located Trail as input.

New convenience functions boundaryFrom and boundaryFromMay,
for computing boundaries of subdiagrams.

Re-export from diagrams-lib a lot of things defined in
diagrams-core, to make them easier for users to find. Several
new modules have been created as a result: Diagrams.Query,
Diagrams.Envelope, Diagrams.Trace, and Diagrams.Names.

Export the centroid function from Diagrams.Prelude.

triangle is now a synonym for eqTriangle.

New instances

IsPrim instances for Path, Ellipsoid, Image, Text, and
ScaleInv

Eq, Ord, and Show instances for SizeSpec2D

API changes

CircleFrac has been renamed Turn (though CircleFrac is
retained as a deprecated synonym).

Diagrams.Coordinates is no longer exported from
Diagrams.Prelude. This is for compatibility with lens, as (&)
is a rather important lens operator and clashes with
Diagrams.Coordinates. Users who want the Coordinates stuff can import
Diagrams.Coordinates explicitly.

Dependency/version changes

allow base-4.7

upgrade to monoid-extras-0.3

depend on data-default-class instead of data-default

Tested with GHC 7.7.

Bug fixes

Added a special case that was a not handled properly by the
quadratic solver, resulting in bogus envelopes in certain cases
(#88).

Import only Data.NumInstances.Tuple instead of
Data.NumInstances. Previously, Diagrams.Prelude exported
Eq, Show, and Num instances for functions and tuples; now
it only exports tuple instances. Users wishing to use
Diagrams.CubicSpline with a vector space built over functions (!?)
can import Data.NumInstances.Function themselves. (#48)

Do scaling on a Pathbefore constructing a TrailLike in
rect (#43)

0.6.0.3 (4 May 2013)

bump upper bound to allow NumInstances-1.3

0.6.0.2 (28 March 2013)

bump upper bound to allow NumInstances-1.2

Quadratic solver is now more numerically stable, getting rid of some
incorrect behavior of juxtapose
(#46)

0.6.0.1: 7 January 2013

allow semigroups-0.9

0.6: 11 December 2012

New functions setDefault2DAttributes and adjustDiaSize2D.
adjustDia2D does both --- so the behavior of adjustDia2D has
not changed, but it is now possible to apply just one of the two
adjustments using the new functions.

Diagrams.TwoD.Transform now exports a ScaleInv type for creating
scale-invariant objects, which are only affected by rotational
and translational components of transformations.

The new Diagrams.Coordinates module provides nicer syntax for
constructing and pattern-matching point and vector literals.

New fromFixedSeg function in Diagrams.Segment, which
decomposes a FixedSegment into a starting point and a Segment.

New withTrace function for setting the Trace of a diagram.

Three new size-related functions:

New sized function for scaling an object to a particular size.
One particularly nice use of this is to obviate the need to keep
fiddling with the line width to get diagrams to "look right";
just set the line width relative to some arbitrary scale
(e.g. assuming the final diagram will fit into a 1x1 box) and
then apply sized to the final diagram to make it that given
arbitrary size. It can also be used for easily making something
(a diagram, path, trail, ...) the same size as something else,
with the help of the new sizeSpec2D function.

New sizedAs function, for setting the size of some object to
be "the same as" some other object.

New sizeSpec2D function for conveniently calculating the size
of an object as a SizeSpec2D value (for use with the new sized
funtion).

New extrudeEnvelope and intrudeEnvelope functions for
modifying envelopes in a single direction only, as well as new
functions extrude{Left,Right,Bottom,Top} specializing
extrudeEnvelope to 2D.

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:
1. to allow for future changes to the implementation of R2;
2. (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.