freya_components/
cursor_blink.rs1use std::time::Duration;
2
3use freya_animation::prelude::*;
4use freya_core::prelude::Color;
5use freya_sdk::timeout::*;
6
7const ANIMATION_TIME: Duration = Duration::from_millis(100);
9const WAIT_ANIMATION_TIME: Duration = Duration::from_millis(750);
11const ANIMATION_TIMEOUT: Duration = Duration::from_millis(500);
13
14pub fn use_cursor_blink(enable: bool, color: Color) -> (Timeout, Color) {
18 let movement_timeout = use_timeout(|| ANIMATION_TIMEOUT);
19
20 let cursor_blink = use_animation_with_dependencies(
21 &(enable, movement_timeout.elapsed()),
22 |conf, (enable, movement_elapsed)| {
23 if *enable && *movement_elapsed {
27 conf.on_creation(OnCreation::Run);
28 conf.on_change(OnChange::Rerun);
29 conf.on_finish(OnFinish::reverse_with_delay(WAIT_ANIMATION_TIME));
30 }
31 AnimNum::new(255., 0.).duration(ANIMATION_TIME)
32 },
33 );
34
35 let cursor_color = color.with_a(cursor_blink.get().value() as u8);
36
37 (movement_timeout, cursor_color)
38}