瀏覽代碼

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 年之前
父節點
當前提交
b6bea3d25b
共有 1 個文件被更改,包括 8 次插入6 次删除
  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;
 
     if (scroll_vertically) {
-        if (rect.top() < visible_content_rect.top())
+        if (rect.top() < visible_content_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 (rect.left() < visible_content_rect.left())
+        if (rect.left() < visible_content_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);
+        }
     }
 }