diff --git a/bin/app/src/app/schema/test.rs b/bin/app/src/app/schema/test.rs index f76d38d9f..e71c321e1 100644 --- a/bin/app/src/app/schema/test.rs +++ b/bin/app/src/app/schema/test.rs @@ -357,8 +357,8 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { */ // Text edit - //let node = create_singleline_edit("editz"); - let node = create_multiline_edit("editz"); + let node = create_singleline_edit("editz"); + //let node = create_multiline_edit("editz"); node.set_property_bool(atom, Role::App, "is_active", true).unwrap(); node.set_property_bool(atom, Role::App, "is_focused", true).unwrap(); @@ -381,9 +381,9 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { // Only for multiline edit ////////////////////////////////////////////////////////////////////// - let prop = node.get_property("height_range").unwrap(); - prop.set_f32(atom, Role::App, 0, 0.).unwrap(); - prop.set_f32(atom, Role::App, 1, 400.).unwrap(); + //let prop = node.get_property("height_range").unwrap(); + //prop.set_f32(atom, Role::App, 0, 0.).unwrap(); + //prop.set_f32(atom, Role::App, 1, 400.).unwrap(); let prop = node.get_property("padding").unwrap(); prop.set_f32(atom, Role::App, 0, 20.).unwrap(); @@ -437,8 +437,8 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { me, window_scale.clone(), app.render_api.clone(), - //BaseEditType::SingleLine, - BaseEditType::MultiLine, + BaseEditType::SingleLine, + //BaseEditType::MultiLine, ) }) .await; diff --git a/bin/app/src/ui/edit/mod.rs b/bin/app/src/ui/edit/mod.rs index 94bf439b2..56d8b4fa6 100644 --- a/bin/app/src/ui/edit/mod.rs +++ b/bin/app/src/ui/edit/mod.rs @@ -786,8 +786,11 @@ impl BaseEdit { } async fn handle_touch_move(&self, mut touch_pos: Point) -> bool { + if !self.is_active.get() { + return false + } + //t!("handle_touch_move({touch_pos:?})"); - let atom = &mut self.render_api.make_guard(gfxtag!("BaseEdit::handle_touch_move")); // We must update with non relative touch_pos bcos when doing vertical scrolling // we will modify the scroll, which is used by abs_to_local(), which is used // to then calculate the max scroll. So it ends up jumping around. @@ -804,6 +807,8 @@ impl BaseEdit { self.node().trigger("paste_request", vec![]).await.unwrap(); } else { self.abs_to_local(&mut touch_pos); + + let atom = &mut self.render_api.make_guard(gfxtag!("BaseEdit::handle_touch_move")); self.start_touch_select(touch_pos, atom).await; self.redraw_select(atom.batch_id).await; } @@ -812,6 +817,28 @@ impl BaseEdit { } TouchStateAction::DragSelectHandle { side } => { let handle_descent = self.handle_descent.get(); + + // New code + + let rect = self.rect.get(); + let is_touch_hover = rect.contains(touch_pos); + + let sel_sender = self.sel_sender.lock().clone().unwrap(); + // Mouse is outside rect? + // If so we gotta scroll it while selecting. + if !is_touch_hover { + // This process will begin selecting text and applying scroll too. + sel_sender.send(Some(touch_pos)).await.unwrap(); + } else { + // Stop any existing select/scroll process + sel_sender.send(None).await.unwrap(); + // Mouse is inside so just select the text once and be done. + self.handle_select(touch_pos).await; + } + + // Old code + + /* self.abs_to_local(&mut touch_pos); let editor = self.lock_editor().await; @@ -852,6 +879,7 @@ impl BaseEdit { drop(editor); self.redraw_select(atom.batch_id).await; + */ } TouchStateAction::ScrollVert { start_pos, scroll_start } => { let travel_dist = self.behave.scroll_ctrl().travel(*start_pos, touch_pos); @@ -861,6 +889,7 @@ impl BaseEdit { return true } self.scroll.store(scroll, Ordering::Release); + let atom = &mut self.render_api.make_guard(gfxtag!("BaseEdit::handle_touch_move")); self.redraw_scroll(atom.batch_id).await; } TouchStateAction::SetCursorPos => { @@ -885,6 +914,10 @@ impl BaseEdit { _ => {} } + // Stop any selection scrolling + let scroll_sender = self.sel_sender.lock().clone().unwrap(); + scroll_sender.send(None).await.unwrap(); + self.node().trigger("focus_request", vec![]).await.unwrap(); true