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