diff options
| author | 2024-02-03 14:28:54 +0100 | |
|---|---|---|
| committer | 2024-02-03 14:28:54 +0100 | |
| commit | 0b2c9db22868c43e4dd160b66abddce0846991b1 (patch) | |
| tree | 35b55485fe12369abee97dbf63c9d21e67a36fc6 /widget | |
| parent | 358f004fa01d98af8c3ec80ed78d550f6a5f6df0 (diff) | |
| parent | 719798441db735149018e2eab47f377692c29196 (diff) | |
| download | iced-0b2c9db22868c43e4dd160b66abddce0846991b1.tar.gz iced-0b2c9db22868c43e4dd160b66abddce0846991b1.tar.bz2 iced-0b2c9db22868c43e4dd160b66abddce0846991b1.zip | |
Merge pull request #2140 from blazra/master
Improve `TextEditor` slow scrolling behavior with touchpads
Diffstat (limited to '')
| -rw-r--r-- | widget/src/text_editor.rs | 34 | 
1 files changed, 20 insertions, 14 deletions
| diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index 354abceb..8d431991 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -289,6 +289,7 @@ struct State<Highlighter: text::Highlighter> {      is_focused: bool,      last_click: Option<mouse::Click>,      drag_click: Option<mouse::click::Kind>, +    partial_scroll: f32,      highlighter: RefCell<Highlighter>,      highlighter_settings: Highlighter::Settings,      highlighter_format_address: usize, @@ -310,6 +311,7 @@ where              is_focused: false,              last_click: None,              drag_click: None, +            partial_scroll: 0.0,              highlighter: RefCell::new(Highlighter::new(                  &self.highlighter_settings,              )), @@ -404,6 +406,14 @@ where                  shell.publish(on_edit(action));              } +            Update::Scroll(lines) => { +                let lines = lines + state.partial_scroll; +                state.partial_scroll = lines.fract(); + +                shell.publish(on_edit(Action::Scroll { +                    lines: lines as i32, +                })); +            }              Update::Unfocus => {                  state.is_focused = false;                  state.drag_click = None; @@ -577,6 +587,7 @@ where  enum Update {      Click(mouse::Click), +    Scroll(f32),      Unfocus,      Release,      Action(Action), @@ -630,21 +641,16 @@ impl Update {                  mouse::Event::WheelScrolled { delta }                      if cursor.is_over(bounds) =>                  { -                    action(Action::Scroll { -                        lines: match delta { -                            mouse::ScrollDelta::Lines { y, .. } => { -                                if y.abs() > 0.0 { -                                    (y.signum() * -(y.abs() * 4.0).max(1.0)) -                                        as i32 -                                } else { -                                    0 -                                } -                            } -                            mouse::ScrollDelta::Pixels { y, .. } => { -                                (-y / 4.0) as i32 +                    Some(Update::Scroll(match delta { +                        mouse::ScrollDelta::Lines { y, .. } => { +                            if y.abs() > 0.0 { +                                y.signum() * -(y.abs() * 4.0).max(1.0) +                            } else { +                                0.0                              } -                        }, -                    }) +                        } +                        mouse::ScrollDelta::Pixels { y, .. } => -y / 4.0, +                    }))                  }                  _ => None,              }, | 
