use kurbo::Rect as KRect;
use super::*;
impl Chunk {
pub fn hit(&self) -> Option<Hit> {
let (action, area) = self.action.as_ref()?;
let area = *area + self.origin;
let area = self.cut.map_or(area, |c| area.intersect(c));
Some(Hit {
action: action.clone(),
area,
})
}
}
impl List {
pub fn action_at(&self, x: f64, y: f64) -> Option<&str> {
let point = KRect::new(x, y, x, y);
self.found(point, 0.0).into_iter().rev().find_map(|f| {
let chunk = &self.chunks[f.order];
let (action, _) = chunk.action.as_ref()?;
let a = chunk.hit()?.area + f.at;
let a = f.cut.map_or(a, |c| a.intersect(c));
(x >= a.x0 && y >= a.y0 && x < a.x1 && y < a.y1).then_some(action.as_str())
})
}
}