slint/sixtyfps_runtime/corelib/input.rs

51 lines
1.2 KiB
Rust

/*! Module handling mouse events
TODO: Keyboard events
*/
use crate::graphics::Point;
use crate::ComponentRefPin;
use euclid::default::Vector2D;
/// The type of a MouseEvent
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub enum MouseEventType {
/// The mouse was pressed
MousePressed,
/// The mouse was relased
MouseReleased,
/// The mouse position has changed
MouseMoved,
}
/// Structur representing a mouse event
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct MouseEvent {
/// The position of the cursor
pub pos: Point,
/// The action performed (pressed/released/moced)
pub what: MouseEventType,
}
pub fn process_mouse_event(component: ComponentRefPin, event: MouseEvent) {
let offset = Vector2D::new(0., 0.);
crate::item_tree::visit_items(
component,
|_, item, offset| {
let geom = item.as_ref().geometry();
let geom = geom.translate(*offset);
if geom.contains(event.pos) {
let mut event2 = event.clone();
event2.pos -= geom.origin.to_vector();
item.as_ref().input_event(event2);
}
geom.origin.to_vector()
},
offset,
);
}