1
0
Fork 0
forked from wry/wry
wry/src/tasks/hardware_cursor.rs
2025-04-03 16:36:15 +02:00

36 lines
1.1 KiB
Rust

use {
crate::{state::State, utils::errorfmt::ErrorFmt},
futures_util::{FutureExt, select},
std::rc::Rc,
};
pub async fn handle_hardware_cursor_tick(state: Rc<State>) {
loop {
let cursor = match state.hardware_tick_cursor.pop().await {
Some(c) => c,
_ => continue,
};
if !cursor.needs_tick() {
continue;
}
loop {
let tick = cursor.time_until_tick().as_nanos().div_ceil(1_000_000);
if tick > 0 {
let res = select! {
_ = state.hardware_tick_cursor.non_empty().fuse() => break,
res = state.wheel.timeout(tick as _).fuse() => res,
};
if let Err(e) = res {
log::error!("Could not wait for cursor tick: {}", ErrorFmt(e));
break;
}
} else {
if state.hardware_tick_cursor.is_not_empty() {
break;
}
}
cursor.tick();
state.damage_hardware_cursors(true);
}
}
}