pub struct Buffer { /* private fields */ }
Expand description

A screen buffer that can be rendered to, has a size

This is the backbone of ascii-forge

Example

use ascii_forge::prelude::*;

// A 30x30 buffer window
let mut buffer = Buffer::new(30, 30);

// Render Hello World to the top left of the buffer
render!(
    buffer, [
        (0, 0) => "Hello World!"
    ]
);

Implementations§

source§

impl Buffer

source

pub fn new(size: impl Into<Vec2>) -> Self

Creates a new buffer of empty cells with the given size.

Examples found in repository?
examples/simple.rs (line 12)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    fn run(&mut self, window: &mut Window) -> Result<SceneResult, Box<dyn Error>> {
        // Set up a scene
        let mut ui_buffer = Buffer::new((6, 3));

        let chars = ['┌', '─', '┐', '│', ' ', '│', '└', '─', '┘'];
        let nine_slice = ui::NineSlice::new(chars, (6, 3));

        // Render Some elements to the buffer.
        render!(ui_buffer, [
            vec2(0, 0) => nine_slice,
            vec2(1, 1) => "QUIT".green()
        ]);

        // Loop the current scene.
        loop {
            window.update()?;

            // Renders some elements to the window.
            render!(window, [
                vec2(0, 0) => format!("{:?}", cursor::position()?),
                vec2(window.size().x / 2, window.size().y / 4) => ui_buffer,
            ]);

            // If the `q` key was pressed, quit the application by returning no scene.
            if window.code(KeyCode::Char('q')) {
                return Ok(None);
            }

            // If the buffer was clicked on, quit.
            if window.mouse(MouseEventKind::Down(MouseButton::Left))?
                && window.hover(
                    vec2(window.size().x / 2, window.size().y / 4),
                    ui_buffer.size(),
                )?
            {
                return Ok(None);
            }
        }
    }
source

pub fn size(&self) -> Vec2

Returns the current size of the buffer.

Examples found in repository?
examples/simple.rs (line 42)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    fn run(&mut self, window: &mut Window) -> Result<SceneResult, Box<dyn Error>> {
        // Set up a scene
        let mut ui_buffer = Buffer::new((6, 3));

        let chars = ['┌', '─', '┐', '│', ' ', '│', '└', '─', '┘'];
        let nine_slice = ui::NineSlice::new(chars, (6, 3));

        // Render Some elements to the buffer.
        render!(ui_buffer, [
            vec2(0, 0) => nine_slice,
            vec2(1, 1) => "QUIT".green()
        ]);

        // Loop the current scene.
        loop {
            window.update()?;

            // Renders some elements to the window.
            render!(window, [
                vec2(0, 0) => format!("{:?}", cursor::position()?),
                vec2(window.size().x / 2, window.size().y / 4) => ui_buffer,
            ]);

            // If the `q` key was pressed, quit the application by returning no scene.
            if window.code(KeyCode::Char('q')) {
                return Ok(None);
            }

            // If the buffer was clicked on, quit.
            if window.mouse(MouseEventKind::Down(MouseButton::Left))?
                && window.hover(
                    vec2(window.size().x / 2, window.size().y / 4),
                    ui_buffer.size(),
                )?
            {
                return Ok(None);
            }
        }
    }
source

pub fn set<C: Into<Cell>>(&mut self, loc: impl Into<Vec2>, cell: C)

Sets a cell at the given location to the given cell

source

pub fn get(&self, loc: impl Into<Vec2>) -> &Cell

Returns a reverence to the cell at the given location.

source

pub fn get_mut(&mut self, loc: impl Into<Vec2>) -> &mut Cell

Returns a mutable reference to the cell at the given location.

source

pub fn clear(&mut self)

Clears the buffer

source

pub fn diff<'a>(&self, other: &'a Buffer) -> Vec<(Vec2, &'a Cell)>

Returns the cells and locations that are different between the two buffers

source

pub fn shrink(&mut self)

Shrinks the buffer to the given size by dropping any cells that are only whitespace

source

pub fn resize(&mut self, new_size: impl Into<Vec2>)

Resizes the buffer while retaining elements that have already been rendered

source

pub fn sized_element<R: Render>(item: R) -> Self

Creates a Buffer from the given element with the minimum size it could have for that element. Useful for if you want to store any set of render elements in a custom element.

Trait Implementations§

source§

impl AsMut<Buffer> for Buffer

source§

fn as_mut(&mut self) -> &mut Buffer

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl AsMut<Buffer> for Window

source§

fn as_mut(&mut self) -> &mut Buffer

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl Debug for Buffer

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Render for Buffer

source§

fn render(&self, loc: Vec2, buffer: &mut Buffer)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.