From dea5057fbd7e9e2f0199ec6df6e5716635f0e5ee Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sat, 29 Aug 2015 20:19:51 +0100 Subject: [PATCH] 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 file 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