Function cursive_async_view::default_animation
source · [−]pub fn default_animation(
width: usize,
_height: usize,
frame_idx: usize
) -> AnimationFrame
Expand description
The default loading animation for a AsyncView
.
Creating your own loading function
As an example a very basic loading function would look like this:
use std::time::{Instant, Duration};
use cursive::{Cursive, CursiveExt};
use cursive::views::TextView;
use cursive::utils::markup::StyledString;
use cursive_async_view::{AsyncView, AsyncState, AnimationFrame};
fn my_loading_animation(
_width: usize,
_height: usize,
frame_idx: usize,
) -> AnimationFrame {
let content = if frame_idx < 30 {
StyledString::plain("loading")
} else {
StyledString::plain("content")
};
AnimationFrame {
content,
next_frame_idx: (frame_idx + 1) % 60,
}
}
let mut siv = Cursive::default();
let instant = Instant::now();
let async_view = AsyncView::new(&mut siv, move || {
if instant.elapsed() > Duration::from_secs(5) {
AsyncState::Available(
TextView::new("Yay!\n\nThe content has loaded!")
)
} else {
AsyncState::Pending
}
}).with_animation_fn(my_loading_animation);
siv.add_layer(async_view);
// siv.run();
This animation function will first display loading
for half a second and then display
content
for half a second.
The width
and height
parameters contain the maximum size the content may have
(in characters). The initial frame_idx
is 0.