wumpus-basic-0.16.0: Basic objects and system code built on Wumpus-Core.

PortabilityGHC
Stabilityunstable
Maintainerstephen.tetley@gmail.com

Wumpus.Basic.Kernel.Objects.CtxPicture

Contents

Description

A Picture-with-implicit-context object.

This is the corresponding type to Picture in the Wumpus-Core.

Note - many of the composition functions are in destructor form. As Wumpus cannot make a Picture from an empty list of Pictures, destructor form decomposes the list into the head and rest as arguments in the function signature, rather than take a possibly empty list and have to throw an error.

TODO - PosImage no longer supports composition operators, so better names are up for grabs...

Synopsis

Documentation

data CtxPicture u Source

A Contextual Picture.

This type corresponds to the Picture type in Wumpus-Core, but it is embedded with a DrawingContext (for font properties, fill colour etc.). So it is a function from DrawingContext to Picture.

Internally the result is actually a (Maybe Picture) and not a Picture, this is a trick to promote the extraction from possibly empty drawings (created by TraceDrawing) to the top-level of the type hierarchy where client code can deal with empty drawings explicitly (empty Pictures cannot be rendered by Wumpus-Core).

 a `oplus` b

The OPlus (semigroup) instance for CtxPicture draws picture a in front of picture b in the z-order, neither picture is moved. (Usually the picture composition operators in this module move the second picture aligning it somehow with the first).

Instances

(Real u, Floating u) => Rotate (CtxPicture u) 
(Real u, Floating u) => RotateAbout (CtxPicture u) 
(Num u, Ord u) => Scale (CtxPicture u) 
(Num u, Ord u) => Translate (CtxPicture u) 
(Num u, Ord u) => OPlus (CtxPicture u)
 a `oplus` b

Place 'drawing' a over b. The idea of over here is in terms z-ordering, nither picture a or b are actually moved.

type DCtxPicture = CtxPicture DoubleSource

Version of CtxPicture specialized to Double for the unit type.

runCtxPicture :: DrawingContext -> CtxPicture u -> Maybe (Picture u)Source

runCtxPicture : drawing_ctx * ctx_picture -> Maybe Picture

Run a CtxPicture with the supplied DrawingContext producing a Picture.

The resulting Picture may be empty. Wumpus-Core cannot generate empty pictures as they have no bounding box, so the result is wrapped within a Maybe. This delegates reponsibility for handling empty pictures to client code.

runCtxPictureU :: DrawingContext -> CtxPicture u -> Picture uSource

runCtxPictureU : drawing_ctx * ctx_picture -> Picture

Unsafe version of runCtxPicture.

This function throws a runtime error when supplied with an empty CtxPicture.

drawTracing :: (Real u, Floating u, FromPtSize u) => TraceDrawing u a -> CtxPicture uSource

drawTracing : trace_drawing -> CtxPicture

Transform a TraceDrawing into a CtxPicture.

clipCtxPicture :: (Num u, Ord u) => PrimPath u -> CtxPicture u -> CtxPicture uSource

clipCtxPicture : path * ctx_picture -> CtxPicture

Clip a picture with a path.

mapCtxPicture :: (Picture u -> Picture u) -> CtxPicture u -> CtxPicture uSource

mapCtxPicture : trafo * ctx_picture -> CtxPicture

Apply a picture transformation function to the Picture warpped in a CtxPicture.

Composition

cxpBeneath :: (Num u, Ord u) => CtxPicture u -> CtxPicture u -> CtxPicture uSource

cxpBeneath : ctx_picture1 * ctx_picture2 -> CtxPicture

 a `cxpBeneath` b

Similarly beneath draws the first picture behind the second picture in the z-order, neither picture is moved.

cxpUniteCenter :: (Fractional u, Ord u) => CtxPicture u -> CtxPicture u -> CtxPicture uSource

Draw a, move b so its center is at the same center as a, b is drawn over underneath in the zorder.

 a `cxpUniteCenter` b 

