diff options
author | Benjamin Otte <otte@redhat.com> | 2023-04-07 20:49:06 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-04-11 15:59:43 +0200 |
commit | 5f6796b83f6aff523b0448d4b923c3e6063db083 (patch) | |
tree | 9e0b7bd627fe822fb6b65ea922fcd8d405645ef3 | |
parent | 77f3cd00a93a14fdce07d3ab1919c68be3611d3c (diff) | |
download | gtk+-5f6796b83f6aff523b0448d4b923c3e6063db083.tar.gz |
listitemmanager: Augment header/footer info
-rw-r--r-- | gtk/gtklistitemmanager.c | 27 | ||||
-rw-r--r-- | gtk/gtklistitemmanagerprivate.h | 4 |
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; }; |