فهرست منبع

wallet/editbox: correctly apply scroll for selections

darkfi 1 سال پیش
والد
کامیت
18b5ab6231
1فایلهای تغییر یافته به همراه12 افزوده شده و 10 حذف شده
  1. 12 10
      bin/darkwallet/src/ui/editbox/mod.rs

+ 12 - 10
bin/darkwallet/src/ui/editbox/mod.rs

@@ -857,8 +857,7 @@ impl EditBox {
             editable.end_compose();
 
             let rendered = editable.render();
-            // Adjust with scroll here too
-            let x = x - rect.x;
+            let x = x - rect.x + self.scroll.get();
 
             let cpos = rendered.x_to_pos(x, font_size, window_scale, baseline);
 
@@ -1015,10 +1014,11 @@ impl EditBox {
 
             // Are we within range of either one?
             let select_descent = self.select_descent.get();
+            let scroll = self.scroll.get();
             let y = baseline + select_descent + 25.;
 
-            let p1 = Point::new(x1, y);
-            let p2 = Point::new(x2, y);
+            let p1 = Point::new(x1 - scroll, y);
+            let p2 = Point::new(x2 - scroll, y);
             debug!(target: "ui::editbox", "handle center points = ({p1:?}, {p2:?})");
 
             const TOUCH_RADIUS_SQ: f32 = 10_000.;
@@ -1075,7 +1075,9 @@ impl EditBox {
                     let window_scale = self.window_scale.get();
                     let baseline = self.baseline.get();
 
-                    let mut pos = rendered.x_to_pos(pos.x, font_size, window_scale, baseline);
+                    let pos_x = pos.x + self.scroll.get();
+
+                    let mut pos = rendered.x_to_pos(pos_x, font_size, window_scale, baseline);
                     if *side == -1 {
                         let select_other_pos = &mut select.end;
                         if pos >= *select_other_pos {
@@ -1206,7 +1208,9 @@ impl EditBox {
             let glyph_pos_iter =
                 GlyphPositionIter::new(font_size, window_scale, &rendered.glyphs, baseline);
             let last_rect = glyph_pos_iter.last().unwrap();
-            last_rect.x + last_rect.w
+            let mut rhs = last_rect.x + last_rect.w;
+            rhs += eol_nudge(font_size, &rendered.glyphs);
+            rhs
         };
 
         let rect_w = self.rect.get().w;
@@ -1494,8 +1498,7 @@ impl UIObject for EditBox {
         {
             let mut editable = self.editable.lock().unwrap();
             let rendered = editable.render();
-            // Adjust with scroll here too
-            let x = mouse_pos.x - rect.x;
+            let x = mouse_pos.x - rect.x + self.scroll.get();
 
             let cpos = rendered.x_to_pos(x, font_size, window_scale, baseline);
             let cidx = rendered.pos_to_idx(cpos);
@@ -1548,8 +1551,7 @@ impl UIObject for EditBox {
         {
             let mut editable = self.editable.lock().unwrap();
             let rendered = editable.render();
-            // Adjust with scroll here too
-            let x = mouse_pos.x - rect.x;
+            let x = mouse_pos.x - rect.x + self.scroll.get();
 
             let cpos = rendered.x_to_pos(x, font_size, window_scale, baseline);
             let cidx = rendered.pos_to_idx(cpos);