Improve scrolling
This commit is contained in:
@@ -9,9 +9,10 @@ struct View {
|
||||
Rect2I scrollbar_rect;
|
||||
Vec2I scroll;
|
||||
|
||||
bool mouse_selecting;
|
||||
bool mouse_selecting_scrollbar;
|
||||
bool mouse_selecting;
|
||||
Range selection_anchor;
|
||||
float mouse_scroller_offset;
|
||||
|
||||
Buffer *buffer;
|
||||
Array<Caret> carets;
|
||||
|
||||
@@ -340,19 +340,23 @@ void HandleKeybindings(View *_view) {
|
||||
} else if (!(mouse_in_view || view.mouse_selecting) && mouse_in_scrollbar || view.mouse_selecting_scrollbar) {
|
||||
SetMouseCursor(MOUSE_CURSOR_DEFAULT);
|
||||
|
||||
Scroller s = ComputeScrollerRect(view);
|
||||
double line_count = (double)view.buffer->line_starts.len;
|
||||
double size_y = (double)GetSize(view.scrollbar_rect).y;
|
||||
double p = _mouse.y - view.scrollbar_rect.min.y;
|
||||
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
|
||||
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
|
||||
view.mouse_scroller_offset = (float)((s.rect.min.y - p) / size_y);
|
||||
}
|
||||
view.mouse_selecting_scrollbar = true;
|
||||
} else if (!IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
|
||||
view.mouse_selecting_scrollbar = false;
|
||||
}
|
||||
|
||||
if (view.mouse_selecting_scrollbar) {
|
||||
double delta = GetMouseDelta().y;
|
||||
Scroller s = ComputeScrollerRect(view);
|
||||
double line_count = (double)view.buffer->line_starts.len;
|
||||
double size_y = (double)GetSize(view.scrollbar_rect).y;
|
||||
double v = delta / size_y;
|
||||
view.scroll.y += (Int)(v * line_count * view.line_spacing);
|
||||
double v = p / size_y;
|
||||
v = v + (view.mouse_scroller_offset);
|
||||
view.scroll.y = (Int)(v * line_count * view.line_spacing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user