summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorTom <tomut@yahoo.com>2020-10-20 10:21:00 -0600
committerAndreas Kling <kling@serenityos.org>2020-10-22 15:23:45 +0200
commit307f0bc7789b4ead4f1fe1685f94409ddf2ff8f6 (patch)
treedc9c22b68b50bea196e062b32d1787fdbcc49f1c /Libraries
parenta823d2a9629491ed4c1661a940d36f2ce8184ef1 (diff)
downloadserenity-307f0bc7789b4ead4f1fe1685f94409ddf2ff8f6.zip
LibGUI: Fix scroll_into_view flipping between left/top and right/bottom
This fixes flipping between left/top and right/bottom when the rectangle to make visible doesn't fit into the visible portion each time the function is called.
Diffstat (limited to 'Libraries')
-rw-r--r--Libraries/LibGUI/AbstractView.cpp6
-rw-r--r--Libraries/LibGUI/ScrollableWidget.cpp4
2 files changed, 4 insertions, 6 deletions
diff --git a/Libraries/LibGUI/AbstractView.cpp b/Libraries/LibGUI/AbstractView.cpp
index 1b2d43e1ba..d51656ff0e 100644
--- a/Libraries/LibGUI/AbstractView.cpp
+++ b/Libraries/LibGUI/AbstractView.cpp
@@ -438,10 +438,8 @@ void AbstractView::set_cursor(ModelIndex index, SelectionUpdate selection_update
m_cursor_index = index;
- if (scroll_cursor_into_view) {
- // FIXME: We should scroll into view both vertically *and* horizontally.
- scroll_into_view(index, false, true);
- }
+ if (scroll_cursor_into_view)
+ scroll_into_view(index, true, true);
update();
}
}
diff --git a/Libraries/LibGUI/ScrollableWidget.cpp b/Libraries/LibGUI/ScrollableWidget.cpp
index 79e8fca124..60c7ab97f9 100644
--- a/Libraries/LibGUI/ScrollableWidget.cpp
+++ b/Libraries/LibGUI/ScrollableWidget.cpp
@@ -180,14 +180,14 @@ void ScrollableWidget::scroll_into_view(const Gfx::IntRect& rect, bool scroll_ho
if (scroll_vertically) {
if (rect.top() < visible_content_rect.top()) {
m_vertical_scrollbar->set_value(rect.top());
- } else if (rect.bottom() > visible_content_rect.bottom()) {
+ } else if (rect.top() > visible_content_rect.top() && 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()) {
m_horizontal_scrollbar->set_value(rect.left());
- } else if (rect.right() > visible_content_rect.right()) {
+ } else if (rect.left() > visible_content_rect.left() && rect.right() > visible_content_rect.right()) {
m_horizontal_scrollbar->set_value(rect.right() - visible_content_rect.width() + 1);
}
}