vivid v0.2.1 Vivid.Frame

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

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

t()
t

Functions

background_colour(frame)
background_colour(Vivid.Frame.t) :: Vivid.RGBA.t

Return the background colour of the frame.

Example

iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.background_colour
#Vivid.RGBA<{0, 0, 0, 0}>
background_colour(frame, c)
background_colour(Vivid.Frame.t, Vivid.RGBA.t) :: Vivid.Frame.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<{1, 1, 1, 1}>
buffer(frame)

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.

buffer(frame, atom)
buffer(Vivid.Frame.t, :horizontal | :vertical) :: [Vivid.RGBA.t]
clear(frame)

Clear the frame of any shapes.

height(frame)
height(Vivid.Frame.t) :: integer

Return the height of the frame.

Example

iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.height
25
init(width \\ 128, height \\ 64, colour \\ RGBA.init(0, 0, 0, 0))
init(integer, integer, Range.t) :: Vivid.Frame.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<[width: 4, height: 4, background_colour: #Vivid.RGBA<{0, 0, 0, 0}>]>
push(frame, shape, colour)

Add a shape to the frame buffer.

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"
width(frame)
width(Vivid.Frame.t) :: integer

Return the width of the frame.

Example

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