fix(panel item): clamp pointer motion to surface size

This commit is contained in:
Nova
2022-09-16 14:52:37 -04:00
parent a74c98b219
commit fb1f5bad97

View File

@@ -274,9 +274,10 @@ impl PanelItem {
if let ItemType::Panel(panel_item) = &node.item.get().unwrap().specialization { if let ItemType::Panel(panel_item) = &node.item.get().unwrap().specialization {
if let Some(pointer) = panel_item.seat_data.pointer() { if let Some(pointer) = panel_item.seat_data.pointer() {
if let Some(core_surface) = panel_item.core_surface.upgrade() { if let Some(core_surface) = panel_item.core_surface.upgrade() {
if let Some(size) = core_surface.with_data(|data| data.size) {
let flex_vec = flexbuffers::Reader::get_root(data)?.get_vector()?; let flex_vec = flexbuffers::Reader::get_root(data)?.get_vector()?;
let x = flex_vec.index(0)?.get_f64()?; let x = flex_vec.index(0)?.get_f64()?.clamp(0.0, size.x as f64);
let y = flex_vec.index(1)?.get_f64()?; let y = flex_vec.index(1)?.get_f64()?.clamp(0.0, size.y as f64);
let mut pointer_active = panel_item.seat_data.pointer_active.lock(); let mut pointer_active = panel_item.seat_data.pointer_active.lock();
if *pointer_active { if *pointer_active {
pointer.motion(0, x, y); pointer.motion(0, x, y);
@@ -289,6 +290,7 @@ impl PanelItem {
} }
} }
} }
}
Ok(()) Ok(())
} }