fix(panel item): clamp pointer motion to surface size
This commit is contained in:
@@ -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(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user