Improve TextEditor slow scrolling behavior with touchpads.
If you scroll by only a fraction of a line, the TextEditor stores this fraction and adds it on the next scroll event.
This commit is contained in:
parent
358f004fa0
commit
79a348464e
1 changed files with 17 additions and 14 deletions
|
|
@ -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,11 @@ where
|
|||
|
||||
shell.publish(on_edit(action));
|
||||
}
|
||||
Update::Scroll(mut 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 +584,7 @@ where
|
|||
|
||||
enum Update {
|
||||
Click(mouse::Click),
|
||||
Scroll(f32),
|
||||
Unfocus,
|
||||
Release,
|
||||
Action(Action),
|
||||
|
|
@ -630,21 +638,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
|
||||
}
|
||||
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) as i32
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
mouse::ScrollDelta::Pixels { y, .. } => -y / 4.0,
|
||||
}))
|
||||
}
|
||||
_ => None,
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue