## GtkGrid GtkGrid — Pack widgets in a rows and columns |

## Synopsis

    #include <gtk/gtk.h>

    struct              GtkGrid;
    GtkWidget *         gtk_grid_new                        (void);
    void                gtk_grid_attach                     (GtkGrid *grid,
                                                             GtkWidget *child,
                                                             gint left,
                                                             gint top,
                                                             gint width,
                                                             gint height);
    void                gtk_grid_attach_next_to             (GtkGrid *grid,
                                                             GtkWidget *child,
                                                             GtkWidget *sibling,
                                                             GtkPositionType side,
                                                             gint width,
                                                             gint height);
    void                gtk_grid_set_row_homogeneous        (GtkGrid *grid,
                                                             gboolean homogeneous);
    gboolean            gtk_grid_get_row_homogeneous        (GtkGrid *grid);
    void                gtk_grid_set_row_spacing            (GtkGrid *grid,
                                                             guint spacing);
    guint               gtk_grid_get_row_spacing            (GtkGrid *grid);
    void                gtk_grid_set_column_homogeneous     (GtkGrid *grid,
                                                             gboolean homogeneous);
    gboolean            gtk_grid_get_column_homogeneous     (GtkGrid *grid);
    void                gtk_grid_set_column_spacing         (GtkGrid *grid,
                                                             guint spacing);
    guint               gtk_grid_get_column_spacing         (GtkGrid *grid);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----GtkWidget
                   +----GtkContainer
                         +----GtkGrid

## Implemented Interfaces

GtkGrid implements AtkImplementorIface, GtkBuildable and GtkOrientable.

## Properties

      "column-homogeneous"       gboolean              : Read / Write
      "column-spacing"           gint                  : Read / Write
      "row-homogeneous"          gboolean              : Read / Write
      "row-spacing"              gint                  : Read / Write

## Child Properties

      "height"                   gint                  : Read / Write
      "left-attach"              gint                  : Read / Write
      "top-attach"               gint                  : Read / Write
      "width"                    gint                  : Read / Write

## Description

GtkGrid is a container which arranges its child widgets in rows and columns. It is a very similar to GtkTable and GtkBox, but it consistently uses GtkWidget's "margin" and "expand" properties instead of custom child properties, and it fully supports height-for-width geometry management.

Children are added using `gtk_grid_attach()`. They can span multiple rows or columns. It is also possible to add a child next to an existing child, using `gtk_grid_attach_next_to()`.

GtkGrid can be used like a GtkBox by just using `gtk_container_add()`, which will place children next to each other in the direction determined by the "orientation" property.

## Details

### struct GtkGrid

    struct GtkGrid;

### gtk_grid_new ()

    GtkWidget *         gtk_grid_new                        (void);

Creates a new grid widget.

Returns : | the new GtkGrid

### gtk_grid_attach ()

    void                gtk_grid_attach                     (GtkGrid *grid,
                                                             GtkWidget *child,
                                                             gint left,
                                                             gint top,
                                                             gint width,
                                                             gint height);

Adds a widget to the grid.

The position of `child` is determined by `left` and `top`. The number of 'cells' that `child` will occupy is determined by `width` and `height`.

`grid` : | a GtkGrid
`child` : | the widget to add
`left` : | the column number to attach the left side of `child` to
`top` : | the row number to attach the top side of `child` to
`width` : | the number of columns that `child` will span
`height` : | the number of rows that `child` will span

### gtk_grid_attach_next_to ()

    void                gtk_grid_attach_next_to             (GtkGrid *grid,
                                                             GtkWidget *child,
                                                             GtkWidget *sibling,
                                                             GtkPositionType side,
                                                             gint width,
                                                             gint height);

Adds a widget to the grid.

The widget is placed next to `sibling`, on the side determined by `side`.

`grid` : | a GtkGrid
`child` : | the widget to add
`sibling` : | the child of `grid` that `child` will be placed next to
`side` : | the side of `sibling` that `child` is positioned next to
`width` : | the number of columns that `child` will span
`height` : | the number of rows that `child` will span

### gtk_grid_set_row_homogeneous ()

    void                gtk_grid_set_row_homogeneous        (GtkGrid *grid,
                                                             gboolean homogeneous);

Sets whether all rows of `grid` will have the same height.

`grid` : | a GtkGrid
`homogeneous` : | `TRUE` to make rows homogeneous

### gtk_grid_get_row_homogeneous ()

    gboolean            gtk_grid_get_row_homogeneous        (GtkGrid *grid);

Returns whether all rows of `grid` have the same height.

`grid` : | a GtkGrid
Returns : | whether all rows of `grid` have the same height.

### gtk_grid_set_row_spacing ()

    void                gtk_grid_set_row_spacing            (GtkGrid *grid,
                                                             guint spacing);

Sets the amount of space between rows of `grid`.

`grid` : | a GtkGrid
`spacing` : | the amount of space to insert between rows

### gtk_grid_get_row_spacing ()

    guint               gtk_grid_get_row_spacing            (GtkGrid *grid);

Returns the amount of space between the rows of `grid`.

`grid` : | a GtkGrid
Returns : | the row spacing of `grid`

### gtk_grid_set_column_homogeneous ()

    void                gtk_grid_set_column_homogeneous     (GtkGrid *grid,
                                                             gboolean homogeneous);

Sets whether all columns of `grid` will have the same width.

`grid` : | a GtkGrid
`homogeneous` : | `TRUE` to make columns homogeneous

### gtk_grid_get_column_homogeneous ()

    gboolean            gtk_grid_get_column_homogeneous     (GtkGrid *grid);

Returns whether all columns of `grid` have the same width.

`grid` : | a GtkGrid
Returns : | whether all columns of `grid` have the same width.

### gtk_grid_set_column_spacing ()

    void                gtk_grid_set_column_spacing         (GtkGrid *grid,
                                                             guint spacing);

Sets the amount of space between columns of `grid`.

`grid` : | a GtkGrid
`spacing` : | the amount of space to insert between columns

### gtk_grid_get_column_spacing ()

    guint               gtk_grid_get_column_spacing         (GtkGrid *grid);

Returns the amount of space between the columns of `grid`.

`grid` : | a GtkGrid
Returns : | the column spacing of `grid`

## Property Details

### The `"column-homogeneous"` property

      "column-homogeneous"       gboolean              : Read / Write

If TRUE, the columns are all the same width.

Default value: FALSE

### The `"column-spacing"` property

      "column-spacing"           gint                  : Read / Write

The amount of space between two consecutive columns.

Allowed values: [0,32767]

Default value: 0

### The `"row-homogeneous"` property

      "row-homogeneous"          gboolean              : Read / Write

If TRUE, the rows are all the same height.

Default value: FALSE

### The `"row-spacing"` property

      "row-spacing"              gint                  : Read / Write

The amount of space between two consecutive rows.

Allowed values: [0,32767]

Default value: 0

## Child Property Details

### The `"height"` child property

      "height"                   gint                  : Read / Write

The number of rows that a child spans.

Allowed values: >= 1

Default value: 1

### The `"left-attach"` child property

      "left-attach"              gint                  : Read / Write

The column number to attach the left side of the child to.

Default value: 0

### The `"top-attach"` child property

      "top-attach"               gint                  : Read / Write

The row number to attach the top side of a child widget to.

Default value: 0

### The `"width"` child property

      "width"                    gint                  : Read / Write

The number of columns that a child spans.

Allowed values: >= 1

Default value: 1

## See Also

GtkTable, GtkHBox, GtkVBox