# vivid v0.4.5 - Table of Contents

> Simple 2D rendering graphics rendering library.

## Pages

- [Getting Started with Vivid](getting-started.md)
- [Vivid](readme.md)
- [Change Log](changelog.md)

## Modules

- [Vivid](Vivid.md): Vivid is a 2D rendering engine implemented purely in Elixir.
- [Vivid.Arc](Vivid.Arc.md): This module represents an Arc, otherwise known as a circle segment.
- [Vivid.Bounds](Vivid.Bounds.md): Provides information about the bounds of a box and pixel positions within it.
- [Vivid.Bounds.Of](Vivid.Bounds.Of.md): This protocol is used to calculate the bounds of a given shape.
- [Vivid.Box](Vivid.Box.md): Short-hand for creating rectangle polygons.
- [Vivid.Buffer](Vivid.Buffer.md): Used to convert a Frame into a buffer for display.
- [Vivid.Circle](Vivid.Circle.md): Represents a circle based on it's center point and radius.
- [Vivid.Font](Vivid.Font.md): This module takes characters generated by the Hershey module and converts them
into groups of shapes using the character's specified left and right padding.
- [Vivid.Font.Char](Vivid.Font.Char.md): Describes an individual character defined by a Hershey font file.

- [Vivid.Frame](Vivid.Frame.md): Frame represents a collection of colours and shapes.
- [Vivid.Group](Vivid.Group.md): Represents a collection of shapes which can be Rasterized in a single pass.
- [Vivid.Hershey](Vivid.Hershey.md): Supports reading the Hershey Vector Font format and converting them into paths.

- [Vivid.Line](Vivid.Line.md): Represents a line segment between two Points in 2D space.
- [Vivid.Math](Vivid.Math.md): I made this because I was constantly importing a small selection of
Erlang's `:math` module, and then manually implementing
`degrees_to_radians/1` which got pretty annoying after a while.

- [Vivid.Path](Vivid.Path.md): Describes a path as a series of vertices.
- [Vivid.Point](Vivid.Point.md): Represents an individual point in (2D) space.
- [Vivid.Polygon](Vivid.Polygon.md): Describes a Polygon as a series of vertices.
- [Vivid.RGBA](Vivid.RGBA.md): Defines a colour in RGBA colour space.
- [Vivid.Rasterize](Vivid.Rasterize.md): The Rasterize protocol is responsible for converting shapes into bitmaps.
- [Vivid.SLPFA](Vivid.SLPFA.md): Scanline Polygon Filling Algorithm, as per
https://hackernoon.com/computer-graphics-scan-line-polygon-fill-algorithm-3cb47283df6#.20fac9f40
- [Vivid.Shape](Vivid.Shape.md): Doesn't do anything - is merely a type to represent an arbitrary shape in typespecs.

- [Vivid.ShapeToString](Vivid.ShapeToString.md): Handle conversions of arbitrary shapes into strings.

- [Vivid.Transform](Vivid.Transform.md): Creates and applies a "pipeline" of transformations to a shape.
Transformation operations are collected up and only run once, when `apply` is called.
- [Vivid.Transform.Operation](Vivid.Transform.Operation.md): An operation that can be applied to a shape.

- [Vivid.Transform.Point](Vivid.Transform.Point.md): Standard transformations which can be applied to points without
knowing the details of the geometry.
- [Vivid.Transformable](Vivid.Transformable.md): This protocol is used to apply *point* transformations to a shape.

