From 43b44ca9ebd1ca90b7966d4e1605657f283c4b37 Mon Sep 17 00:00:00 2001 From: Aaron Muir Hamilton Date: Tue, 24 Jun 2025 11:50:33 -0400 Subject: [PATCH] Update ui-events to 0.2.0. --- Cargo.lock | 9 ++++---- Cargo.toml | 2 +- demo/Cargo.toml | 2 +- demo/src/lib.rs | 2 +- demo/src/text.rs | 6 +++--- masonry-demo/Cargo.toml | 2 +- masonry-demo/src/lib.rs | 11 ++++------ masonry/Cargo.toml | 2 +- src/events.rs | 47 +++++++++++++++++++++++------------------ 9 files changed, 42 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f84ecc7..74551fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -766,7 +766,7 @@ dependencies = [ [[package]] name = "masonry" version = "0.3.0" -source = "git+https://github.com/linebender/xilem#47722f4357fe7b7a595bb1f7815229bb1e9e38d9" +source = "git+https://github.com/xorgy/xilem?branch=ui-events-0.2.0#39583abb0277fa6fcf2bb75a8d212bf37ed6ab5c" dependencies = [ "accesskit", "cursor-icon", @@ -796,7 +796,7 @@ dependencies = [ [[package]] name = "masonry_core" version = "0.3.0" -source = "git+https://github.com/linebender/xilem#47722f4357fe7b7a595bb1f7815229bb1e9e38d9" +source = "git+https://github.com/xorgy/xilem?branch=ui-events-0.2.0#39583abb0277fa6fcf2bb75a8d212bf37ed6ab5c" dependencies = [ "accesskit", "anymap3", @@ -1623,7 +1623,7 @@ dependencies = [ [[package]] name = "tree_arena" version = "0.1.0" -source = "git+https://github.com/linebender/xilem#47722f4357fe7b7a595bb1f7815229bb1e9e38d9" +source = "git+https://github.com/xorgy/xilem?branch=ui-events-0.2.0#39583abb0277fa6fcf2bb75a8d212bf37ed6ab5c" dependencies = [ "hashbrown", ] @@ -1631,8 +1631,7 @@ dependencies = [ [[package]] name = "ui-events" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4c2cc34489c685d4e7a1a1f97b7b4416c5aa789892114ae77df6cd2a60f0ec4" +source = "git+https://github.com/endoli/ui-events?rev=6382e63#6382e6394a008bc21ef1802e1825b507b4b822f1" dependencies = [ "dpi", "keyboard-types", diff --git a/Cargo.toml b/Cargo.toml index f1ef3a0..e518262 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ ndk = "0.9.0" num_enum = "0.7.3" send_wrapper = "0.6.0" smallvec = "1.15.0" -ui-events = "0.1.0" +ui-events = { git = "https://github.com/endoli/ui-events", rev = "6382e63" } [profile.dev] panic = "abort" diff --git a/demo/Cargo.toml b/demo/Cargo.toml index e7bdc9d..137fd23 100644 --- a/demo/Cargo.toml +++ b/demo/Cargo.toml @@ -17,7 +17,7 @@ log = "0.4.26" parley = { version = "0.5.0", features = ["accesskit"] } peniko = { version = "0.4.0", default-features = false } pollster = "0.4.0" -ui-events = "0.1.0" +ui-events = { git = "https://github.com/endoli/ui-events", rev = "6382e63" } vello = "0.5.0" # Send tracing events to Android GPU inspector, for profiling diff --git a/demo/src/lib.rs b/demo/src/lib.rs index d34671b..e1af7ce 100644 --- a/demo/src/lib.rs +++ b/demo/src/lib.rs @@ -371,7 +371,7 @@ impl ViewPeer for DemoViewPeer { return false; }; - if matches!(ev, PointerEvent::Up { .. }) { + if matches!(ev, PointerEvent::Up(..)) { ctx.push_static_deferred_callback(show_soft_input); } diff --git a/demo/src/text.rs b/demo/src/text.rs index 1c68a99..3094261 100644 --- a/demo/src/text.rs +++ b/demo/src/text.rs @@ -12,7 +12,7 @@ use parley::{ use std::time::{Duration, Instant}; use ui_events::{ keyboard::{Code, Key, KeyState, KeyboardEvent, NamedKey}, - pointer::{PointerButton, PointerEvent, PointerState, PointerUpdate}, + pointer::{PointerButton, PointerButtonEvent, PointerEvent, PointerState, PointerUpdate}, }; use vello::{ Scene, @@ -310,7 +310,7 @@ impl Editor { pub fn handle_pointer_event(&mut self, ev: PointerEvent) -> bool { let mut drv = self.editor.driver(&mut self.font_cx, &mut self.layout_cx); match ev { - PointerEvent::Down { + PointerEvent::Down(PointerButtonEvent { button: None | Some(PointerButton::Primary), state: PointerState { @@ -320,7 +320,7 @@ impl Editor { .. }, .. - } => match count { + }) => match count { 2 => drv.select_word_at_point(position.x as f32 - INSET, position.y as f32 - INSET), 3 => drv.select_line_at_point(position.x as f32 - INSET, position.y as f32 - INSET), 1 if modifiers.shift() => drv.extend_selection_to_point( diff --git a/masonry-demo/Cargo.toml b/masonry-demo/Cargo.toml index 24c07cc..8e87161 100644 --- a/masonry-demo/Cargo.toml +++ b/masonry-demo/Cargo.toml @@ -9,7 +9,7 @@ crate-type = ["cdylib"] [dependencies] android-view = { path = ".." } -masonry = { git = "https://github.com/linebender/xilem" } +masonry = { git = "https://github.com/xorgy/xilem", branch = "ui-events-0.2.0" } masonry_android = { path = "../masonry" } # Send tracing events to Android GPU inspector, for profiling diff --git a/masonry-demo/src/lib.rs b/masonry-demo/src/lib.rs index 0e8f72e..c13bc0e 100644 --- a/masonry-demo/src/lib.rs +++ b/masonry-demo/src/lib.rs @@ -14,7 +14,7 @@ use masonry::{ core::{Action, DefaultProperties, Widget, WidgetId}, properties::Padding, theme::default_property_set, - widgets::{Button, Flex, Label, Portal, RootWidget, TextArea, Textbox}, + widgets::{Button, Flex, Label, Portal, TextArea, Textbox}, }; use masonry_android::{AppDriver, DriverCtx}; use std::{ffi::c_void, sync::Arc}; @@ -31,10 +31,7 @@ impl AppDriver for Driver { match action { Action::ButtonPressed(_) => { ctx.render_root().edit_root_widget(|mut root| { - let mut root = root.downcast::(); - - let mut portal = RootWidget::child_mut(&mut root); - let mut portal = portal.downcast::>(); + let mut portal = root.downcast::>(); let mut flex = Portal::child_mut(&mut portal); Flex::add_child(&mut flex, Label::new(self.next_task.clone())); @@ -68,7 +65,7 @@ fn make_widget_tree() -> impl Widget { fn default_props() -> Arc { let mut default_properties = default_property_set(); - default_properties.insert::(Padding::all(WIDGET_SPACING)); + default_properties.insert::, _>(Padding::all(WIDGET_SPACING)); Arc::new(default_properties) } @@ -81,7 +78,7 @@ extern "system" fn new_view_peer<'local>( masonry_android::new_view_peer( &mut env, &context, - RootWidget::new(make_widget_tree()), + make_widget_tree(), Driver { next_task: String::new(), }, diff --git a/masonry/Cargo.toml b/masonry/Cargo.toml index 7a9bdcf..041be11 100644 --- a/masonry/Cargo.toml +++ b/masonry/Cargo.toml @@ -7,7 +7,7 @@ edition = "2024" accesskit = "0.19.0" accesskit_android = "0.2.0" android-view = { path = ".." } -masonry = { git = "https://github.com/linebender/xilem" } +masonry = { git = "https://github.com/xorgy/xilem", branch = "ui-events-0.2.0" } pollster = "0.4.0" tracing = "0.1.40" vello = "0.5.0" diff --git a/src/events.rs b/src/events.rs index fc6810b..946e1f9 100644 --- a/src/events.rs +++ b/src/events.rs @@ -12,7 +12,10 @@ use num_enum::FromPrimitive; use ui_events::{ ScrollDelta, keyboard::{KeyboardEvent, Modifiers}, - pointer::{ContactGeometry, PointerEvent, PointerId, PointerState, PointerUpdate}, + pointer::{ + ContactGeometry, PointerButtonEvent, PointerEvent, PointerId, PointerScrollEvent, + PointerState, PointerUpdate, + }, }; use crate::ViewConfiguration; @@ -467,16 +470,18 @@ impl<'local> MotionEvent<'local> { }; Some(match action { - MotionAction::Down | MotionAction::PointerDown => PointerEvent::Down { - pointer, - state, - button, - }, - MotionAction::Up | MotionAction::PointerUp => PointerEvent::Up { + MotionAction::Down | MotionAction::PointerDown => { + PointerEvent::Down(PointerButtonEvent { + pointer, + state, + button, + }) + } + MotionAction::Up | MotionAction::PointerUp => PointerEvent::Up(PointerButtonEvent { pointer, state, button, - }, + }), MotionAction::Move | MotionAction::HoverMove => { let hsz = self.history_size(env); let mut coalesced: Vec = vec![state.clone(); hsz as usize]; @@ -527,7 +532,7 @@ impl<'local> MotionEvent<'local> { MotionAction::Cancel => PointerEvent::Cancel(pointer), MotionAction::HoverEnter => PointerEvent::Enter(pointer), MotionAction::HoverExit => PointerEvent::Leave(pointer), - MotionAction::Scroll => PointerEvent::Scroll { + MotionAction::Scroll => PointerEvent::Scroll(PointerScrollEvent { pointer, delta: ScrollDelta::PixelDelta(PhysicalPosition:: { x: (self.axis(env, Axis::Hscroll, action_index) @@ -536,7 +541,7 @@ impl<'local> MotionEvent<'local> { * vc.scaled_vertical_scroll_factor) as f64, }), state, - }, + }), _ => { // Other current `MotionAction` values relate to gamepad/joystick buttons; // ui-events doesn't currently have types for these, so consider them unhandled. @@ -620,11 +625,11 @@ impl TapCounter { /// pub fn attach_count(&mut self, e: PointerEvent) -> PointerEvent { match e { - PointerEvent::Down { + PointerEvent::Down(PointerButtonEvent { button, pointer, state, - } => { + }) => { let e = if let Some(i) = self.taps.iter().position(|TapState { x, y, up_time, .. }| { let dx = (x - state.position.x).abs(); @@ -641,11 +646,11 @@ impl TapCounter { self.taps[i].x = state.position.x; self.taps[i].y = state.position.y; - PointerEvent::Down { + PointerEvent::Down(PointerButtonEvent { button, pointer, state: PointerState { count, ..state }, - } + }) } else { let s = TapState { pointer_id: pointer.pointer_id, @@ -656,34 +661,34 @@ impl TapCounter { y: state.position.y, }; self.taps.push(s); - PointerEvent::Down { + PointerEvent::Down(PointerButtonEvent { button, pointer, state: PointerState { count: 1, ..state }, - } + }) }; self.clear_expired(state.time); e } - PointerEvent::Up { + PointerEvent::Up(PointerButtonEvent { button, pointer, ref state, - } => { + }) => { if let Some(i) = self .taps .iter() .position(|TapState { pointer_id, .. }| *pointer_id == pointer.pointer_id) { self.taps[i].up_time = state.time; - PointerEvent::Up { + PointerEvent::Up(PointerButtonEvent { button, pointer, state: PointerState { count: self.taps[i].count, ..state.clone() }, - } + }) } else { e.clone() } @@ -735,7 +740,7 @@ impl TapCounter { .retain(|TapState { pointer_id, .. }| *pointer_id != p.pointer_id); e.clone() } - PointerEvent::Enter(..) | PointerEvent::Scroll { .. } => e.clone(), + PointerEvent::Enter(..) | PointerEvent::Scroll(..) => e.clone(), } }