diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2015-08-29 20:19:51 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2015-08-29 20:38:29 +0100 |
commit | dea5057fbd7e9e2f0199ec6df6e5716635f0e5ee (patch) | |
tree | 6cbd2576769a17e4826ed4e5ed919e29f4862eee | |
parent | ed80a4bebb4c271e0f3f22208b38010d9ba4a812 (diff) | |
download | clutter-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.c | 69 |
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 |