gridview: Add a filler tile for empty space
authorBenjamin Otte <otte@redhat.com>
Sat, 4 Mar 2023 02:32:12 +0000 (03:32 +0100)
committerBenjamin Otte <otte.benjamin@googlemail.com>
Sun, 5 Mar 2023 15:23:20 +0000 (15:23 +0000)
That stupid space in the bottom right when n_items isn't a multiple of
n_columns needs its own tile, or we'll get errors about not finding a
tile.

So make one.

gtk/gtkgridview.c
gtk/gtklistitemmanager.c
gtk/gtklistitemmanagerprivate.h

index 35a634d119d529dbc7e91311116055d41d910e7e..a0eb1acb06930bc604c0de385c35a08456be2af7 100644 (file)
@@ -737,6 +737,21 @@ gtk_grid_view_size_allocate (GtkWidget *widget,
           i = 0;
         }
     }
+  /* Add a filler tile for empty space in the bottom right */
+  if (i < self->n_columns)
+    {
+      GtkListTile *filler;
+      tile = gtk_list_item_manager_get_last (self->item_manager);
+      filler = gtk_list_tile_split (self->item_manager, tile, tile->n_items);
+      gtk_list_tile_set_area_position (self->item_manager,
+                                       filler,
+                                       ceil (self->column_width * i),
+                                       y);
+      gtk_list_tile_set_area_size (self->item_manager,
+                                   filler,
+                                   ceil (self->column_width * self->n_columns) - filler->area.x,
+                                   tile->area.height);
+    }
 
   /* step 4: allocate the rest */
   gtk_list_base_allocate (GTK_LIST_BASE (self));
index 2b7ddaa9f1f95cdbc67079b14f871eba611a5b69..b34e6aa4a7b08558203be3ade692209eee31987b 100644 (file)
@@ -184,6 +184,12 @@ gtk_list_item_manager_get_first (GtkListItemManager *self)
   return gtk_rb_tree_get_first (self->items);
 }
 
+gpointer
+gtk_list_item_manager_get_last (GtkListItemManager *self)
+{
+  return gtk_rb_tree_get_last (self->items);
+}
+
 gpointer
 gtk_list_item_manager_get_root (GtkListItemManager *self)
 {
index 6dcbfc21ce2d2699797006f0801dd0a6b7d7eb2d..eb10303618cd2ab2e8ac638fd4d7b64bd8b04a1d 100644 (file)
@@ -71,6 +71,7 @@ void                    gtk_list_item_manager_get_tile_bounds   (GtkListItemMana
                                                                  GdkRectangle           *out_bounds);
 gpointer                gtk_list_item_manager_get_root          (GtkListItemManager     *self);
 gpointer                gtk_list_item_manager_get_first         (GtkListItemManager     *self);
+gpointer                gtk_list_item_manager_get_last          (GtkListItemManager     *self);
 gpointer                gtk_list_item_manager_get_nth           (GtkListItemManager     *self,
                                                                  guint                   position,
                                                                  guint                  *offset);