summaryrefslogtreecommitdiff
path: root/src/input_handler.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-07-28 09:51:49 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-07-28 09:51:49 +0100
commitd28e5031505774e64d33cd3f231a8383e01fcab9 (patch)
tree60ccde00fcef069bd4c8dd0807f09da2761b08c9 /src/input_handler.cc
parenta7005ec74be9eef4595031bfe9191cc8bd5a08e3 (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.cc57
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);
+}
+
}