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

Maintainerdiagrams-discuss@googlegroups.com
Safe HaskellNone

Diagrams.Align

Contents

Description

The alignment of an object refers to the position of its local origin with respect to its envelope. This module defines the Alignable class for things which can be aligned, as well as a default implementation in terms of HasOrigin and Enveloped, along with several utility methods for alignment.

Synopsis

Alignable class

class Alignable a whereSource

Class of things which can be aligned.

Methods

alignBy' :: (HasOrigin a, AdditiveGroup (V a), Num (Scalar (V a)), Fractional (Scalar (V a))) => (V a -> a -> Point (V a)) -> V a -> Scalar (V a) -> a -> aSource

alignBy v d a moves the origin of a along the vector v. If d = 1, the origin is moved to the edge of the boundary in the direction of v; if d = -1, it moves to the edge of the boundary in the direction of the negation of v. Other values of d interpolate linearly (so for example, d = 0 centers the origin along the direction of v).

defaultBoundary :: V a -> a -> Point (V a)Source

alignBy :: (HasOrigin a, Num (Scalar (V a)), Fractional (Scalar (V a))) => V a -> Scalar (V a) -> a -> aSource

Instances

(InnerSpace (V b), Ord (Scalar (V b)), Alignable b) => Alignable [b] 
(InnerSpace (V b), Ord (Scalar (V b)), Alignable b) => Alignable (Set b) 
(InnerSpace v, OrderedField (Scalar v)) => Alignable (Envelope v) 
(InnerSpace v, OrderedField (Scalar v)) => Alignable (Trace v) 
(InnerSpace v, OrderedField (Scalar v)) => Alignable (Path v) 
(HasOrigin a, Alignable a) => Alignable (b -> a)

Although the alignBy method for the (b -> a) instance is sensible, there is no good implementation for defaultBoundary. Instead, we provide a total method, but one that is not sensible. This should not present a serious problem as long as your use of Alignable happens through alignBy.

(InnerSpace (V b), Ord (Scalar (V b)), Alignable b) => Alignable (Map k b) 
(HasLinearMap v, InnerSpace v, OrderedField (Scalar v), Monoid' m) => Alignable (QDiagram b v m) 

alignBy'Default :: (HasOrigin a, AdditiveGroup (V a), Num (Scalar (V a)), Fractional (Scalar (V a))) => (V a -> a -> Point (V a)) -> V a -> Scalar (V a) -> a -> aSource

Default implementation of alignBy for types with HasOrigin and AdditiveGroup instances.

envelopeBoundary :: Enveloped a => V a -> a -> Point (V a)Source

Some standard functions which can be used as the boundary argument to alignBy'.

traceBoundary :: Traced a => V a -> a -> Point (V a)Source

General alignment functions

align :: (Alignable a, HasOrigin a, Num (Scalar (V a)), Fractional (Scalar (V a))) => V a -> a -> aSource

align v aligns an enveloped object along the edge in the direction of v. That is, it moves the local origin in the direction of v until it is on the edge of the envelope. (Note that if the local origin is outside the envelope to begin with, it may have to move "backwards".)

snug :: (Fractional (Scalar (V a)), Alignable a, Traced a, HasOrigin a) => V a -> a -> aSource

Like align but uses trace.

centerV :: (Alignable a, HasOrigin a, Num (Scalar (V a)), Fractional (Scalar (V a))) => V a -> a -> aSource

centerV v centers an enveloped object along the direction of v.

center :: (HasLinearMap (V a), Alignable a, HasOrigin a, Num (Scalar (V a)), Fractional (Scalar (V a))) => a -> aSource

center centers an enveloped object along all of its basis vectors.

snugBy :: (Alignable a, Traced a, HasOrigin a, Num (Scalar (V a)), Fractional (Scalar (V a))) => V a -> Scalar (V a) -> a -> aSource

Version of alignBy specialized to use traceBoundary

snugCenterV :: (Fractional (Scalar (V a)), Alignable a, Traced a, HasOrigin a) => V a -> a -> aSource

Like centerV using trace.

snugCenter :: (HasLinearMap (V a), Alignable a, HasOrigin a, Num (Scalar (V a)), Fractional (Scalar (V a)), Traced a) => a -> aSource

Like center using trace.