[clutter] grid: Use the orientation of the request



commit dea5057fbd7e9e2f0199ec6df6e5716635f0e5ee
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Sat Aug 29 20:19:51 2015 +0100

    grid: Use the orientation of the request
    
    We use the orientation of the grid to get the preferred size of the
    layout, but we should be using the orientation of the request instead.
    The preferred width has an orizontal orientation, and the preferred
    height has a vertical orientation.
    
    This allows us to refactor the get_preferred_* implementation into a
    separate function.

 clutter/clutter-grid-layout.c |   69 ++++++++++++++++++++++++----------------
 1 files changed, 41 insertions(+), 28 deletions(-)
---
diff --git a/clutter/clutter-grid-layout.c b/clutter/clutter-grid-layout.c
index e462153..ad03203 100644
--- a/clutter/clutter-grid-layout.c
+++ b/clutter/clutter-grid-layout.c
@@ -1289,59 +1289,72 @@ clutter_grid_layout_set_container (ClutterLayoutManager *self,
 }
 
 static void
-clutter_grid_layout_get_preferred_width (ClutterLayoutManager *self,
+clutter_grid_layout_get_size_for_size (ClutterGridLayout  *self,
+                                       ClutterOrientation  orientation,
+                                       float               size,
+                                       float              *minimum,
+                                       float              *natural)
+{
+  ClutterGridRequest request;
+  ClutterGridLines *lines;
+  float min_size, nat_size;
+
+  request.grid = self;
+  clutter_grid_request_update_attach (&request);
+  clutter_grid_request_count_lines (&request);
+
+  lines = &request.lines[0];
+  lines->lines = g_newa (ClutterGridLine, lines->max - lines->min);
+  memset (lines->lines, 0, (lines->max - lines->min) * sizeof (ClutterGridLine));
+
+  lines = &request.lines[1];
+  lines->lines = g_newa (ClutterGridLine, lines->max - lines->min);
+  memset (lines->lines, 0, (lines->max - lines->min) * sizeof (ClutterGridLine));
+
+  clutter_grid_request_run (&request, 1 - orientation, FALSE);
+  clutter_grid_request_sum (&request, 1 - orientation, &min_size, &nat_size);
+  clutter_grid_request_allocate (&request, 1 - orientation, MAX (size, nat_size));
+
+  clutter_grid_request_run (&request, orientation, TRUE);
+  clutter_grid_request_sum (&request, orientation, minimum, natural);
+}
+
+static void
+clutter_grid_layout_get_preferred_width (ClutterLayoutManager *manager,
                                          ClutterContainer     *container,
                                          gfloat                for_height,
                                          gfloat               *min_width_p,
                                          gfloat               *nat_width_p)
 {
-  ClutterGridLayoutPrivate *priv = CLUTTER_GRID_LAYOUT (self)->priv;
-  ClutterGridRequest request;
-  ClutterGridLines *lines;
+  ClutterGridLayout *self = CLUTTER_GRID_LAYOUT (manager);
 
   if (min_width_p)
     *min_width_p = 0.0f;
   if (nat_width_p)
     *nat_width_p = 0.0f;
 
-  request.grid = CLUTTER_GRID_LAYOUT (self);
-  clutter_grid_request_update_attach (&request);
-  clutter_grid_request_count_lines (&request);
-  lines = &request.lines[priv->orientation];
-  lines->lines = g_newa (ClutterGridLine, lines->max - lines->min);
-  memset (lines->lines, 0, (lines->max - lines->min) * sizeof (ClutterGridLine));
-
-  clutter_grid_request_run (&request, priv->orientation, FALSE);
-  clutter_grid_request_sum (&request, priv->orientation,
-                            min_width_p, nat_width_p);
+  clutter_grid_layout_get_size_for_size (self, CLUTTER_ORIENTATION_HORIZONTAL,
+                                         for_height,
+                                         min_width_p, nat_width_p);
 }
 
 static void
-clutter_grid_layout_get_preferred_height (ClutterLayoutManager *self,
+clutter_grid_layout_get_preferred_height (ClutterLayoutManager *manager,
                                           ClutterContainer     *container,
                                           gfloat                for_width,
                                           gfloat               *min_height_p,
                                           gfloat               *nat_height_p)
 {
-  ClutterGridLayoutPrivate *priv = CLUTTER_GRID_LAYOUT (self)->priv;
-  ClutterGridRequest request;
-  ClutterGridLines *lines;
+  ClutterGridLayout *self = CLUTTER_GRID_LAYOUT (manager);
 
   if (min_height_p)
     *min_height_p = 0.0f;
   if (nat_height_p)
     *nat_height_p = 0.0f;
 
-  request.grid = CLUTTER_GRID_LAYOUT (self);
-  clutter_grid_request_update_attach (&request);
-  clutter_grid_request_count_lines (&request);
-  lines = &request.lines[priv->orientation];
-  lines->lines = g_newa (ClutterGridLine, lines->max - lines->min);
-  memset (lines->lines, 0, (lines->max - lines->min) * sizeof (ClutterGridLine));
-
-  clutter_grid_request_run (&request, priv->orientation, FALSE);
-  clutter_grid_request_sum (&request, priv->orientation,
-                            min_height_p, nat_height_p);
+  clutter_grid_layout_get_size_for_size (self, CLUTTER_ORIENTATION_VERTICAL,
+                                         for_width,
+                                         min_height_p, nat_height_p);
 }
 
 static void


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