mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-02 22:54:36 +00:00
51 lines
1.2 KiB
Rust
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,
|
|
);
|
|
}
|