class Evas.Grid (Evas.Smart_Clipped)
{
   legacy_prefix: evas_object_grid;
   eo_prefix: evas_obj_grid;
   methods {
      @property mirrored {
         set {
            [[Sets the mirrored mode of the grid. In mirrored mode the grid items go
              from right to left instead of left to right. That is, 0,0 is top right, not
              to left.

              @since 1.1]]
         }
         get {
            [[Gets the mirrored mode of the grid.

              See also @.mirrored.set

              @since 1.1]]
         }
         values {
            mirrored: bool; [[the mirrored mode to set.]]
         }
      }
      @property size {
         set {
            [[Set the virtual resolution for the grid

              @since 1.1]]
         }
         get {
            [[Get the current virtual resolution

              See also @.size.set

              @since 1.1]]
         }
         values {
            w: int; [[The virtual horizontal size (resolution) in integer units.]]
            h: int; [[The virtual vertical size (resolution) in integer units.]]
         }
      }
      @property children {
         get {
            [[Get the list of children for the grid.

              Note: This is a duplicate of the list kept by the grid internally.
              It's up to the user to destroy it when it no longer needs it.
              It's possible to remove objects from the grid when walking this
              list, but these removals won't be reflected on it.

              @since 1.1]]
            return: free(own(list<Evas.Object *> *), eina_list_free) @warn_unused;
         }
      }
      accessor_new @const {
         [[Get an accessor to get random access to the list of children for the grid.

           Note: Do not remove or delete objects while walking the list.

           @since 1.1]]
         return: free(own(accessor<Evas.Object *> *), eina_accessor_free)
            @warn_unused;
      }
      clear {
         [[Faster way to remove all child objects from a grid object.

           @since 1.1]]

         params {
            @in clear: bool; [[if true, it will delete just removed children.]]
         }
      }
      iterator_new @const {
         [[Get an iterator to walk the list of children for the grid.

           Note: Do not remove or delete objects while walking the list.

           @since 1.1]]
         return: free(own(iterator<Evas.Object *> *), eina_iterator_free)
            @warn_unused;
      }
      add_to {
         [[Create a grid that is child of a given element parent.

           \@ref evas_object_grid_add()

           @since 1.1]]

         return: Evas.Object * @warn_unused;
      }
      unpack {
         [[Remove child from grid.

           Note: removing a child will immediately call a walk over children in order
           to recalculate numbers of columns and rows. If you plan to remove
           all children, use evas_object_grid_clear() instead.

           @since 1.1]]

         return: bool; [[1 on success, 0 on failure.]]
         params {
            @in child: Evas.Object * @nonull;
         }
      }
      pack_get @const {
         [[Get the pack options for a grid child

           Get the pack x, y, width and height in virtual coordinates set by
           @.pack.

           @since 1.1]]
         return: bool; [[1 on success, 0 on failure.]]
         params {
            @in child: Evas.Object *; [[The grid child to query for coordinates.]]
            @out x: int; [[The pointer to where the x coordinate will be returned.]]
            @out y: int; [[The pointer to where the y coordinate will be returned.]]
            @out w: int; [[The pointer to where the width will be returned.]]
            @out h: int; [[The pointer to where the height will be returned.]]
         }
      }
      pack {
         [[Add a new child to a grid object.

           @since 1.1]]

         return: bool; [[1 on success, 0 on failure.]]
         params {
            @in child: Evas.Object * @nonull; [[The child object to add.]]
            @in x: int; [[The virtual x coordinate of the child.]]
            @in y: int; [[The virtual y coordinate of the child.]]
            @in w: int; [[The virtual width of the child.]]
            @in h: int; [[The virtual height of the child.]]
         }
      }
   }
   implements {
      Eo.Base.constructor;
   }
}
