Eolian: Integration of Evas Grid

This commit is contained in:
Yossi Kantor 2014-03-10 17:02:10 +02:00 committed by Daniel Zaoui
parent 103e89a04a
commit 2a90b4f23d
4 changed files with 220 additions and 261 deletions

View File

@ -27,7 +27,9 @@ BUILT_SOURCES += \
lib/evas/canvas/evas_object.eo.c \
lib/evas/canvas/evas_object.eo.h \
lib/evas/canvas/evas.eo.c \
lib/evas/canvas/evas.eo.h
lib/evas/canvas/evas.eo.h \
lib/evas/canvas/evas_grid.eo.c \
lib/evas/canvas/evas_grid.eo.h
EXTRA_DIST += \
lib/evas/canvas/evas_object.eo \
@ -42,7 +44,8 @@ EXTRA_DIST += \
lib/evas/canvas/evas_smart_clipped.eo \
lib/evas/canvas/evas_table.eo \
lib/evas/canvas/evas_common_interface.eo \
lib/evas/canvas/evas.eo
lib/evas/canvas/evas.eo \
lib/evas/canvas/evas_grid.eo
lib_LTLIBRARIES += lib/evas/libevas.la
noinst_LTLIBRARIES =
@ -70,7 +73,8 @@ nodist_installed_evascanvasheaders_DATA = \
lib/evas/canvas/evas_table.eo.h \
lib/evas/canvas/evas_common_interface.eo.h \
lib/evas/canvas/evas_object.eo.h \
lib/evas/canvas/evas.eo.h
lib/evas/canvas/evas.eo.h \
lib/evas/canvas/evas_grid.eo.h
noinst_HEADERS = \
lib/evas/include/evas_inline.x \

View File

@ -4256,6 +4256,8 @@ enum
*
* @{
*/
#include "canvas/evas_grid.eo.h"
#if 0
#define EVAS_OBJ_GRID_CLASS evas_object_grid_class_get()
const Eo_Class *evas_object_grid_class_get(void) EINA_CONST;
@ -4451,6 +4453,7 @@ enum
*/
#define evas_obj_grid_mirrored_set(mirrored) EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_MIRRORED_SET), EO_TYPECHECK(Eina_Bool, mirrored)
#endif
/**
* @}
*/

View File

@ -0,0 +1,155 @@
class Evas_Grid (Evas_Smart_Clipped)
{
legacy_prefix: evas_object_grid;
eo_prefix: evas_obj_grid;
properties {
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.
@return @c EINA_TRUE if it's a mirrored grid, @c EINA_FALSE otherwise.
@see evas_object_grid_mirrored_set()
@since 1.1 */
}
values {
Eina_Bool mirrored; /*@ the mirrored mode to set */
}
}
size {
set {
/*@
Set the virtual resolution for the grid
@since 1.1 */
}
get {
/*@
Get the current virtual resolution
@see evas_object_grid_size_set()
@since 1.1 */
}
values {
int w; /*@ The virtual horizontal size (resolution) in integer units */
int h; /*@ The virtual vertical size (resolution) in integer units */
}
}
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 Eina_List * @warn_unused;
}
}
}
methods {
accessor_new {
/*@
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 */
const;
return Eina_Accessor * @warn_unused;
}
clear {
/*@
Faster way to remove all child objects from a grid object.
@since 1.1 */
params {
@in Eina_Bool clear; /*@ if true, it will delete just removed children. */
}
}
iterator_new {
/*@
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 */
const;
return Eina_Iterator * @warn_unused;
}
add_to {
/*@
Create a grid that is child of a given element @a parent.
@see 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.
@return 1 on success, 0 on failure.
@since 1.1 */
return Eina_Bool;
params {
@in Evas_Object *child @nonull;
}
}
pack_get {
/*@
Get the pack options for a grid child
Get the pack x, y, width and height in virtual coordinates set by
evas_object_grid_pack()
@return 1 on success, 0 on failure.
@since 1.1 */
const;
return Eina_Bool;
params {
@in Evas_Object *child; /*@ The grid child to query for coordinates */
@out int x; /*@ The pointer to where the x coordinate will be returned */
@out int y; /*@ The pointer to where the y coordinate will be returned */
@out int w; /*@ The pointer to where the width will be returned */
@out int h; /*@ The pointer to where the height will be returned */
}
}
pack {
/*@
Add a new child to a grid object.
@return 1 on success, 0 on failure.
@since 1.1 */
return Eina_Bool;
params {
@in Evas_Object *child @nonull; /*@ The child object to add. */
@in int x; /*@ The virtual x coordinate of the child */
@in int y; /*@ The virtual y coordinate of the child */
@in int w; /*@ The virtual width of the child */
@in int h; /*@ The virtual height of the child */
}
}
}
implements {
Eo_Base::constructor;
}
}

