[gtk/wip/otte/listview: 2120/2170] gridview: Simplify allocation code



commit 8ca90b87d17e8da48de663e9c45e36ff2d57c23c
Author: Benjamin Otte <otte redhat com>
Date:   Tue Oct 22 04:59:34 2019 +0200

    gridview: Simplify allocation code
    
    It doesn't fix the bug I'm after, but it looks a lot better.

 gtk/gtkgridview.c | 46 ++++++++++++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c
index 1800f12df5..c5c6418f73 100644
--- a/gtk/gtkgridview.c
+++ b/gtk/gtkgridview.c
@@ -1028,44 +1028,58 @@ gtk_grid_view_size_allocate (GtkWidget *widget,
   x = - gtk_grid_view_update_adjustment (self, opposite_orientation);
   y = - gtk_grid_view_update_adjustment (self, self->orientation);
 
+  /* step 5: run the size_allocate loop */
+  x = -x;
+  y = -y;
   i = 0;
   row_height = 0;
+
   for (cell = gtk_list_item_manager_get_first (self->item_manager);
        cell != NULL;
        cell = gtk_rb_tree_node_get_next (cell))
     {
       if (cell->parent.widget)
         {
-          if (i == 0)
-            {
-              y += row_height;
-              row_height = cell->size;
-            }
+          row_height += cell->size;
+
           gtk_grid_view_size_allocate_child (self,
                                              cell->parent.widget,
                                              x + ceil (self->column_width * i),
                                              y,
                                              ceil (self->column_width * (i + 1)) - ceil (self->column_width 
* i),
                                              row_height);
-          i = (i + 1) % self->n_columns;
+          i++;
+          if (i >= self->n_columns)
+            {
+              y += row_height;
+              i -= self->n_columns;
+              row_height = 0;
+            }
         }
       else
         {
           i += cell->parent.n_items;
-          if (i > self->n_columns)
+          /* skip remaining row if we didn't start one */
+          if (i > cell->parent.n_items && i >= self->n_columns)
             {
               i -= self->n_columns;
               y += row_height;
-              row_height = cell->size;
+              row_height = 0;
+            }
 
-              if (i > self->n_columns)
-                {
-                  guint unknown_rows = (i - 1) / self->n_columns;
-                  int unknown_height = unknown_rows * self->unknown_row_height;
-                  row_height -= unknown_height;
-                  y += unknown_height;
-                  i %= self->n_columns;
-                }
+          row_height += cell->size;
+
+          /* skip rows that are completely contained by this cell */
+          if (i >= self->n_columns)
+            {
+              guint unknown_rows, unknown_height;
+
+              unknown_rows = i / self->n_columns;
+              unknown_height = unknown_rows * self->unknown_row_height;
+              row_height -= unknown_height;
+              y += unknown_height;
+              i %= self->n_columns;
+              g_assert (row_height >= 0);
             }
         }
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]