diff --git a/src/text_editor/commands.cpp b/src/text_editor/commands.cpp index 3e2b95b..8fe572e 100644 --- a/src/text_editor/commands.cpp +++ b/src/text_editor/commands.cpp @@ -203,6 +203,9 @@ bool GlobalCommand(Event event) { Assert(DocumentSelected == NULL); ScrollbarSelected = NULL; } else if (ScrollbarSelected) { + // :ScrollbarImprovement + // @todo: it generally works ok but it moves the scrollbar a bit on click + // when mouse is not even moving Assert(DocumentSelected == NULL); Window *window = ScrollbarSelected; View *view = GetView(window->active_view); @@ -227,7 +230,18 @@ bool GlobalCommand(Event event) { View *view = GetView(window->active_view); Buffer *buffer = GetBuffer(view->active_buffer); - Vec2I mouse = MouseVec2I(); + Vec2I mouse = MouseVec2I(); + // Special case for full-screen where we can have document + // aligned with monitor screen in which case mouse cursor cannot + // be smaller then 0 which means we cannot scroll + if (mouse.y == 0 && window->document_rect.min.y == 0) { + float x, y; + SDL_GetGlobalMouseState(&x, &y); + if (y == 0) { + mouse.y = -10; + } + } + Int p = ScreenSpaceToBufferPos(window, view, buffer, mouse); Caret &caret = view->carets[0]; @@ -310,6 +324,7 @@ bool GlobalCommand(Event event) { } // Figure out scrollbar click + // :ScrollbarImprovement // @todo: it generally works ok but it moves the scrollbar a bit on click // when mouse is not even moving For(order) { diff --git a/src/text_editor/commands_window.cpp b/src/text_editor/commands_window.cpp index e6db836..8bc50ee 100644 --- a/src/text_editor/commands_window.cpp +++ b/src/text_editor/commands_window.cpp @@ -828,6 +828,12 @@ void WindowCommand(Event event, Window *window, View *view) { Assert(view->underline_count <= 2); } } + + if (Mouse(MIDDLE)) { + Vec2I mouse = MouseVec2I(); + Int p = ScreenSpaceToBufferPos(window, view, buffer, mouse); + Insert(&view->carets, MakeCaret(p, p), 0); + } } void UpdateScroll(Window *window, bool update_caret_scrolling) {