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
.
Initialize a frame buffer.
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
@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)
@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.
Clear the frame
of any shapes.
Return the height of the frame
.
Example
iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.height
25
@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))
@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"
Return the width of the frame
.
Example
iex> Vivid.Frame.init(80, 25) |> Vivid.Frame.width
80