Lots of owork on a calculator example, transparency, etc.

This commit is contained in:
2026-05-16 16:18:55 -04:00
parent e2c2563b7e
commit 6dcc2d0d00
40 changed files with 5783 additions and 125 deletions

View File

@@ -54,7 +54,7 @@ pub struct RoutedPointerEvent {
#[derive(Default)]
pub struct PointerRouter {
hovered: Vec<HitTarget>,
pressed: Option<HitTarget>,
pressed: Option<Vec<HitTarget>>,
}
impl PointerRouter {
@@ -71,7 +71,11 @@ impl PointerRouter {
}
pub fn pressed_target(&self) -> Option<&HitTarget> {
self.pressed.as_ref()
self.pressed.as_ref().and_then(|targets| targets.last())
}
pub fn pressed_targets(&self) -> &[HitTarget] {
self.pressed.as_deref().unwrap_or(&[])
}
pub fn route(
@@ -114,7 +118,12 @@ impl PointerRouter {
match event.kind {
PointerEventKind::Move => {
if let Some(target) = self.pressed.clone().or(hit_target.clone()) {
if let Some(target) = self
.pressed
.as_ref()
.and_then(|targets| targets.last().cloned())
.or(hit_target.clone())
{
routed.push(RoutedPointerEvent {
kind: RoutedPointerEventKind::Move,
target,
@@ -125,7 +134,7 @@ impl PointerRouter {
}
PointerEventKind::Down { button } => {
if let Some(target) = hit_target {
self.pressed = Some(target.clone());
self.pressed = Some(self.hovered.clone());
routed.push(RoutedPointerEvent {
kind: RoutedPointerEventKind::Down { button },
target,
@@ -135,7 +144,12 @@ impl PointerRouter {
}
}
PointerEventKind::Up { button } => {
if let Some(target) = self.pressed.take().or(hit_target) {
if let Some(target) = self
.pressed
.take()
.and_then(|targets| targets.last().cloned())
.or(hit_target)
{
routed.push(RoutedPointerEvent {
kind: RoutedPointerEventKind::Up { button },
target,