View File

@ -4,11 +4,9 @@
#include <Eo.h>
EAPI Eo_Op EVAS_OBJ_GRID_BASE_ID = EO_NOOP;
#define MY_CLASS EVAS_OBJ_GRID_CLASS
typedef struct _Evas_Object_Grid_Data Evas_Object_Grid_Data;
typedef struct _Evas_Grid_Data Evas_Grid_Data;
typedef struct _Evas_Object_Grid_Option Evas_Object_Grid_Option;
typedef struct _Evas_Object_Grid_Iterator Evas_Object_Grid_Iterator;
typedef struct _Evas_Object_Grid_Accessor Evas_Object_Grid_Accessor;
@ -20,7 +18,7 @@ struct _Evas_Object_Grid_Option
int x, y, w, h;
};
struct _Evas_Object_Grid_Data
struct _Evas_Grid_Data
{
Evas_Object_Smart_Clipped_Data base;
Eina_List *children;
@ -47,7 +45,7 @@ struct _Evas_Object_Grid_Accessor
};
#define EVAS_OBJECT_GRID_DATA_GET(o, ptr) \
Evas_Object_Grid_Data *ptr = eo_data_scope_get(o, MY_CLASS)
Evas_Grid_Data *ptr = eo_data_scope_get(o, MY_CLASS)
#define EVAS_OBJECT_GRID_DATA_GET_OR_RETURN(o, ptr) \
EVAS_OBJECT_GRID_DATA_GET(o, ptr); \
@ -165,7 +163,7 @@ EVAS_SMART_SUBCLASS_NEW("Evas_Object_Grid", _evas_object_grid,
static void
_evas_object_grid_smart_add(Evas_Object *o)
{
Evas_Object_Grid_Data *priv;
Evas_Grid_Data *priv;
priv = evas_object_smart_data_get(o);
if (!priv)
@ -257,8 +255,8 @@ evas_object_grid_add(Evas *evas)
return obj;
}
static void
_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_evas_grid_constructor(Eo *obj, Evas_Grid_Data *class_data EINA_UNUSED)
{
eo_do_super(obj, MY_CLASS, eo_constructor());
eo_do(obj, evas_obj_smart_attach(_evas_object_grid_smart_class_new()));
@ -266,83 +264,40 @@ _constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
// return evas_object_smart_add(evas, _evas_object_grid_smart_class_new());
}
EAPI Evas_Object *
evas_object_grid_add_to(Evas_Object *parent)
{
Evas_Object *o = NULL;
eo_do(parent, evas_obj_grid_add_to(&o));
return o;
}
static void
_add_to(Eo *parent, void *_pd EINA_UNUSED, va_list *list)
EOLIAN static Evas_Object*
_evas_grid_add_to(Eo *parent, Evas_Grid_Data *_pd EINA_UNUSED)
{
Evas *evas;
Evas_Object **ret = va_arg(*list, Evas_Object **);
Evas_Object *ret;
evas = evas_object_evas_get(parent);
*ret = evas_object_grid_add(evas);
evas_object_smart_member_add(*ret, parent);
ret = evas_object_grid_add(evas);
evas_object_smart_member_add(ret, parent);
return ret;
}
EAPI void
evas_object_grid_size_set(Evas_Object *o, int w, int h)
EOLIAN static void
_evas_grid_size_set(Eo *o, Evas_Grid_Data *priv, int w, int h)
{
eo_do(o, evas_obj_grid_size_set(w, h));
}
static void
_size_set(Eo *o, void *_pd, va_list *list)
{
Evas_Object_Grid_Data *priv = _pd;
int w = va_arg(*list, int);
int h = va_arg(*list, int);
if ((priv->size.w == w) && (priv->size.h == h)) return;
priv->size.w = w;
priv->size.h = h;
evas_object_smart_changed(o);
}
EAPI void
evas_object_grid_size_get(const Evas_Object *o, int *w, int *h)
EOLIAN static void
_evas_grid_size_get(Eo *o EINA_UNUSED, Evas_Grid_Data *priv, int *w, int *h)
{
eo_do((Eo *)o, evas_obj_grid_size_get(w, h));
}
static void
_size_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
{
const Evas_Object_Grid_Data *priv = _pd;
int *w = va_arg(*list, int *);
int *h = va_arg(*list, int *);
if (w) *w = priv->size.w;
if (h) *h = priv->size.h;
}
EAPI Eina_Bool
evas_object_grid_pack(Evas_Object *o, Evas_Object *child, int x, int y, int w, int h)
{
Eina_Bool ret = EINA_FALSE;
eo_do(o, evas_obj_grid_pack(child, x, y, w, h, &ret));
return ret;
}
static void
_pack(Eo *o, void *_pd, va_list *list)
EOLIAN static Eina_Bool
_evas_grid_pack(Eo *o, Evas_Grid_Data *priv, Evas_Object *child, int x, int y, int w, int h)
{
Evas_Object_Grid_Option *opt;
Eina_Bool newobj = EINA_FALSE;
Evas_Object_Grid_Data *priv = _pd;
Evas_Object *child = va_arg(*list, Evas_Object *);
int x = va_arg(*list, int);
int y = va_arg(*list, int);
int w = va_arg(*list, int);
int h = va_arg(*list, int);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
opt = _evas_object_grid_option_get(child);
if (!opt)
{
@ -350,7 +305,7 @@ _pack(Eo *o, void *_pd, va_list *list)
if (!opt)
{
ERR("could not allocate grid option data.");
return;
return EINA_FALSE;
}
newobj = EINA_TRUE;
}
@ -371,69 +326,48 @@ _pack(Eo *o, void *_pd, va_list *list)
}
// FIXME: we could keep a changed list
evas_object_smart_changed(o);
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
static void
_evas_object_grid_remove_opt(Evas_Object_Grid_Data *priv, Evas_Object_Grid_Option *opt)
_evas_object_grid_remove_opt(Evas_Grid_Data *priv, Evas_Object_Grid_Option *opt)
{
priv->children = eina_list_remove_list(priv->children, opt->l);
opt->l = NULL;
}
EAPI Eina_Bool
evas_object_grid_unpack(Evas_Object *o, Evas_Object *child)
{
Eina_Bool ret = EINA_FALSE;
eo_do(o, evas_obj_grid_unpack(child, &ret));
return ret;
}
static void
_unpack(Eo *o, void *_pd, va_list *list)
EOLIAN static Eina_Bool
_evas_grid_unpack(Eo *o, Evas_Grid_Data *priv, Evas_Object *child)
{
Evas_Object_Grid_Option *opt;
Evas_Object_Grid_Data *priv = _pd;
Evas_Object *child = va_arg(*list, Evas_Object *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
if (o != evas_object_smart_parent_get(child))
{
ERR("cannot unpack child from incorrect grid!");
return;
return EINA_FALSE;
}
opt = _evas_object_grid_option_del(child);
if (!opt)
{
ERR("cannot unpack child with no packing option!");
return;
return EINA_FALSE;
}
_evas_object_grid_child_disconnect(o, child);
_evas_object_grid_remove_opt(priv, opt);
evas_object_smart_member_del(child);
free(opt);
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
EAPI void
evas_object_grid_clear(Evas_Object *o, Eina_Bool clear)
{
eo_do(o, evas_obj_grid_clear(clear));
}
static void
_clear(Eo *o, void *_pd, va_list *list)
EOLIAN static void
_evas_grid_clear(Eo *o, Evas_Grid_Data *priv, Eina_Bool clear)
{
Evas_Object_Grid_Option *opt;
Evas_Object_Grid_Data *priv = _pd;
Eina_Bool clear = va_arg(*list, int);
EINA_LIST_FREE(priv->children, opt)
{
_evas_object_grid_child_disconnect(o, opt->obj);
@ -445,24 +379,9 @@ _clear(Eo *o, void *_pd, va_list *list)
}
}
EAPI Eina_Bool
evas_object_grid_pack_get(const Evas_Object *o, Evas_Object *child, int *x, int *y, int *w, int *h)
EOLIAN static Eina_Bool
_evas_grid_pack_get(Eo *o EINA_UNUSED, Evas_Grid_Data *_pd EINA_UNUSED, Evas_Object *child, int *x, int *y, int *w, int *h)
{
Eina_Bool ret = EINA_FALSE;
eo_do((Eo *)o, evas_obj_grid_pack_get(child, x, y, w, h, &ret));
return ret;
}
static void
_pack_get(Eo *o EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
{
Evas_Object *child = va_arg(*list, Evas_Object *);
int *x = va_arg(*list, int *);
int *y = va_arg(*list, int *);
int *w = va_arg(*list, int *);
int *h = va_arg(*list, int *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Evas_Object_Grid_Option *opt;
if (x) *x = 0;
@ -470,46 +389,24 @@ _pack_get(Eo *o EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
if (w) *w = 0;
if (h) *h = 0;
opt = _evas_object_grid_option_get(child);
if (!opt)
{
*ret = 0;
return;
}
if (!opt) return 0;
if (x) *x = opt->x;
if (y) *y = opt->y;
if (w) *w = opt->w;
if (h) *h = opt->h;
*ret = 1;
return 1;
}
EAPI Eina_Iterator *
evas_object_grid_iterator_new(const Evas_Object *o)
EOLIAN static Eina_Iterator*
_evas_grid_iterator_new(Eo *o, Evas_Grid_Data *priv)
{
Eina_Iterator *ret = NULL;
eo_do((Eo *)o, evas_obj_grid_iterator_new(&ret));
return ret;
}
static void
_iterator_new(Eo *o, void *_pd, va_list *list)
{
Eina_Iterator **ret = va_arg(*list, Eina_Iterator **);
Evas_Object_Grid_Iterator *it;
const Evas_Object_Grid_Data *priv = _pd;
if (!priv->children)
{
*ret = NULL;
return;
}
if (!priv->children) return NULL;
it = calloc(1, sizeof(Evas_Object_Grid_Iterator));
if (!it)
{
*ret = NULL;
return;
}
if (!it) return NULL;
EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
@ -520,37 +417,18 @@ _iterator_new(Eo *o, void *_pd, va_list *list)
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_evas_object_grid_iterator_get_container);
it->iterator.free = FUNC_ITERATOR_FREE(_evas_object_grid_iterator_free);
*ret = &it->iterator;
return &it->iterator;
}
EAPI Eina_Accessor *
evas_object_grid_accessor_new(const Evas_Object *o)
EOLIAN static Eina_Accessor*
_evas_grid_accessor_new(Eo *o, Evas_Grid_Data *priv)
{
Eina_Accessor *ret = NULL;
eo_do((Eo *)o, evas_obj_grid_accessor_new(&ret));
return ret;
}
static void
_accessor_new(Eo *o, void *_pd, va_list *list)
{
Eina_Accessor **ret = va_arg(*list, Eina_Accessor **);
Evas_Object_Grid_Accessor *it;
const Evas_Object_Grid_Data *priv = _pd;
if (!priv->children)
{
*ret = NULL;
return;
}
if (!priv->children) return NULL;
it = calloc(1, sizeof(Evas_Object_Grid_Accessor));
if (!it)
{
*ret = NULL;
return;
}
if (!it) return NULL;
EINA_MAGIC_SET(&it->accessor, EINA_MAGIC_ACCESSOR);
@ -561,61 +439,30 @@ _accessor_new(Eo *o, void *_pd, va_list *list)
it->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(_evas_object_grid_accessor_get_container);
it->accessor.free = FUNC_ACCESSOR_FREE(_evas_object_grid_accessor_free);
*ret = &it->accessor;
return &it->accessor;
}
EAPI Eina_List *
evas_object_grid_children_get(const Evas_Object *o)
EOLIAN static Eina_List*
_evas_grid_children_get(Eo *o EINA_UNUSED, Evas_Grid_Data *priv)
{
Eina_List *ret = NULL;
eo_do((Eo *)o, evas_obj_grid_children_get(&ret));
return ret;
}
static void
_children_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
{
Eina_List **ret = va_arg(*list, Eina_List **);
Eina_List *new_list = NULL, *l;
Evas_Object_Grid_Option *opt;
const Evas_Object_Grid_Data *priv = _pd;
EINA_LIST_FOREACH(priv->children, l, opt)
new_list = eina_list_append(new_list, opt->obj);
*ret = new_list;
return new_list;
}
EAPI Eina_Bool
evas_object_grid_mirrored_get(const Evas_Object *o)
EOLIAN static Eina_Bool
_evas_grid_mirrored_get(Eo *o EINA_UNUSED, Evas_Grid_Data *priv)
{
Eina_Bool ret = EINA_FALSE;
eo_do((Eo *)o, evas_obj_grid_mirrored_get(&ret));
return ret;
return priv->is_mirrored;
}
static void
_mirrored_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
EOLIAN static void
_evas_grid_mirrored_set(Eo *o EINA_UNUSED, Evas_Grid_Data *priv, Eina_Bool mirrored)
{
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
const Evas_Object_Grid_Data *priv = _pd;
*ret = priv->is_mirrored;
}
EAPI void
evas_object_grid_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
{
eo_do(obj, evas_obj_grid_mirrored_set(mirrored));
}
static void
_mirrored_set(Eo *o EINA_UNUSED, void *_pd, va_list *list)
{
Eina_Bool mirrored = va_arg(*list, int);
Evas_Object_Grid_Data *priv = _pd;
mirrored = !!mirrored;
if (priv->is_mirrored != mirrored)
{
@ -624,54 +471,4 @@ _mirrored_set(Eo *o EINA_UNUSED, void *_pd, va_list *list)
}
}
static void
_class_constructor(Eo_Class *klass)
{
const Eo_Op_Func_Description func_desc[] = {
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_ADD_TO), _add_to),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_SIZE_SET), _size_set),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_SIZE_GET), _size_get),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_PACK), _pack),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_UNPACK), _unpack),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_CLEAR), _clear),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_PACK_GET), _pack_get),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_ITERATOR_NEW), _iterator_new),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_ACCESSOR_NEW), _accessor_new),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_CHILDREN_GET), _children_get),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_MIRRORED_GET), _mirrored_get),
EO_OP_FUNC(EVAS_OBJ_GRID_ID(EVAS_OBJ_GRID_SUB_ID_MIRRORED_SET), _mirrored_set),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_desc);
}
static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_ADD_TO, "Create a grid that is child of a given element parent."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_SIZE_SET, "Set the virtual resolution for the grid."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_SIZE_GET, "Get the current virtual resolution."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_PACK, "Add a new child to a grid object."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_UNPACK, "Remove child from grid."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_CLEAR, "Faster way to remove all child objects from a grid object."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_PACK_GET, "Get the pack options for a grid child."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_ITERATOR_NEW, "Get an iterator to walk the list of children for the grid."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_ACCESSOR_NEW, "Get an accessor to get random access to the list of children for the grid."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_CHILDREN_GET, "Get the list of children for the grid."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_MIRRORED_GET, "Gets the mirrored mode of the grid."),
EO_OP_DESCRIPTION(EVAS_OBJ_GRID_SUB_ID_MIRRORED_SET, "Sets the mirrored mode of the grid."),
EO_OP_DESCRIPTION_SENTINEL
};
static const Eo_Class_Description class_desc = {
EO_VERSION,
"Evas_Grid",
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(&EVAS_OBJ_GRID_BASE_ID, op_desc, EVAS_OBJ_GRID_SUB_ID_LAST),
NULL,
sizeof(Evas_Object_Grid_Data),
_class_constructor,
NULL
};
EO_DEFINE_CLASS(evas_object_grid_class_get, &class_desc, EVAS_OBJ_SMART_CLIPPED_CLASS, NULL);
#include "canvas/evas_grid.eo.c"