Gestures
Kael provides built-in gesture recognizers for touch and pointer interactions.
Pan gesture
Detect drag/pan movements with velocity tracking:
#![allow(unused)]
fn main() {
use kael::gesture::PanGesture;
let pan = PanGesture::new()
.min_distance(px(5.0))
.on_start(|position, _window, _cx| { /* drag started */ })
.on_update(|delta, velocity, _window, _cx| { /* dragging */ })
.on_end(|velocity, _window, _cx| { /* drag ended */ });
}
Swipe gesture
Detect directional swipes:
#![allow(unused)]
fn main() {
use kael::gesture::SwipeGesture;
let swipe = SwipeGesture::new()
.on_swipe(|direction, _window, _cx| {
match direction {
SwipeDirection::Left => { /* swipe left */ },
SwipeDirection::Right => { /* swipe right */ },
SwipeDirection::Up => { /* swipe up */ },
SwipeDirection::Down => { /* swipe down */ },
}
});
}
Pinch gesture
Zoom/scale with pinch-to-zoom or Ctrl+scroll:
#![allow(unused)]
fn main() {
use kael::gesture::PinchGesture;
let pinch = PinchGesture::new()
.on_pinch(|scale, center, _window, _cx| {
// scale: f64 (1.0 = no change, >1 = zoom in, <1 = zoom out)
// center: Point<Pixels> (pinch center point)
});
}
Drag and drop
File drop (from OS)
#![allow(unused)]
fn main() {
div()
.id("drop-zone")
.on_file_drop(|event, _window, _cx| {
match event {
FileDropEvent::Entered(paths) => { /* files hovering */ },
FileDropEvent::Submit(paths) => { /* files dropped */ },
FileDropEvent::Exited => { /* drag cancelled */ },
_ => {}
}
})
}
Sortable reordering
See SortableList for drag-to-reorder within lists.
Scroll events
#![allow(unused)]
fn main() {
div()
.id("canvas")
.on_scroll_wheel(|event, _window, _cx| {
// event.delta: ScrollDelta (Pixels or Lines)
// event.modifiers: Modifiers (detect Ctrl for zoom)
})
}