summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2015-08-29 20:19:51 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2015-08-29 20:38:29 +0100
commitdea5057fbd7e9e2f0199ec6df6e5716635f0e5ee (patch)
tree6cbd2576769a17e4826ed4e5ed919e29f4862eee
parented80a4bebb4c271e0f3f22208b38010d9ba4a812 (diff)
downloadclutter-dea5057fbd7e9e2f0199ec6df6e5716635f0e5ee.tar.gz
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.
-rw-r--r--clutter/clutter-grid-layout.c69
1 files changed, 41 insertions, 28 deletions
diff --git a/clutter/clutter-grid-layout.c b/clutter/clutter-grid-layout.c
index e46215388..ad0320368 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