diff --git a/Libraries/LibGUI/GTableView.cpp b/Libraries/LibGUI/GTableView.cpp index 635df9d110d..376cc8cc36d 100644 --- a/Libraries/LibGUI/GTableView.cpp +++ b/Libraries/LibGUI/GTableView.cpp @@ -260,10 +260,19 @@ void GTableView::paint_event(GPaintEvent& event) painter.translate(-horizontal_scrollbar().value(), -vertical_scrollbar().value()); int exposed_width = max(content_size().width(), width()); - int painted_item_index = 0; int y_offset = header_height(); - for (int row_index = 0; row_index < model()->row_count(); ++row_index) { + int first_visible_row = index_at_event_position(frame_inner_rect().top_left()).row(); + int last_visible_row = index_at_event_position(frame_inner_rect().bottom_right()).row(); + + if (first_visible_row == -1) + first_visible_row = 0; + if (last_visible_row == -1) + last_visible_row = model()->row_count() - 1; + + int painted_item_index = first_visible_row; + + for (int row_index = first_visible_row; row_index <= last_visible_row; ++row_index) { bool is_selected_row = selection().contains_row(row_index); int y = y_offset + painted_item_index * item_height();