Top | ![]() |
![]() |
![]() |
![]() |
gfloat | column-spacing | Read / Write |
gboolean | homogeneous | Read / Write |
gfloat | max-column-width | Read / Write |
gfloat | max-row-height | Read / Write |
gfloat | min-column-width | Read / Write |
gfloat | min-row-height | Read / Write |
ClutterFlowOrientation | orientation | Read / Write / Construct |
gfloat | row-spacing | Read / Write |
gboolean | snap-to-grid | Read / Write |
ClutterFlowLayout is a layout manager which implements the following policy:
the preferred natural size depends on the value of the “orientation” property; the layout will try to maintain all its children on a single row or column;
if either the width or the height allocated are smaller than the preferred ones, the layout will wrap; in this case, the preferred height or width, respectively, will take into account the amount of columns and rows;
each line (either column or row) in reflowing will
have the size of the biggest cell on that line; if the
“homogeneous” property is set to FALSE
the actor
will be allocated within that area, and if set to TRUE
instead the
actor will be given exactly that area;
the size of the columns or rows can be controlled for both minimum and maximum; the spacing can also be controlled in both columns and rows.
Figure 5. Horizontal flow layout
The image shows a ClutterFlowLayout with the
“orientation” propert set to
CLUTTER_FLOW_HORIZONTAL
.
#include <stdlib.h> #include <gmodule.h> #include <cairo.h> #include <clutter/clutter.h> #define N_RECTS 20 static gboolean is_homogeneous = FALSE; static gboolean vertical = FALSE; static gboolean random_size = FALSE; static gboolean fixed_size = FALSE; static gboolean snap_to_grid = TRUE; static gint n_rects = N_RECTS; static gint x_spacing = 0; static gint y_spacing = 0; static GOptionEntry entries[] = { { "random-size", 'r', 0, G_OPTION_ARG_NONE, &random_size, "Randomly size the rectangles", NULL }, { "num-rects", 'n', 0, G_OPTION_ARG_INT, &n_rects, "Number of rectangles", "RECTS" }, { "vertical", 'v', 0, G_OPTION_ARG_NONE, &vertical, "Set vertical orientation", NULL }, { "homogeneous", 'h', 0, G_OPTION_ARG_NONE, &is_homogeneous, "Whether the layout should be homogeneous", NULL }, { "x-spacing", 0, 0, G_OPTION_ARG_INT, &x_spacing, "Horizontal spacing between elements", "PX" }, { "y-spacing", 0, 0, G_OPTION_ARG_INT, &y_spacing, "Vertical spacing between elements", "PX" }, { "fixed-size", 'f', 0, G_OPTION_ARG_NONE, &fixed_size, "Fix the layout size", NULL }, { "no-snap-to-grid", 's', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &snap_to_grid, "Don't snap elements to grid", NULL }, { NULL } }; int main (int argc, char *argv[]) { ClutterActor *stage, *box; ClutterLayoutManager *layout; GError *error; gint i; error = NULL; if (clutter_init_with_args (&argc, &argv, NULL, entries, NULL, &error) != CLUTTER_INIT_SUCCESS) { g_print ("Unable to run flow-layout: %s", error->message); g_error_free (error); return EXIT_FAILURE; } stage = clutter_stage_new (); clutter_actor_set_background_color (stage, CLUTTER_COLOR_LightSkyBlue); clutter_stage_set_title (CLUTTER_STAGE (stage), "Flow Layout"); clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE); g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); layout = clutter_flow_layout_new (vertical ? CLUTTER_FLOW_VERTICAL : CLUTTER_FLOW_HORIZONTAL); clutter_flow_layout_set_homogeneous (CLUTTER_FLOW_LAYOUT (layout), is_homogeneous); clutter_flow_layout_set_column_spacing (CLUTTER_FLOW_LAYOUT (layout), x_spacing); clutter_flow_layout_set_row_spacing (CLUTTER_FLOW_LAYOUT (layout), y_spacing); clutter_flow_layout_set_snap_to_grid (CLUTTER_FLOW_LAYOUT (layout), snap_to_grid); box = clutter_actor_new (); clutter_actor_set_layout_manager (box, layout); clutter_actor_set_background_color (box, CLUTTER_COLOR_Aluminium2); clutter_actor_add_child (stage, box); if (!fixed_size) clutter_actor_add_constraint (box, clutter_bind_constraint_new (stage, CLUTTER_BIND_SIZE, 0.0)); clutter_actor_set_position (box, 0, 0); clutter_actor_set_name (box, "box"); for (i = 0; i < n_rects; i++) { ClutterColor color = CLUTTER_COLOR_INIT (255, 255, 255, 255); gfloat width, height; ClutterActor *rect; gchar *name; name = g_strdup_printf ("rect%02d", i); clutter_color_from_hls (&color, 360.0 / n_rects * i, 0.5, 0.8); rect = clutter_actor_new (); clutter_actor_set_background_color (rect, &color); if (random_size) { width = g_random_int_range (50, 100); height = g_random_int_range (50, 100); } else width = height = 50.f; clutter_actor_set_size (rect, width, height); clutter_actor_set_name (rect, name); clutter_actor_add_child (box, rect); g_free (name); } clutter_actor_show (stage); clutter_main (); return EXIT_SUCCESS; }
ClutterFlowLayout is available since Clutter 1.2
ClutterLayoutManager *
clutter_flow_layout_new (ClutterFlowOrientation orientation
);
Creates a new ClutterFlowLayout with the given orientation
Since 1.2
void clutter_flow_layout_set_homogeneous (ClutterFlowLayout *layout
,gboolean homogeneous
);
Sets whether the layout
should allocate the same space for
each child
Since 1.2
gboolean
clutter_flow_layout_get_homogeneous (ClutterFlowLayout *layout
);
Retrieves whether the layout
is homogeneous
Since 1.2
void clutter_flow_layout_set_orientation (ClutterFlowLayout *layout
,ClutterFlowOrientation orientation
);
Sets the orientation of the flow layout
The orientation controls the direction used to allocate the children: either horizontally or vertically. The orientation also controls the direction of the overflowing
Since 1.2
ClutterFlowOrientation
clutter_flow_layout_get_orientation (ClutterFlowLayout *layout
);
Retrieves the orientation of the layout
Since 1.2
void clutter_flow_layout_set_snap_to_grid (ClutterFlowLayout *layout
,gboolean snap_to_grid
);
Whether the layout
should place its children on a grid.
Since 1.16
gboolean
clutter_flow_layout_get_snap_to_grid (ClutterFlowLayout *layout
);
Retrieves the value of “snap-to-grid” property
Since 1.16
void clutter_flow_layout_set_column_spacing (ClutterFlowLayout *layout
,gfloat spacing
);
Sets the space between columns, in pixels
Since 1.2
gfloat
clutter_flow_layout_get_column_spacing
(ClutterFlowLayout *layout
);
Retrieves the spacing between columns
Since 1.2
void clutter_flow_layout_set_row_spacing (ClutterFlowLayout *layout
,gfloat spacing
);
Sets the spacing between rows, in pixels
Since 1.2
gfloat
clutter_flow_layout_get_row_spacing (ClutterFlowLayout *layout
);
Retrieves the spacing between rows
Since 1.2
void clutter_flow_layout_set_column_width (ClutterFlowLayout *layout
,gfloat min_width
,gfloat max_width
);
Sets the minimum and maximum widths that a column can have
Since 1.2
void clutter_flow_layout_get_column_width (ClutterFlowLayout *layout
,gfloat *min_width
,gfloat *max_width
);
Retrieves the minimum and maximum column widths
layout |
||
min_width |
return location for the minimum column width, or |
[out] |
max_width |
return location for the maximum column width, or |
[out] |
Since 1.2
void clutter_flow_layout_set_row_height (ClutterFlowLayout *layout
,gfloat min_height
,gfloat max_height
);
Sets the minimum and maximum heights that a row can have
Since 1.2
void clutter_flow_layout_get_row_height (ClutterFlowLayout *layout
,gfloat *min_height
,gfloat *max_height
);
Retrieves the minimum and maximum row heights
layout |
||
min_height |
return location for the minimum row height, or |
[out] |
max_height |
return location for the maximum row height, or |
[out] |
Since 1.2
The direction of the arrangement of the children inside a ClutterFlowLayout
Since 1.2
struct ClutterFlowLayout;
The ClutterFlowLayout structure contains only private data and should be accessed using the provided API
Since 1.2
struct ClutterFlowLayoutClass { };
The ClutterFlowLayoutClass structure contains only private data and should be accessed using the provided API
Since 1.2
“column-spacing”
property “column-spacing” gfloat
The spacing between columns, in pixels; the value of this property is honoured by horizontal non-overflowing layouts and by vertical overflowing layouts
Flags: Read / Write
Allowed values: >= 0
Default value: 0
Since 1.2
“homogeneous”
property “homogeneous” gboolean
Whether each child inside the ClutterFlowLayout should receive the same allocation
Flags: Read / Write
Default value: FALSE
Since 1.2
“max-column-width”
property “max-column-width” gfloat
Maximum width for each column in the layout, in pixels. If set to -1 the width will be the maximum child width
Flags: Read / Write
Allowed values: >= -1
Default value: -1
Since 1.2
“max-row-height”
property “max-row-height” gfloat
Maximum height for each row in the layout, in pixels. If set to -1 the width will be the maximum child height
Flags: Read / Write
Allowed values: >= -1
Default value: -1
Since 1.2
“min-column-width”
property “min-column-width” gfloat
Minimum width for each column in the layout, in pixels
Flags: Read / Write
Allowed values: >= 0
Default value: 0
Since 1.2
“min-row-height”
property “min-row-height” gfloat
Minimum height for each row in the layout, in pixels
Flags: Read / Write
Allowed values: >= 0
Default value: 0
Since 1.2
“orientation”
property“orientation” ClutterFlowOrientation
The orientation of the ClutterFlowLayout. The children of the layout will be layed out following the orientation.
This property also controls the overflowing directions
Flags: Read / Write / Construct
Default value: CLUTTER_FLOW_HORIZONTAL
Since 1.2
“row-spacing”
property “row-spacing” gfloat
The spacing between rows, in pixels; the value of this property is honoured by vertical non-overflowing layouts and by horizontal overflowing layouts
Flags: Read / Write
Allowed values: >= 0
Default value: 0
Since 1.2
“snap-to-grid”
property “snap-to-grid” gboolean
Whether the ClutterFlowLayout should arrange its children on a grid
Flags: Read / Write
Default value: TRUE
Since 1.16