pub struct Canvas<'a, F>where
F: Fn(&mut Context<'_>),{ /* private fields */ }
Expand description
The Canvas widget may be used to draw more detailed figures using braille patterns (each cell can have a braille character in 8 different positions).
Examples
Canvas::default()
.block(Block::default().title("Canvas").borders(Borders::ALL))
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0])
.paint(|ctx| {
ctx.draw(&Map {
resolution: MapResolution::High,
color: Color::White
});
ctx.layer();
ctx.draw(&Line {
x1: 0.0,
y1: 10.0,
x2: 10.0,
y2: 10.0,
color: Color::White,
});
ctx.draw(&Rectangle {
x: 10.0,
y: 20.0,
width: 10.0,
height: 10.0,
color: Color::Red
});
});
Implementations§
source§impl<'a, F> Canvas<'a, F>where
F: Fn(&mut Context<'_>),
impl<'a, F> Canvas<'a, F>where F: Fn(&mut Context<'_>),
sourcepub fn block(self, block: Block<'a>) -> Canvas<'a, F>
pub fn block(self, block: Block<'a>) -> Canvas<'a, F>
Examples found in repository?
examples/canvas.rs (line 172)
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
fn ui<B: Backend>(f: &mut Frame<B>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(f.size());
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("World"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&Map {
color: Color::White,
resolution: MapResolution::High,
});
ctx.print(
app.x,
-app.y,
Span::styled("You are here", Style::default().fg(Color::Yellow)),
);
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0]);
f.render_widget(canvas, chunks[0]);
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("Pong"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&app.ball);
})
.x_bounds([10.0, 110.0])
.y_bounds([10.0, 110.0]);
f.render_widget(canvas, chunks[1]);
}
sourcepub fn x_bounds(self, bounds: [f64; 2]) -> Canvas<'a, F>
pub fn x_bounds(self, bounds: [f64; 2]) -> Canvas<'a, F>
Define the viewport of the canvas. If you were to “zoom” to a certain part of the world you may want to choose different bounds.
Examples found in repository?
examples/canvas.rs (line 185)
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
fn ui<B: Backend>(f: &mut Frame<B>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(f.size());
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("World"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&Map {
color: Color::White,
resolution: MapResolution::High,
});
ctx.print(
app.x,
-app.y,
Span::styled("You are here", Style::default().fg(Color::Yellow)),
);
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0]);
f.render_widget(canvas, chunks[0]);
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("Pong"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&app.ball);
})
.x_bounds([10.0, 110.0])
.y_bounds([10.0, 110.0]);
f.render_widget(canvas, chunks[1]);
}
sourcepub fn y_bounds(self, bounds: [f64; 2]) -> Canvas<'a, F>
pub fn y_bounds(self, bounds: [f64; 2]) -> Canvas<'a, F>
Define the viewport of the canvas.
If you were to “zoom” to a certain part of the world you may want to choose different bounds.
Examples found in repository?
examples/canvas.rs (line 186)
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
fn ui<B: Backend>(f: &mut Frame<B>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(f.size());
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("World"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&Map {
color: Color::White,
resolution: MapResolution::High,
});
ctx.print(
app.x,
-app.y,
Span::styled("You are here", Style::default().fg(Color::Yellow)),
);
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0]);
f.render_widget(canvas, chunks[0]);
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("Pong"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&app.ball);
})
.x_bounds([10.0, 110.0])
.y_bounds([10.0, 110.0]);
f.render_widget(canvas, chunks[1]);
}
sourcepub fn paint(self, f: F) -> Canvas<'a, F>
pub fn paint(self, f: F) -> Canvas<'a, F>
Store the closure that will be used to draw to the Canvas
Examples found in repository?
examples/canvas.rs (lines 174-184)
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
fn ui<B: Backend>(f: &mut Frame<B>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(f.size());
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("World"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&Map {
color: Color::White,
resolution: MapResolution::High,
});
ctx.print(
app.x,
-app.y,
Span::styled("You are here", Style::default().fg(Color::Yellow)),
);
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0]);
f.render_widget(canvas, chunks[0]);
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("Pong"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&app.ball);
})
.x_bounds([10.0, 110.0])
.y_bounds([10.0, 110.0]);
f.render_widget(canvas, chunks[1]);
}
pub fn background_color(self, color: Color) -> Canvas<'a, F>
sourcepub fn marker(self, marker: Marker) -> Canvas<'a, F>
pub fn marker(self, marker: Marker) -> Canvas<'a, F>
Change the type of points used to draw the shapes. By default the braille patterns are used as they provide a more fine grained result but you might want to use the simple dot or block instead if the targeted terminal does not support those symbols.
Examples
Canvas::default().marker(symbols::Marker::Braille).paint(|ctx| {});
Canvas::default().marker(symbols::Marker::Dot).paint(|ctx| {});
Canvas::default().marker(symbols::Marker::Block).paint(|ctx| {});
Examples found in repository?
examples/canvas.rs (line 173)
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
fn ui<B: Backend>(f: &mut Frame<B>, app: &App) {
let chunks = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)].as_ref())
.split(f.size());
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("World"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&Map {
color: Color::White,
resolution: MapResolution::High,
});
ctx.print(
app.x,
-app.y,
Span::styled("You are here", Style::default().fg(Color::Yellow)),
);
})
.x_bounds([-180.0, 180.0])
.y_bounds([-90.0, 90.0]);
f.render_widget(canvas, chunks[0]);
let canvas = Canvas::default()
.block(Block::default().borders(Borders::ALL).title("Pong"))
.marker(app.marker)
.paint(|ctx| {
ctx.draw(&app.ball);
})
.x_bounds([10.0, 110.0])
.y_bounds([10.0, 110.0]);
f.render_widget(canvas, chunks[1]);
}
Trait Implementations§
Auto Trait Implementations§
impl<'a, F> RefUnwindSafe for Canvas<'a, F>where F: RefUnwindSafe,
impl<'a, F> Send for Canvas<'a, F>where F: Send,
impl<'a, F> Sync for Canvas<'a, F>where F: Sync,
impl<'a, F> Unpin for Canvas<'a, F>where F: Unpin,
impl<'a, F> UnwindSafe for Canvas<'a, F>where F: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more