View Source Vivid.Frame (vivid v0.4.4)

Frame represents a collection of colours and shapes.

Frame implements both the Enumerable and Collectable protocols.

Examples

  iex> use Vivid
  ...> Enum.map(1..5, fn i ->
  ...>   line = Line.init(Point.init(1,1), Point.init(20, i * 4))
  ...>   {line, RGBA.black}
  ...> end)
  ...> |> Enum.into(Frame.init(24, 21, RGBA.white))
  ...> |> to_string
  "@@@@@@@@@@@@@@@@@@@@ @@@\n" <>
  "@@@@@@@@@@@@@@@@@@@ @@@@\n" <>
  "@@@@@@@@@@@@@@@@@@ @@@@@\n" <>
  "@@@@@@@@@@@@@@@@@ @@@@@@\n" <>
  "@@@@@@@@@@@@@@@@ @@@ @@@\n" <>
  "@@@@@@@@@@@@@@@ @@@ @@@@\n" <>
  "@@@@@@@@@@@@@@ @@  @@@@@\n" <>
  "@@@@@@@@@@@@@ @@ @@@@@@@\n" <>
  "@@@@@@@@@@@@ @@ @@@@ @@@\n" <>
  "@@@@@@@@@@@ @@ @@@  @@@@\n" <>
  "@@@@@@@@@@ @  @@  @@@@@@\n" <>
  "@@@@@@@@@ @ @@  @@@@@@@@\n" <>
  "@@@@@@@@ @ @@ @@@@@  @@@\n" <>
  "@@@@@@@   @  @@@   @@@@@\n" <>
  "@@@@@@  @  @@@  @@@@@@@@\n" <>
  "@@@@@  @ @@   @@@@@@@@@@\n" <>
  "@@@@       @@@@@@    @@@\n" <>
  "@@@     @@@      @@@@@@@\n" <>
  "@@         @@@@@@@@@@@@@\n" <>
  "@    @@@@@@@@@@@@@@@@@@@\n" <>
  "@@@@@@@@@@@@@@@@@@@@@@@@\n"

Summary

Functions

Return the background colour of the frame.

Change the background colour of the frame.

Render a frame into a buffer for display horizontally.

Render a frame into a buffer for display.

Clear the frame of any shapes.

Return the height of the frame.

Add a shape to the frame buffer.

Return the width of the frame.

Types

@type t() :: %Vivid.Frame{
  background_colour: Vivid.RGBA.t(),
  height: pos_integer(),
  shapes: [{Vivid.Shape.t(), Vivid.RGBA.t()}],
  width: pos_integer()
}

Functions

Link to this function

background_colour(frame)

View Source
@spec background_colour(t()) :: Vivid.RGBA.t()

Return the background colour of the frame.

Example

iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.background_colour
Vivid.RGBA.init(0, 0, 0, 0)
Link to this function

background_colour(frame, colour)

View Source
@spec background_colour(t(), Vivid.RGBA.t()) :: t()

Change the background colour of the frame.

Example

iex> Vivid.Frame.init(80,25)
...> |> Vivid.Frame.background_colour(Vivid.RGBA.white)
...> |> Vivid.Frame.background_colour
Vivid.RGBA.init(1, 1, 1, 1)
@spec buffer(t()) :: Vivid.Buffer.t()

Render a frame into a buffer for display horizontally.

Returns a one-dimensional List of RGBA colours with alpha-compositing completed.

@spec buffer(t(), :horizontal | :vertical) :: Vivid.Buffer.t()

Render a frame into a buffer for display.

You can specify either :horizontal or :vertical mode, where in :horizontal mode the buffer is rendered row-by-row then column-by-column and in :vertical mode the buffer is rendered column-by-column then row-by-row.

Returns a one-dimensional List of RGBA colours with alpha-compositing completed.

@spec clear(t()) :: t()

Clear the frame of any shapes.

@spec height(t()) :: integer()

Return the height of the frame.

Example

iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.height
25
Link to this function

init(width \\ 128, height \\ 64, colour \\ RGBA.init(0, 0, 0, 0))

View Source
@spec init(pos_integer(), pos_integer(), Vivid.RGBA.t()) :: t()

Initialize a frame buffer.

  • width the width of the frame, in pixels.
  • height the height of the frame, in pixels.
  • colour the default colour of the frame.

Example

iex> Vivid.Frame.init(4, 4)
Vivid.Frame.init(4, 4, Vivid.RGBA.init(0, 0, 0, 0))
Link to this function

push(frame, shape, colour)

View Source
@spec push(t(), Vivid.Shape.t(), Vivid.RGBA.t()) :: t()

Add a shape to the frame buffer.

  • frame is the frame to modify.
  • shape is the shape to add.
  • colour is the colour of the shape being added.

Examples

iex> Vivid.Frame.init(5,5)
...> |> Vivid.Frame.push(Vivid.Line.init(Vivid.Point.init(1,1), Vivid.Point.init(3,3)), Vivid.RGBA.white)
...> |> to_string
"     \n" <>
"   @ \n" <>
"  @  \n" <>
" @   \n" <>
"     \n"

iex> Vivid.Frame.init(5,5)
...> |> Vivid.Frame.push(
...>      Vivid.Path.init([
...>        Vivid.Point.init(1,1),
...>        Vivid.Point.init(1,3),
...>        Vivid.Point.init(3,3),
...>        Vivid.Point.init(3,1),
...>      ]), Vivid.RGBA.white
...>    )
...> |> to_string
"     \n" <>
" @@@ \n" <>
" @ @ \n" <>
" @ @ \n" <>
"     \n"

iex> Vivid.Frame.init(5,5)
...> |> Vivid.Frame.push(
...>      Vivid.Polygon.init([
...>        Vivid.Point.init(1,1),
...>        Vivid.Point.init(1,3),
...>        Vivid.Point.init(3,3),
...>        Vivid.Point.init(3,1),
...>      ]), Vivid.RGBA.white
...>    )
...> |> to_string
"     \n" <>
" @@@ \n" <>
" @ @ \n" <>
" @@@ \n" <>
"     \n"

iex> circle = Vivid.Circle.init(Vivid.Point.init(5,5), 4)
...> Vivid.Frame.init(11, 10)
...> |> Vivid.Frame.push(circle, Vivid.RGBA.white)
...> |> to_string
"    @@@    \n" <>
"  @@   @@  \n" <>
"  @     @  \n" <>
" @       @ \n" <>
" @       @ \n" <>
" @       @ \n" <>
"  @     @  \n" <>
"  @@   @@  \n" <>
"    @@@    \n" <>
"           \n"

iex> line = Vivid.Line.init(Vivid.Point.init(0,0), Vivid.Point.init(50,50))
...> Vivid.Frame.init(5,5)
...> |> Vivid.Frame.push(line, Vivid.RGBA.white)
...> |> to_string
"    @\n" <>
"   @ \n" <>
"  @  \n" <>
" @   \n" <>
"@    \n"
@spec width(t()) :: integer()

Return the width of the frame.

Example

iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.width
80