summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-04-07 20:49:06 +0200
committerBenjamin Otte <otte@redhat.com>2023-04-11 15:59:43 +0200
commit5f6796b83f6aff523b0448d4b923c3e6063db083 (patch)
tree9e0b7bd627fe822fb6b65ea922fcd8d405645ef3
parent77f3cd00a93a14fdce07d3ab1919c68be3611d3c (diff)
downloadgtk+-5f6796b83f6aff523b0448d4b923c3e6063db083.tar.gz
listitemmanager: Augment header/footer info
-rw-r--r--gtk/gtklistitemmanager.c27
-rw-r--r--gtk/gtklistitemmanagerprivate.h4
2 files changed, 31 insertions, 0 deletions
diff --git a/gtk/gtklistitemmanager.c b/gtk/gtklistitemmanager.c
index 10ca102e27..0f1a9c0995 100644
--- a/gtk/gtklistitemmanager.c
+++ b/gtk/gtklistitemmanager.c
@@ -101,11 +101,36 @@ gtk_list_item_manager_augment_node (GtkRbTree *tree,
aug->n_items = tile->n_items;
aug->area = tile->area;
+ switch (tile->type)
+ {
+ case GTK_LIST_TILE_HEADER:
+ case GTK_LIST_TILE_UNMATCHED_HEADER:
+ aug->has_header = TRUE;
+ aug->has_footer = FALSE;
+ break;
+ case GTK_LIST_TILE_FOOTER:
+ case GTK_LIST_TILE_UNMATCHED_FOOTER:
+ aug->has_header = FALSE;
+ aug->has_footer = TRUE;
+ break;
+ case GTK_LIST_TILE_ITEM:
+ case GTK_LIST_TILE_FILLER:
+ case GTK_LIST_TILE_REMOVED:
+ aug->has_header = FALSE;
+ aug->has_footer = FALSE;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
if (left)
{
GtkListTileAugment *left_aug = gtk_rb_tree_get_augment (tree, left);
aug->n_items += left_aug->n_items;
+ aug->has_header |= left_aug->has_header;
+ aug->has_footer |= left_aug->has_footer;
potentially_empty_rectangle_union (&aug->area, &left_aug->area);
}
@@ -114,6 +139,8 @@ gtk_list_item_manager_augment_node (GtkRbTree *tree,
GtkListTileAugment *right_aug = gtk_rb_tree_get_augment (tree, right);
aug->n_items += right_aug->n_items;
+ aug->has_header |= right_aug->has_header;
+ aug->has_footer |= right_aug->has_footer;
potentially_empty_rectangle_union (&aug->area, &right_aug->area);
}
}
diff --git a/gtk/gtklistitemmanagerprivate.h b/gtk/gtklistitemmanagerprivate.h
index 9efaf0461b..5094ad4e99 100644
--- a/gtk/gtklistitemmanagerprivate.h
+++ b/gtk/gtklistitemmanagerprivate.h
@@ -66,6 +66,10 @@ struct _GtkListTile
struct _GtkListTileAugment
{
guint n_items;
+
+ guint has_header :1;
+ guint has_footer :1;
+
/* union of all areas of tile and children */
cairo_rectangle_int_t area;
};