diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-07-28 09:51:49 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-07-28 09:51:49 +0100 |
| commit | d28e5031505774e64d33cd3f231a8383e01fcab9 (patch) | |
| tree | 60ccde00fcef069bd4c8dd0807f09da2761b08c9 /src/input_handler.cc | |
| parent | a7005ec74be9eef4595031bfe9191cc8bd5a08e3 (diff) | |
Use the same logic for mouse wheel and (half) page up/down
Fixes #749
Diffstat (limited to 'src/input_handler.cc')
| -rw-r--r-- | src/input_handler.cc | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc index 772be7d9..5e246b5a 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -95,12 +95,12 @@ struct MouseHandler case Key::Modifiers::MouseWheelDown: m_dragging = false; - wheel(context, 3); + scroll_window(context, 3); return true; case Key::Modifiers::MouseWheelUp: m_dragging = false; - wheel(context, -3); + scroll_window(context, -3); return true; default: return false; @@ -108,32 +108,6 @@ struct MouseHandler } private: - void wheel(Context& context, LineCount offset) - { - Window& window = context.window(); - Buffer& buffer = context.buffer(); - - CharCoord win_pos = window.position(); - CharCoord win_dim = window.dimensions(); - - const CharCoord max_offset{(win_dim.line - 1)/2, (win_dim.column - 1)/2}; - const CharCoord scrolloff = - std::min(context.options()["scrolloff"].get<CharCoord>(), max_offset); - - const LineCount line_count = buffer.line_count(); - win_pos.line = clamp(win_pos.line + offset, 0_line, line_count-1); - - SelectionList& selections = context.selections(); - const ByteCoord cursor = selections.main().cursor(); - - auto clamp_line = [&](LineCount line) { return clamp(line, 0_line, line_count-1); }; - auto min_coord = buffer.offset_coord(clamp_line(win_pos.line + scrolloff.line), win_pos.column); - auto max_coord = buffer.offset_coord(clamp_line(win_pos.line + win_dim.line - 1 - scrolloff.line), win_pos.column); - - selections = SelectionList{buffer, clamp(cursor, min_coord, max_coord)}; - - window.set_position(win_pos); - } bool m_dragging = false; ByteCoord m_anchor; @@ -1459,4 +1433,31 @@ void hide_auto_info_ifn(const Context& context, bool hide) context.client().info_hide(); } +void scroll_window(Context& context, LineCount offset) +{ + Window& window = context.window(); + Buffer& buffer = context.buffer(); + + CharCoord win_pos = window.position(); + CharCoord win_dim = window.dimensions(); + + const CharCoord max_offset{(win_dim.line - 1)/2, (win_dim.column - 1)/2}; + const CharCoord scrolloff = + std::min(context.options()["scrolloff"].get<CharCoord>(), max_offset); + + const LineCount line_count = buffer.line_count(); + win_pos.line = clamp(win_pos.line + offset, 0_line, line_count-1); + + SelectionList& selections = context.selections(); + const ByteCoord cursor = selections.main().cursor(); + + auto clamp_line = [&](LineCount line) { return clamp(line, 0_line, line_count-1); }; + auto min_coord = buffer.offset_coord(clamp_line(win_pos.line + scrolloff.line), win_pos.column); + auto max_coord = buffer.offset_coord(clamp_line(win_pos.line + win_dim.line - 1 - scrolloff.line), win_pos.column); + + selections = SelectionList{buffer, clamp(cursor, min_coord, max_coord)}; + + window.set_position(win_pos); +} + } |