cxpRight :: (Num u, Ord u) => CtxPicture u -> CtxPicture u -> CtxPicture uSource

 a `cxpRight` b

Horizontal composition - position picture b to the right of picture a.

cxpDown :: (Num u, Ord u) => CtxPicture u -> CtxPicture u -> CtxPicture uSource

 a `cxpDown` b

Vertical composition - position picture b down from picture a.

cxpCenteredAt :: (Fractional u, Ord u) => CtxPicture u -> Point2 u -> CtxPicture uSource

Center the picture at the supplied point.

cxpRow :: (Real u, Floating u, FromPtSize u) => CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

cxpRow : ctx_picture1 * [ctx_picture] -> CtxPicture

Make a row of pictures concatenating them horizontally.

Note - this function is in destructor form. As Wumpus cannot make a Picture from an empty list of Pictures, destructor form decomposes the list into the head and the rest in the function signature, rather than take a possibly empty list and have to throw an error.

cxpColumn :: (Real u, Floating u, FromPtSize u) => CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

cxpColumn : ctx_picture1 * [ctx_picture] -> CtxPicture

Make a column of pictures concatenating them vertically.

Note - this function is in destructor form.

cxpRightSep :: (Num u, Ord u) => u -> CtxPicture u -> CtxPicture u -> CtxPicture uSource

 cxpRightSep n a b

Horizontal composition - move b, placing it to the right of a with a horizontal gap of n separating the pictures.

cxpDownSep :: (Num u, Ord u) => u -> CtxPicture u -> CtxPicture u -> CtxPicture uSource

 cxpDownSep n a b

Vertical composition - move b, placing it below a with a vertical gap of n separating the pictures.

cxpRowSep :: (Real u, Floating u, FromPtSize u) => u -> CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

 picRowSep n x xs

Concatenate the list of pictures xs horizontally with hspace starting at x. The pictures are interspersed with spaces of n units.

cxpColumnSep :: (Real u, Floating u, FromPtSize u) => u -> CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

 vsepPic n xs

Concatenate the list of pictures xs vertically with vspace starting at x. The pictures are interspersed with spaces of n units.

Compose with alignment

cxpAlignH :: (Fractional u, Ord u) => HAlign -> CtxPicture u -> CtxPicture u -> CtxPicture uSource

 cxpAlignH align a b

Horizontal composition - move b, placing it to the right of a and align it with the top, center or bottom of a.

cxpAlignV :: (Fractional u, Ord u) => VAlign -> CtxPicture u -> CtxPicture u -> CtxPicture uSource

 cxpAlignV align a b

Vertical composition - move b, placing it below a and align it with the left, center or right of a.

cxpAlignSepH :: (Fractional u, Ord u) => HAlign -> u -> CtxPicture u -> CtxPicture u -> CtxPicture uSource

 cxpAlignSepH align sep a b

Spacing version of cxpAlignH - move b to the right of a separated by sep units, align b according to align.

cxpAlignSepV :: (Fractional u, Ord u) => VAlign -> u -> CtxPicture u -> CtxPicture u -> CtxPicture uSource

 cxpAlignSepV align sep a b

Spacing version of alignV - move b below a separated by sep units, align b according to align.

cxpAlignRow :: (Real u, Floating u, FromPtSize u) => HAlign -> CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

Variant of cxpRow that aligns the pictures as well as concatenating them.

cxpAlignColumn :: (Real u, Floating u, FromPtSize u) => VAlign -> CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

Variant of cxpColumn that aligns the pictures as well as concatenating them.

cxpAlignRowSep :: (Real u, Floating u, FromPtSize u) => HAlign -> u -> CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

Variant of cxpRow that aligns the pictures as well as concatenating and spacing them.

cxpAlignColumnSep :: (Real u, Floating u, FromPtSize u) => VAlign -> u -> CtxPicture u -> [CtxPicture u] -> CtxPicture uSource

Variant of cxpColumn that aligns the pictures as well as concatenating and spacing them.