vty-5.3.1: A simple terminal UI library

Safe HaskellNone



Transforms an image into rows of operations.



data BlitEnv s Source



mrowOps :: forall s s. Lens (BlitEnv s) (BlitEnv s) (MRowOps s) (MRowOps s) Source

type BlitM s a = ReaderT (BlitEnv s) (StateT BlitState (ST s)) a Source

displayOpsForPic :: Picture -> DisplayRegion -> DisplayOps Source

Produces the span ops that will render the given picture, possibly cropped or padded, into the specified region.

displayOpsForImage :: Image -> DisplayOps Source

Returns the DisplayOps for an image rendered to a window the size of the image.

largerly used only for debugging.

combinedOpsForLayers :: Picture -> DisplayRegion -> ST s (MRowOps s) Source

Produces the span ops for each layer then combines them.

TODO: a fold over a builder function. start with span ops that are a bg fill of the entire region.

buildSpans :: Image -> DisplayRegion -> ST s (MRowOps s) Source

Builds a vector of row operations that will output the given picture to the terminal.

Crops to the given display region.

todo I'm pretty sure there is an algorithm that does not require a mutable buffer.

startImageBuild :: Image -> BlitM s () Source

Add the operations required to build a given image to the current set of row operations.

addMaybeClipped :: forall s. Image -> BlitM s () Source

This adds an image that might be partially clipped to the output ops.

This is a very touchy algorithm. Too touchy. For instance, the CropRight and CropBottom implementations are odd. They pass the current tests but something seems terribly wrong about all this.

todo prove this cannot be called in an out of bounds case.

snocOp :: SpanOp -> Int -> BlitM s () Source

snocs the operation to the operations for the given row.