From: Benjamin Otte Date: Fri, 7 Apr 2023 18:49:06 +0000 (+0200) Subject: listitemmanager: Augment header/footer info X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~287^2~17 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8bf649826584d5f94ab35f186d3bca327536295a;p=gtk4.git listitemmanager: Augment header/footer info --- 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; };