Pārlūkot izejas kodu

LibGUI: Allow falling back to default paint behavior in delegate

This patch adds a method that can optionally be implemented to allow
a TableCellPaintingDelegate to fall back to the default painting in a
View.
networkException 3 gadi atpakaļ
vecāks
revīzija
b67d4ab52f

+ 2 - 0
Userland/Libraries/LibGUI/AbstractTableView.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2022, Jakob-Niklas See <git@nwex.de>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -14,6 +15,7 @@ class TableCellPaintingDelegate {
 public:
     virtual ~TableCellPaintingDelegate() { }
 
+    virtual bool should_paint(ModelIndex const&) { return true; }
     virtual void paint(Painter&, const Gfx::IntRect&, const Gfx::Palette&, const ModelIndex&) = 0;
 };
 

+ 2 - 1
Userland/Libraries/LibGUI/TableView.cpp

@@ -98,7 +98,8 @@ void TableView::paint_event(PaintEvent& event)
                 painter.fill_rect(cell_rect_for_fill, key_column_background_color);
             auto cell_index = model()->index(row_index, column_index);
 
-            if (auto* delegate = column_painting_delegate(column_index)) {
+            auto* delegate = column_painting_delegate(column_index);
+            if (delegate && delegate->should_paint(cell_index)) {
                 delegate->paint(painter, cell_rect, palette(), cell_index);
             } else {
                 auto data = cell_index.data();

+ 2 - 1
Userland/Libraries/LibGUI/TreeView.cpp

@@ -291,7 +291,8 @@ void TreeView::paint_event(PaintEvent& event)
                 Gfx::IntRect cell_rect(horizontal_padding() + x_offset, rect.y(), column_width, row_height());
                 auto cell_index = model.index(index.row(), column_index, index.parent());
 
-                if (auto* delegate = column_painting_delegate(column_index)) {
+                auto* delegate = column_painting_delegate(column_index);
+                if (delegate && delegate->should_paint(cell_index)) {
                     delegate->paint(painter, cell_rect, palette(), cell_index);
                 } else {
                     auto data = cell_index.data();