Jelajahi Sumber

app: fix motion_cv reset and adjust, edit-mode icon touch areas, caret focus fix desktop

media 3 minggu lalu
induk
melakukan
c79f5800af

+ 2 - 2
bin/app/src/prop/mod.rs

@@ -33,8 +33,8 @@ mod guard;
 pub use guard::{BatchGuardId, BatchGuardPtr, PropertyAtomicGuard};
 mod wrap;
 pub use wrap::{
-    PropertyBool, PropertyColor, PropertyDimension, PropertyFloat32, PropertyRect, PropertyStr,
-    PropertyUint32, PropertyEnum
+    PropertyBool, PropertyColor, PropertyDimension, PropertyEnum, PropertyFloat32, PropertyRect,
+    PropertyStr, PropertyUint32,
 };
 
 #[derive(Debug, Copy, Clone, PartialEq, SerialEncodable, SerialDecodable)]

+ 2 - 2
bin/app/src/prop/wrap.rs

@@ -17,10 +17,10 @@
  */
 
 use crate::{
-    error::{Error, Result}, expr::{SExprMachine, SExprVal}, gfx::{Dimension, Rectangle}, prop::PropertyType, scene::SceneNode as SceneNode3
+    error::{Error, Result}, expr::{SExprMachine, SExprVal}, gfx::{Dimension, Rectangle}, scene::SceneNode as SceneNode3
 };
 
-use super::{PropertyAtomicGuard, PropertyPtr, Role};
+use super::{PropertyAtomicGuard, PropertyPtr, PropertyType, Role};
 
 #[derive(Clone)]
 pub struct PropertyBool {

+ 3 - 0
bin/app/src/ui/edit/mod.rs

@@ -1813,6 +1813,9 @@ impl UIObject for BaseEdit {
         } else {
             d!("BaseEdit focused");
             self.is_focused.set(atom, true);
+
+            let node = self.node();
+            node.trigger("focus_request", vec![]).await.unwrap();
         }
 
         // Move mouse pos within this widget

+ 10 - 12
bin/app/src/ui/menu/mod.rs

@@ -58,6 +58,7 @@ const MENU_ICON_OFFSET: f32 = 55.;
 const MENU_ICON_OFFSET: f32 = 24.;
 
 macro_rules! d { ($($arg:tt)*) => { debug!(target: "ui::menu", $($arg)*); } }
+macro_rules! t { ($($arg:tt)*) => { trace!(target: "ui::menu", $($arg)*); } }
 
 #[derive(Clone, Copy, PartialEq, Eq)]
 enum ItemStatus {
@@ -300,9 +301,8 @@ impl Menu {
 
             if is_edit_mode {
                 let font_size = self.font_size.get();
-                let handle_padding = self.handle_padding.get();
-                let x_half_size = font_size * 0.7;
-                let x_center = handle_padding / 2.;
+                let x_half_size = font_size * 0.85;
+                let x_center = MENU_ICON_OFFSET + font_size * 0.4;
 
                 if let Some(item_idx) = self.get_selected_item_index(pos.y) {
                     let item_name = self.items.get_str(item_idx).unwrap();
@@ -536,6 +536,7 @@ impl Menu {
 
         loop {
             self.motion_cv.wait().await;
+            self.motion_cv.reset();
 
             let mut speed = self.speed.load(Ordering::Relaxed);
             if speed.abs() < EPSILON {
@@ -715,7 +716,8 @@ impl UIObject for Menu {
             loop {
                 cv.wait().await;
                 let Some(self_) = me2.upgrade() else {
-                    panic!("Self destroyed before motion_task stopped");
+                    t!("Menu destroyed before motion_task stopped");
+                    break;
                 };
                 self_.handle_movement().await;
                 cv.reset();
@@ -795,10 +797,8 @@ impl UIObject for Menu {
 
         if is_edit_mode {
             let font_size = self.font_size.get();
-            let handle_padding = self.handle_padding.get();
-            let hammy_half_size = font_size * 0.7;
-            let hammy_center = rect.w - handle_padding / 2.;
-
+            let hammy_half_size = font_size * 1.4;
+            let hammy_center = rect.w - MENU_ICON_OFFSET - font_size * 0.56;
             let hammy_min = hammy_center - hammy_half_size;
             let hammy_max = hammy_center + hammy_half_size;
 
@@ -949,10 +949,8 @@ impl UIObject for Menu {
 
                 if is_edit_mode {
                     let font_size = self.font_size.get();
-                    let handle_padding = self.handle_padding.get();
-                    let hammy_half_size = font_size * 0.7;
-                    let hammy_center = rect.w - handle_padding / 2.;
-
+                    let hammy_half_size = font_size * 2.0;
+                    let hammy_center = rect.w - MENU_ICON_OFFSET - font_size * 0.56;
                     let hammy_min = hammy_center - hammy_half_size;
                     let hammy_max = hammy_center + hammy_half_size;
 

+ 3 - 2
bin/app/src/ui/text.rs

@@ -24,8 +24,8 @@ use tracing::instrument;
 
 use crate::{
     ExecutorPtr, gfx::{DrawCall, DrawInstruction, Rectangle, RenderApi, Renderer, gfxtag}, mesh::{Color, MeshBuilder}, prop::{
-        BatchGuardPtr, PropertyAtomicGuard, PropertyBool, PropertyColor, PropertyFloat32,
-        PropertyRect, PropertyStr, PropertyUint32, PropertyEnum, Role,
+        BatchGuardPtr, PropertyAtomicGuard, PropertyBool, PropertyColor, PropertyEnum, PropertyFloat32,
+        PropertyRect, PropertyStr, PropertyUint32, Role,
     }, scene::{Pimpl, SceneNodeWeak}, text, util::i18n::I18nBabelFish
 };
 
@@ -199,6 +199,7 @@ impl UIObject for Text {
         on_modify.when_change(self.rect.prop(), Self::redraw);
         on_modify.when_change(self.z_index.prop(), Self::redraw);
         on_modify.when_change(self.text.prop(), Self::redraw);
+        on_modify.when_change(self.text_align.prop(), Self::redraw);
         on_modify.when_change(self.font_size.prop(), Self::redraw);
         on_modify.when_change(self.text_color.prop(), Self::redraw);
         on_modify.when_change(self.debug.prop(), Self::redraw);