Struct ascii_forge::window::Window
source · pub struct Window { /* private fields */ }
Expand description
The main window behind the application. Represents the terminal window, allowing it to be used similar to a buffer, but has extra event handling.
use ascii_forge::prelude::*;
let mut window = Window::init()?;
render!(
window,
[
(10, 10) => "Element Here!"
]
)
Implementations§
source§impl Window
impl Window
sourcepub fn new(io: Stdout) -> Result<Self>
pub fn new(io: Stdout) -> Result<Self>
Creates a new window from the given stdout. Please prefer to use init as it will do all of the terminal init stuff.
sourcepub fn buffer_mut(&mut self) -> &mut Buffer
pub fn buffer_mut(&mut self) -> &mut Buffer
Returns the active Buffer, as a mutable reference.
sourcepub fn swap_buffers(&mut self)
pub fn swap_buffers(&mut self)
Swaps the buffers, clearing the old buffer. Used automatically by the window’s update method.
sourcepub fn size(&self) -> Vec2
pub fn size(&self) -> Vec2
Returns the current known size of the buffer’s window.
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 restore(self) -> Result<()>
pub fn restore(self) -> Result<()>
Restores the window to it’s previous state from before the window’s init method.
sourcepub fn render(&mut self) -> Result<()>
pub fn render(&mut self) -> Result<()>
Renders the window to the screen. should really only be used by the update method, but if you need a custom system, you can use this.
sourcepub fn update(&mut self) -> Result<()>
pub fn update(&mut self) -> Result<()>
Handles events, and renders the screen.
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 handle_event(&mut self) -> Result<()>
pub fn handle_event(&mut self) -> Result<()>
Handles events. Used automatically by the update method, so no need to use it unless update is being used.
pub fn mouse_pos(&self) -> Vec2
sourcepub fn mouse(&self, event: MouseEventKind) -> Result<bool>
pub fn mouse(&self, event: MouseEventKind) -> Result<bool>
Returns true if the window had an event with the given mouse input
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 hover<I: Into<Vec2>>(&self, loc: I, size: I) -> Result<bool>
pub fn hover<I: Into<Vec2>>(&self, loc: I, size: I) -> Result<bool>
Returns true if the mouse cursor is hovering the given rect.
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 code(&self, code: KeyCode) -> bool
pub fn code(&self, code: KeyCode) -> bool
Returns true if the given key code is pressed.
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);
}
}
}