Browse Source

LibGUI: Fix off-by-one in ScrollableWidget

This was most notable in the widgets TextBox and TextEditor (and
therefore also ComboBox and ColorInput), because there the cursor
regularly landed just one pixel outside the visible region when
going to the right.
Ben Wiederhake 5 years ago
parent
commit
b6bea3d25b
1 changed files with 8 additions and 6 deletions
  1. 8 6
      Libraries/LibGUI/ScrollableWidget.cpp

+ 8 - 6
Libraries/LibGUI/ScrollableWidget.cpp

@@ -171,16 +171,18 @@ void ScrollableWidget::scroll_into_view(const Gfx::Rect& rect, bool scroll_horiz
         return;
         return;
 
 
     if (scroll_vertically) {
     if (scroll_vertically) {
-        if (rect.top() < visible_content_rect.top())
+        if (rect.top() < visible_content_rect.top()) {
             m_vertical_scrollbar->set_value(rect.top());
             m_vertical_scrollbar->set_value(rect.top());
-        else if (rect.bottom() > visible_content_rect.bottom())
-            m_vertical_scrollbar->set_value(rect.bottom() - visible_content_rect.height());
+        } else if (rect.bottom() > visible_content_rect.bottom()) {
+            m_vertical_scrollbar->set_value(rect.bottom() - visible_content_rect.height() + 1);
+        }
     }
     }
     if (scroll_horizontally) {
     if (scroll_horizontally) {
-        if (rect.left() < visible_content_rect.left())
+        if (rect.left() < visible_content_rect.left()) {
             m_horizontal_scrollbar->set_value(rect.left());
             m_horizontal_scrollbar->set_value(rect.left());
-        else if (rect.right() > visible_content_rect.right())
-            m_horizontal_scrollbar->set_value(rect.right() - visible_content_rect.width());
+        } else if (rect.right() > visible_content_rect.right()) {
+            m_horizontal_scrollbar->set_value(rect.right() - visible_content_rect.width() + 1);
+        }
     }
     }
 }
 }