wumpus-basic-0.8.0: Common drawing utilities built on wumpus-core.

Stabilityhighly unstable



Base types for Drawing Objects, Graphics / Images (a Graphic that also returns an answer), etc.

** WARNING ** - some names are expected to change particularly the naming of the append and concat functions.



data HPrim u Source

Graphics objects, even simple ones (line, arrow, dot) might need more than one primitive (path or text label) for their construction. Hence, the primary representation that all the others are built upon must support concatenation of primitives.

Wumpus-Core has a type Picture - made from one or more Primitives - but Pictures include support for affine frames. For drawing many simple graphics (dots, connector lines...) that do not need individual affine transformations this is a penalty. A list of Primitives is therefore more suitable representation, and a Hughes list which supports efficient concatenation is wise.


type Point2F u = Point2 u -> Point2 uSource

Point transformation function.

data DrawingF a Source

Drawings in Wumpus-Basic have an implicit graphics state the DrawingContext, the most primitive building block is a function from the DrawingContext to some polymorphic answer.

This functional type is represented concretely as DrawingF.

 DrawingF :: DrawingContext -> a 

runDF :: DrawingContext -> DrawingF a -> aSource

Run a Drawing Function with the supplied Drawing Context.

pureDF :: a -> DrawingF aSource

Wrap a value into a DrawingF.

Note the value is pure it does depend on the DrawingContext (it is context free).

type LocGraphic u = Point2 u -> Graphic uSource

Commonly graphics take a start point as well as a drawing context.

Here they are called a LocGraphic - graphic with a (starting) location.

lgappend :: LocGraphic u -> LocGraphic u -> LocGraphic uSource

Composition operator for LocGraphic - both LocGraphics are drawn at the same origin and the results concatenated.

type Image u a = DrawingF (a, HPrim u)Source

Images return a value as well as drawing. A node is a typical example - nodes are drawing but the also support taking anchor points.

type LocImage u a = Point2 u -> Image u aSource

type ConnDrawingF u a = Point2 u -> Point2 u -> DrawingF aSource

type ConnGraphic u = Point2 u -> Point2 u -> Graphic uSource

ConnGraphic is a connector drawn between two points contructing a Graphic.

type ConnImage u a = Point2 u -> Point2 u -> Image u aSource

ConImage is a connector drawn between two points constructing an Image.