Struct ascii_forge::renderer::buffer::Buffer
source · 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
impl Buffer
sourcepub fn new(size: impl Into<Vec2>) -> Self
pub fn new(size: impl Into<Vec2>) -> Self
Creates a new buffer of empty cells with the given size.
Examples found in repository?
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);
}
}
}
sourcepub fn size(&self) -> Vec2
pub fn size(&self) -> Vec2
Returns the current size of the buffer.
Examples found in repository?
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);
}
}
}
sourcepub fn set<C: Into<Cell>>(&mut self, loc: impl Into<Vec2>, cell: C)
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
sourcepub fn get(&self, loc: impl Into<Vec2>) -> &Cell
pub fn get(&self, loc: impl Into<Vec2>) -> &Cell
Returns a reverence to the cell at the given location.
sourcepub fn get_mut(&mut self, loc: impl Into<Vec2>) -> &mut Cell
pub fn get_mut(&mut self, loc: impl Into<Vec2>) -> &mut Cell
Returns a mutable reference to the cell at the given location.
sourcepub fn diff<'a>(&self, other: &'a Buffer) -> Vec<(Vec2, &'a Cell)>
pub fn diff<'a>(&self, other: &'a Buffer) -> Vec<(Vec2, &'a Cell)>
Returns the cells and locations that are different between the two buffers
sourcepub fn shrink(&mut self)
pub fn shrink(&mut self)
Shrinks the buffer to the given size by dropping any cells that are only whitespace
sourcepub fn resize(&mut self, new_size: impl Into<Vec2>)
pub fn resize(&mut self, new_size: impl Into<Vec2>)
Resizes the buffer while retaining elements that have already been rendered
sourcepub fn sized_element<R: Render>(item: R) -> Self
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.