pub struct Canvas<T> { /* private fields */ }
Expand description
A blank view that forwards calls to closures.
You can use this view to easily draw your own interface.
Examples
use cursive_core::event::{Event, EventResult, Key};
use cursive_core::views::{Canvas, Dialog};
use unicode_width::UnicodeWidthStr; // To get the width of some text.
// Build a canvas around a string.
let state = String::new();
let canvas = Canvas::new(state)
.with_draw(|text: &String, printer| {
// Simply print our string
printer.print((0, 0), text);
})
.with_on_event(|text: &mut String, event| match event {
Event::Char(c) => {
text.push(c);
EventResult::Consumed(None)
}
Event::Key(Key::Enter) => {
let text = text.clone();
EventResult::with_cb(move |s| {
s.add_layer(Dialog::info(&text));
})
}
_ => EventResult::Ignored,
})
.with_required_size(|text, _constraints| (text.width(), 1).into());
Implementations
sourceimpl<T> Canvas<T>
impl<T> Canvas<T>
sourcepub fn set_draw<F>(&mut self, f: F)where
F: 'static + Fn(&T, &Printer<'_, '_>),
pub fn set_draw<F>(&mut self, f: F)where
F: 'static + Fn(&T, &Printer<'_, '_>),
Sets the closure for draw(&Printer)
.
sourcepub fn with_draw<F>(self, f: F) -> Canvas<T>where
F: 'static + Fn(&T, &Printer<'_, '_>),
pub fn with_draw<F>(self, f: F) -> Canvas<T>where
F: 'static + Fn(&T, &Printer<'_, '_>),
Sets the closure for draw(&Printer)
.
Chainable variant.
sourcepub fn set_on_event<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, Event) -> EventResult,
pub fn set_on_event<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, Event) -> EventResult,
Sets the closure for on_event(Event)
.
sourcepub fn with_on_event<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, Event) -> EventResult,
pub fn with_on_event<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, Event) -> EventResult,
Sets the closure for on_event(Event)
.
Chainable variant.
sourcepub fn set_required_size<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, XY<usize>) -> XY<usize>,
pub fn set_required_size<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, XY<usize>) -> XY<usize>,
Sets the closure for required_size(Vec2)
.
sourcepub fn with_required_size<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, XY<usize>) -> XY<usize>,
pub fn with_required_size<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, XY<usize>) -> XY<usize>,
Sets the closure for required_size(Vec2)
.
Chainable variant.
sourcepub fn set_layout<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, XY<usize>),
pub fn set_layout<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, XY<usize>),
Sets the closure for layout(Vec2)
.
sourcepub fn with_layout<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, XY<usize>),
pub fn with_layout<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, XY<usize>),
Sets the closure for layout(Vec2)
.
Chainable variant.
sourcepub fn set_take_focus<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, Direction) -> Result<EventResult, CannotFocus>,
pub fn set_take_focus<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, Direction) -> Result<EventResult, CannotFocus>,
Sets the closure for take_focus(Direction)
.
sourcepub fn with_take_focus<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, Direction) -> Result<EventResult, CannotFocus>,
pub fn with_take_focus<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, Direction) -> Result<EventResult, CannotFocus>,
Sets the closure for take_focus(Direction)
.
Chainable variant.
sourcepub fn set_needs_relayout<F>(&mut self, f: F)where
F: 'static + Fn(&T) -> bool,
pub fn set_needs_relayout<F>(&mut self, f: F)where
F: 'static + Fn(&T) -> bool,
Sets the closure for needs_relayout()
.
sourcepub fn with_needs_relayout<F>(self, f: F) -> Canvas<T>where
F: 'static + Fn(&T) -> bool,
pub fn with_needs_relayout<F>(self, f: F) -> Canvas<T>where
F: 'static + Fn(&T) -> bool,
Sets the closure for needs_relayout()
.
Chainable variant.
sourcepub fn set_call_on_any<F>(&mut self, f: F)where
F: 'static + for<'a> FnMut(&mut T, &Selector<'_>, &'a mut (dyn FnMut(&mut (dyn View + 'static)) + 'a)),
pub fn set_call_on_any<F>(&mut self, f: F)where
F: 'static + for<'a> FnMut(&mut T, &Selector<'_>, &'a mut (dyn FnMut(&mut (dyn View + 'static)) + 'a)),
Sets the closure for call_on_any()
.
sourcepub fn with_call_on_any<F>(self, f: F) -> Canvas<T>where
F: 'static + for<'a> FnMut(&mut T, &Selector<'_>, &'a mut (dyn FnMut(&mut (dyn View + 'static)) + 'a)),
pub fn with_call_on_any<F>(self, f: F) -> Canvas<T>where
F: 'static + for<'a> FnMut(&mut T, &Selector<'_>, &'a mut (dyn FnMut(&mut (dyn View + 'static)) + 'a)),
Sets the closure for call_on_any()
.
Chainable variant.
sourcepub fn set_important_area<F>(&mut self, f: F)where
F: 'static + Fn(&T, XY<usize>) -> Rect,
pub fn set_important_area<F>(&mut self, f: F)where
F: 'static + Fn(&T, XY<usize>) -> Rect,
Sets the closure for important_area()
.
sourcepub fn with_important_area<F>(self, f: F) -> Canvas<T>where
F: 'static + Fn(&T, XY<usize>) -> Rect,
pub fn with_important_area<F>(self, f: F) -> Canvas<T>where
F: 'static + Fn(&T, XY<usize>) -> Rect,
Sets the closure for important_area()
.
Chainable variant.
sourcepub fn set_focus_view<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, &Selector<'_>) -> Result<EventResult, ViewNotFound>,
pub fn set_focus_view<F>(&mut self, f: F)where
F: 'static + FnMut(&mut T, &Selector<'_>) -> Result<EventResult, ViewNotFound>,
Sets the closure for focus_view()
.
sourcepub fn with_focus_view<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, &Selector<'_>) -> Result<EventResult, ViewNotFound>,
pub fn with_focus_view<F>(self, f: F) -> Canvas<T>where
F: 'static + FnMut(&mut T, &Selector<'_>) -> Result<EventResult, ViewNotFound>,
Sets the closure for focus_view()
.
Chainable variant.
Trait Implementations
sourceimpl<T> View for Canvas<T>where
T: 'static,
impl<T> View for Canvas<T>where
T: 'static,
sourcefn draw(&self, printer: &Printer<'_, '_>)
fn draw(&self, printer: &Printer<'_, '_>)
Draws the view with the given printer (includes bounds) and focus. Read more
sourcefn on_event(&mut self, event: Event) -> EventResult
fn on_event(&mut self, event: Event) -> EventResult
Called when an event is received (key press, mouse event, …). Read more
sourcefn required_size(&mut self, constraint: XY<usize>) -> XY<usize>
fn required_size(&mut self, constraint: XY<usize>) -> XY<usize>
Returns the minimum size the view requires with the given restrictions. Read more
sourcefn layout(&mut self, size: XY<usize>)
fn layout(&mut self, size: XY<usize>)
Called once the size for this view has been decided. Read more
sourcefn take_focus(&mut self, source: Direction) -> Result<EventResult, CannotFocus>
fn take_focus(&mut self, source: Direction) -> Result<EventResult, CannotFocus>
Attempt to give this view the focus. Read more
sourcefn needs_relayout(&self) -> bool
fn needs_relayout(&self) -> bool
Should return true
if the view content changed since the last call
to layout()
. Read more
sourcefn focus_view(
&mut self,
selector: &Selector<'_>
) -> Result<EventResult, ViewNotFound>
fn focus_view(
&mut self,
selector: &Selector<'_>
) -> Result<EventResult, ViewNotFound>
Moves the focus to the view identified by the given selector. Read more
sourcefn important_area(&self, view_size: XY<usize>) -> Rect
fn important_area(&self, view_size: XY<usize>) -> Rect
What part of the view is important and should be visible? Read more
Auto Trait Implementations
impl<T> !RefUnwindSafe for Canvas<T>
impl<T> !Send for Canvas<T>
impl<T> !Sync for Canvas<T>
impl<T> Unpin for Canvas<T>where
T: Unpin,
impl<T> !UnwindSafe for Canvas<T>
Blanket Implementations
sourceimpl<T> AnyView for Twhere
T: View,
impl<T> AnyView for Twhere
T: View,
sourcefn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Downcast self to a mutable Any
.
sourcefn as_boxed_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘNotable traits for Box<F, A>impl<F, A> Future for Box<F, A>where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A>where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
fn as_boxed_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘNotable traits for Box<F, A>impl<F, A> Future for Box<F, A>where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A>where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A>where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
Returns a boxed any from a boxed self. Read more
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Finder for Twhere
T: View,
impl<T> Finder for Twhere
T: View,
sourcefn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)where
V: View,
F: FnMut(&mut V),
fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)where
V: View,
F: FnMut(&mut V),
Runs a callback on all views identified by sel
. Read more
sourcefn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>where
V: View,
F: FnOnce(&mut V) -> R,
fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>where
V: View,
F: FnOnce(&mut V) -> R,
Runs a callback on the view identified by sel
. Read more
sourceimpl<T> IntoBoxedView for Twhere
T: View,
impl<T> IntoBoxedView for Twhere
T: View,
sourcefn into_boxed_view(self) -> Box<dyn View + 'static, Global>ⓘNotable traits for Box<F, A>impl<F, A> Future for Box<F, A>where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A>where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
fn into_boxed_view(self) -> Box<dyn View + 'static, Global>ⓘNotable traits for Box<F, A>impl<F, A> Future for Box<F, A>where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A>where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A>where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
Returns a Box<View>
.
sourceimpl<T> Resizable for Twhere
T: View,
impl<T> Resizable for Twhere
T: View,
sourcefn resized(
self,
width: SizeConstraint,
height: SizeConstraint
) -> ResizedView<Self>
fn resized(
self,
width: SizeConstraint,
height: SizeConstraint
) -> ResizedView<Self>
Wraps self
in a ResizedView
with the given size constraints.
sourcefn fixed_size<S>(self, size: S) -> ResizedView<Self>where
S: Into<XY<usize>>,
fn fixed_size<S>(self, size: S) -> ResizedView<Self>where
S: Into<XY<usize>>,
Wraps self
into a fixed-size ResizedView
.
sourcefn fixed_width(self, width: usize) -> ResizedView<Self>
fn fixed_width(self, width: usize) -> ResizedView<Self>
Wraps self
into a fixed-width ResizedView
.
sourcefn fixed_height(self, height: usize) -> ResizedView<Self>
fn fixed_height(self, height: usize) -> ResizedView<Self>
Wraps self
into a fixed-width ResizedView
.
sourcefn full_screen(self) -> ResizedView<Self>
fn full_screen(self) -> ResizedView<Self>
Wraps self
into a full-screen ResizedView
.
sourcefn full_width(self) -> ResizedView<Self>
fn full_width(self) -> ResizedView<Self>
Wraps self
into a full-width ResizedView
.
sourcefn full_height(self) -> ResizedView<Self>
fn full_height(self) -> ResizedView<Self>
Wraps self
into a full-height ResizedView
.
sourcefn max_size<S>(self, size: S) -> ResizedView<Self>where
S: Into<XY<usize>>,
fn max_size<S>(self, size: S) -> ResizedView<Self>where
S: Into<XY<usize>>,
Wraps self
into a limited-size ResizedView
.
sourcefn max_width(self, max_width: usize) -> ResizedView<Self>
fn max_width(self, max_width: usize) -> ResizedView<Self>
Wraps self
into a limited-width ResizedView
.
sourcefn max_height(self, max_height: usize) -> ResizedView<Self>
fn max_height(self, max_height: usize) -> ResizedView<Self>
Wraps self
into a limited-height ResizedView
.
sourcefn min_size<S>(self, size: S) -> ResizedView<Self>where
S: Into<XY<usize>>,
fn min_size<S>(self, size: S) -> ResizedView<Self>where
S: Into<XY<usize>>,
Wraps self
into a ResizedView
at least sized size
.
sourcefn min_width(self, min_width: usize) -> ResizedView<Self>
fn min_width(self, min_width: usize) -> ResizedView<Self>
Wraps self
in a ResizedView
at least min_width
wide.
sourcefn min_height(self, min_height: usize) -> ResizedView<Self>
fn min_height(self, min_height: usize) -> ResizedView<Self>
Wraps self
in a ResizedView
at least min_height
tall.
sourceimpl<T> Scrollable for Twhere
T: View,
impl<T> Scrollable for Twhere
T: View,
sourcefn scrollable(self) -> ScrollView<Self>
fn scrollable(self) -> ScrollView<Self>
Wraps self
in a ScrollView
.