#include <Eo.h>
-EAPI Eo_Op EVAS_OBJ_TABLE_BASE_ID = EO_NOOP;
-
#define MY_CLASS EVAS_OBJ_TABLE_CLASS
#define MY_CLASS_NAME "Evas_Table"
#define MY_CLASS_NAME_LEGACY "Evas_Object_Table"
-typedef struct _Evas_Object_Table_Data Evas_Object_Table_Data;
+typedef struct _Evas_Table_Data Evas_Table_Data;
typedef struct _Evas_Object_Table_Option Evas_Object_Table_Option;
typedef struct _Evas_Object_Table_Cache Evas_Object_Table_Cache;
typedef struct _Evas_Object_Table_Iterator Evas_Object_Table_Iterator;
double ___pad; // padding to make sure doubles at end can be aligned
};
-struct _Evas_Object_Table_Data
+struct _Evas_Table_Data
{
Eina_List *children;
struct {
};
#define EVAS_OBJECT_TABLE_DATA_GET(o, ptr) \
- Evas_Object_Table_Data *ptr = eo_data_scope_get(o, MY_CLASS)
+ Evas_Table_Data *ptr = eo_data_scope_get(o, MY_CLASS)
#define EVAS_OBJECT_TABLE_DATA_GET_OR_RETURN(o, ptr) \
EVAS_OBJECT_TABLE_DATA_GET(o, ptr); \
}
static void
-_evas_object_table_cache_reset(Evas_Object_Table_Data *priv)
+_evas_object_table_cache_reset(Evas_Table_Data *priv)
{
Evas_Object_Table_Cache *c = priv->cache;
int size;
}
static void
-_evas_object_table_cache_invalidate(Evas_Object_Table_Data *priv)
+_evas_object_table_cache_invalidate(Evas_Table_Data *priv)
{
priv->hints_changed = 1;
if (priv->cache)
}
static void
-_evas_object_table_calculate_hints_homogeneous(Evas_Object *o, Evas_Object_Table_Data *priv)
+_evas_object_table_calculate_hints_homogeneous(Evas_Object *o, Evas_Table_Data *priv)
{
Eina_List *l;
Evas_Object_Table_Option *opt;
}
static void
-_evas_object_table_calculate_layout_homogeneous_sizes_item(const Evas_Object *o, const Evas_Object_Table_Data *priv, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
+_evas_object_table_calculate_layout_homogeneous_sizes_item(const Evas_Object *o, const Evas_Table_Data *priv, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
Evas_Coord minw, minh;
Eina_Bool expand_h, expand_v;
}
static void
-_evas_object_table_calculate_layout_homogeneous_sizes(const Evas_Object *o, const Evas_Object_Table_Data *priv, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h, Evas_Coord *cellw, Evas_Coord *cellh)
+_evas_object_table_calculate_layout_homogeneous_sizes(const Evas_Object *o, const Evas_Table_Data *priv, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h, Evas_Coord *cellw, Evas_Coord *cellh)
{
evas_object_geometry_get(o, x, y, w, h);
if (priv->homogeneous == EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM)
}
static void
-_evas_object_table_calculate_layout_homogeneous(Evas_Object *o, Evas_Object_Table_Data *priv)
+_evas_object_table_calculate_layout_homogeneous(Evas_Object *o, Evas_Table_Data *priv)
{
Evas_Coord x = 0, y = 0, w = 0, h = 0, ww, hh, cellw = 0, cellh = 0;
Eina_List *l;
}
static void
-_evas_object_table_smart_calculate_homogeneous(Evas_Object *o, Evas_Object_Table_Data *priv)
+_evas_object_table_smart_calculate_homogeneous(Evas_Object *o, Evas_Table_Data *priv)
{
if (priv->hints_changed)
_evas_object_table_calculate_hints_homogeneous(o, priv);
}
static void
-_evas_object_table_calculate_hints_regular(Evas_Object *o, Evas_Object_Table_Data *priv)
+_evas_object_table_calculate_hints_regular(Evas_Object *o, Evas_Table_Data *priv)
{
Evas_Object_Table_Option *opt;
Evas_Object_Table_Cache *c;
}
static void
-_evas_object_table_calculate_layout_regular(Evas_Object *o, Evas_Object_Table_Data *priv)
+_evas_object_table_calculate_layout_regular(Evas_Object *o, Evas_Table_Data *priv)
{
Evas_Object_Table_Option *opt;
Evas_Object_Table_Cache *c;
}
static void
-_evas_object_table_smart_calculate_regular(Evas_Object *o, Evas_Object_Table_Data *priv)
+_evas_object_table_smart_calculate_regular(Evas_Object *o, Evas_Table_Data *priv)
{
if (priv->hints_changed)
_evas_object_table_calculate_hints_regular(o, priv);
_evas_object_table_calculate_layout_regular(o, priv);
}
-static void
-_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_evas_table_evas_smart_add(Eo *obj, Evas_Table_Data *priv)
{
- Evas_Object_Table_Data *priv = _pd;
priv->pad.h = 0;
priv->pad.v = 0;
priv->align.h = 0.5;
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
}
-static void
-_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_evas_table_evas_smart_del(Eo *obj, Evas_Table_Data *priv)
{
- Evas_Object_Table_Data *priv = _pd;
Eina_List *l;
l = priv->children;
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
}
-static void
-_smart_resize(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static void
+_evas_table_evas_smart_resize(Eo *obj, Evas_Table_Data *_pd EINA_UNUSED, Evas_Coord w, Evas_Coord h)
{
- Evas_Coord w = va_arg(*list, Evas_Coord);
- Evas_Coord h = va_arg(*list, Evas_Coord);
Evas_Coord ow, oh;
evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
if ((ow == w) && (oh == h)) return;
evas_object_smart_changed(obj);
}
-static void
-_smart_calculate(Eo *o, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_evas_table_evas_smart_calculate(Eo *o, Evas_Table_Data *priv)
{
- Evas_Object_Table_Data *priv = _pd;
-
if ((priv->size.cols < 1) || (priv->size.rows < 1))
{
DBG("Nothing to do: cols=%d, rows=%d",
return obj;
}
-static void
-_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
+EOLIAN static void
+_evas_table_constructor(Eo *obj, Evas_Table_Data *class_data EINA_UNUSED)
{
eo_do_super(obj, MY_CLASS, eo_constructor());
eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY));
}
-EAPI Evas_Object *
-evas_object_table_add_to(Evas_Object *parent)
+EOLIAN static Evas_Object*
+_evas_table_add_to(Eo *parent, Evas_Table_Data *_pd EINA_UNUSED)
{
- Evas_Object *ret = NULL;
- eo_do(parent, evas_obj_table_add_to(&ret));
- return ret;
-}
-
-static void
-_add_to(Eo *parent, void *_pd EINA_UNUSED, va_list *list)
-{
- Evas_Object **ret = va_arg(*list, Evas_Object **);
+ Evas_Object *ret;
Evas *evas;
evas = evas_object_evas_get(parent);
- *ret = evas_object_table_add(evas);
- evas_object_smart_member_add(*ret, parent);
-}
+ ret = evas_object_table_add(evas);
+ evas_object_smart_member_add(ret, parent);
-EAPI void
-evas_object_table_homogeneous_set(Evas_Object *o, Evas_Object_Table_Homogeneous_Mode homogeneous)
-{
- eo_do(o, evas_obj_table_homogeneous_set(homogeneous));
+ return ret;
}
-static void
-_homogeneous_set(Eo *o, void *_pd, va_list *list)
+EOLIAN static void
+_evas_table_homogeneous_set(Eo *o, Evas_Table_Data *priv, Evas_Object_Table_Homogeneous_Mode homogeneous)
{
- Evas_Object_Table_Homogeneous_Mode homogeneous = va_arg(*list, Evas_Object_Table_Homogeneous_Mode);
-
- Evas_Object_Table_Data *priv = _pd;
if (priv->homogeneous == homogeneous)
return;
priv->homogeneous = homogeneous;
evas_object_smart_changed(o);
}
-EAPI Evas_Object_Table_Homogeneous_Mode
-evas_object_table_homogeneous_get(const Evas_Object *o)
+EOLIAN static Evas_Object_Table_Homogeneous_Mode
+_evas_table_homogeneous_get(Eo *o EINA_UNUSED, Evas_Table_Data *priv)
{
- Evas_Object_Table_Homogeneous_Mode ret = EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE;
- eo_do((Eo *)o, evas_obj_table_homogeneous_get(&ret));
- return ret;
+ return priv->homogeneous;
}
-static void
-_homogeneous_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_evas_table_align_set(Eo *o, Evas_Table_Data *priv, double horizontal, double vertical)
{
- Evas_Object_Table_Homogeneous_Mode *ret = va_arg(*list, Evas_Object_Table_Homogeneous_Mode *);
- const Evas_Object_Table_Data *priv = _pd;
- *ret = priv->homogeneous;
-}
-
-EAPI void
-evas_object_table_align_set(Evas_Object *o, double horizontal, double vertical)
-{
- eo_do(o, evas_obj_table_align_set(horizontal, vertical));
-}
-
-static void
-_align_set(Eo *o, void *_pd, va_list *list)
-{
- double horizontal = va_arg(*list, double);
- double vertical = va_arg(*list, double);
-
- Evas_Object_Table_Data *priv = _pd;
if (priv->align.h == horizontal && priv->align.v == vertical)
return;
priv->align.h = horizontal;
evas_object_smart_changed(o);
}
-EAPI void
-evas_object_table_align_get(const Evas_Object *o, double *horizontal, double *vertical)
-{
- eo_do((Eo *)o, evas_obj_table_align_get(horizontal, vertical));
-}
-
-static void
-_align_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_evas_table_align_get(Eo *o EINA_UNUSED, Evas_Table_Data *priv, double *horizontal, double *vertical)
{
- double *horizontal = va_arg(*list, double *);
- double *vertical = va_arg(*list, double *);
-
- const Evas_Object_Table_Data *priv = _pd;
if (priv)
{
if (horizontal) *horizontal = priv->align.h;
}
}
-EAPI void
-evas_object_table_padding_set(Evas_Object *o, Evas_Coord horizontal, Evas_Coord vertical)
+EOLIAN static void
+_evas_table_padding_set(Eo *o, Evas_Table_Data *priv, Evas_Coord horizontal, Evas_Coord vertical)
{
- eo_do(o, evas_obj_table_padding_set(horizontal, vertical));
-}
-
-static void
-_padding_set(Eo *o, void *_pd, va_list *list)
-{
- Evas_Coord horizontal = va_arg(*list, Evas_Coord);
- Evas_Coord vertical = va_arg(*list, Evas_Coord);
-
- Evas_Object_Table_Data *priv = _pd;
if (priv->pad.h == horizontal && priv->pad.v == vertical)
return;
priv->pad.h = horizontal;
evas_object_smart_changed(o);
}
-EAPI void
-evas_object_table_padding_get(const Evas_Object *o, Evas_Coord *horizontal, Evas_Coord *vertical)
+EOLIAN static void
+_evas_table_padding_get(Eo *o EINA_UNUSED, Evas_Table_Data *priv, Evas_Coord *horizontal, Evas_Coord *vertical)
{
- eo_do((Eo *)o, evas_obj_table_padding_get(horizontal, vertical));
-}
-
-static void
-_padding_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
-{
- Evas_Coord *horizontal = va_arg(*list, Evas_Coord *);
- Evas_Coord *vertical = va_arg(*list, Evas_Coord *);
-
- const Evas_Object_Table_Data *priv = _pd;
if (priv)
{
if (horizontal) *horizontal = priv->pad.h;
}
}
-EAPI Eina_Bool
-evas_object_table_pack_get(const Evas_Object *o, Evas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan)
+EOLIAN static Eina_Bool
+_evas_table_pack_get(Eo *o EINA_UNUSED, Evas_Table_Data *_pd EINA_UNUSED, Evas_Object *child, unsigned short *col, unsigned short *row, unsigned short *colspan, unsigned short *rowspan)
{
- Eina_Bool ret = EINA_FALSE;
- eo_do((Eo *)o, evas_obj_table_pack_get(child, col, row, colspan, rowspan, &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 *);
- unsigned short *col = va_arg(*list, unsigned short *);
- unsigned short *row = va_arg(*list, unsigned short *);
- unsigned short *colspan = va_arg(*list, unsigned short *);
- unsigned short *rowspan = va_arg(*list, unsigned short *);
- Eina_Bool *ret = va_arg(*list, Eina_Bool *);
- if (ret) *ret = EINA_FALSE;
-
Evas_Object_Table_Option *opt;
opt = _evas_object_table_option_get(child);
if (row) *row = 0;
if (colspan) *colspan = 0;
if (rowspan) *rowspan = 0;
- return;
+ return EINA_FALSE;
}
if (col) *col = opt->col;
if (row) *row = opt->row;
if (colspan) *colspan = opt->colspan;
if (rowspan) *rowspan = opt->rowspan;
- if (ret) *ret = EINA_TRUE;
-}
-
-EAPI Eina_Bool
-evas_object_table_pack(Evas_Object *o, Evas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan)
-{
- Eina_Bool ret = EINA_FALSE;
- eo_do(o, evas_obj_table_pack(child, col, row, colspan, rowspan, &ret));
- return ret;
+
+ return EINA_TRUE;
}
-static void
-_pack(Eo *o, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_evas_table_pack(Eo *o, Evas_Table_Data *priv, Evas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan)
{
- Evas_Object *child = va_arg(*list, Evas_Object *);
- unsigned short col = va_arg(*list, int);
- unsigned short row = va_arg(*list, int);
- unsigned short colspan = va_arg(*list, int);
- unsigned short rowspan = va_arg(*list, int);
- Eina_Bool *ret = va_arg(*list, Eina_Bool *);
- if (ret) *ret = EINA_FALSE;
Eina_Bool optalloc = EINA_FALSE;
Evas_Object_Table_Option *opt;
- Evas_Object_Table_Data *priv = _pd;
-
if (colspan < 1)
{
ERR("colspan < 1");
- return;
+ return EINA_FALSE;
}
if ((0xffff - col) < colspan)
{
ERR("col + colspan > 0xffff");
- return;
+ return EINA_FALSE;
}
if ((col + colspan) >= 0x7ffff)
{
if (rowspan < 1)
{
ERR("rowspan < 1");
- return;
+ return EINA_FALSE;
}
if ((0xffff - row) < rowspan)
{
ERR("row + rowspan > 0xffff");
- return;
+ return EINA_FALSE;
}
if ((row + rowspan) >= 0x7ffff)
{
if (!opt)
{
ERR("could not allocate table option data.");
- return;
+ return EINA_FALSE;
}
optalloc = EINA_TRUE;
}
}
_evas_object_table_cache_invalidate(priv);
evas_object_smart_changed(o);
- if (ret) *ret = EINA_TRUE;
+
+ return EINA_TRUE;
}
static void
-_evas_object_table_remove_opt(Evas_Object_Table_Data *priv, Evas_Object_Table_Option *opt)
+_evas_object_table_remove_opt(Evas_Table_Data *priv, Evas_Object_Table_Option *opt)
{
Eina_List *l;
int max_row, max_col, was_greatest;
}
}
-EAPI Eina_Bool
-evas_object_table_unpack(Evas_Object *o, Evas_Object *child)
-{
- Eina_Bool ret = EINA_FALSE;
- eo_do(o, evas_obj_table_unpack(child, &ret));
- return ret;
-}
-
-static void
-_unpack(Eo *o, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_evas_table_unpack(Eo *o, Evas_Table_Data *priv, Evas_Object *child)
{
- Evas_Object *child = va_arg(*list, Evas_Object *);
- Eina_Bool *ret = va_arg(*list, Eina_Bool *);
- if (ret) *ret = EINA_FALSE;
-
Evas_Object_Table_Option *opt;
- Evas_Object_Table_Data *priv = _pd;
-
if (o != evas_object_smart_parent_get(child))
{
ERR("cannot unpack child from incorrect table!");
- return;
+ return EINA_FALSE;
}
opt = _evas_object_table_option_del(child);
if (!opt)
{
ERR("cannot unpack child with no packing option!");
- return;
+ return EINA_FALSE;
}
_evas_object_table_child_disconnect(o, child);
_evas_object_table_cache_invalidate(priv);
evas_object_smart_changed(o);
- if (ret) *ret = EINA_TRUE;
-}
-
-EAPI void
-evas_object_table_clear(Evas_Object *o, Eina_Bool clear)
-{
- eo_do(o, evas_obj_table_clear(clear));
+ return EINA_TRUE;
}
-static void
-_clear(Eo *o, void *_pd, va_list *list)
+EOLIAN static void
+_evas_table_clear(Eo *o, Evas_Table_Data *priv, Eina_Bool clear)
{
- Eina_Bool clear = va_arg(*list, int);
-
Evas_Object_Table_Option *opt;
- Evas_Object_Table_Data *priv = _pd;
-
EINA_LIST_FREE(priv->children, opt)
{
_evas_object_table_child_disconnect(o, opt->obj);
evas_object_smart_changed(o);
}
-EAPI void
-evas_object_table_col_row_size_get(const Evas_Object *o, int *cols, int *rows)
-{
- eo_do((Eo *)o, evas_obj_table_col_row_size_get(cols, rows));
-}
-
-static void
-_col_row_size_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_evas_table_col_row_size_get(Eo *o EINA_UNUSED, Evas_Table_Data *priv, int *cols, int *rows)
{
- int *cols = va_arg(*list, int *);
- int *rows = va_arg(*list, int *);
-
- const Evas_Object_Table_Data *priv = _pd;
if (priv)
{
if (cols) *cols = priv->size.cols;
}
}
-EAPI Eina_Iterator *
-evas_object_table_iterator_new(const Evas_Object *o)
+EOLIAN static Eina_Iterator*
+_evas_table_iterator_new(Eo *o, Evas_Table_Data *priv)
{
- Eina_Iterator *ret = NULL;
- eo_do((Eo *)o, evas_obj_table_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_Table_Iterator *it;
- const Evas_Object_Table_Data *priv = _pd;
-
if (!priv->children)
{
- *ret = NULL;
- return;
+ return NULL;
}
it = calloc(1, sizeof(Evas_Object_Table_Iterator));
if (!it)
{
- *ret = NULL;
- return;
+ return NULL;
}
EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_evas_object_table_iterator_get_container);
it->iterator.free = FUNC_ITERATOR_FREE(_evas_object_table_iterator_free);
- *ret = &it->iterator;
-}
-
-EAPI Eina_Accessor *
-evas_object_table_accessor_new(const Evas_Object *o)
-{
- Eina_Accessor *ret = NULL;
- eo_do((Eo *)o, evas_obj_table_accessor_new(&ret));
- return ret;
+ return &it->iterator;
}
-static void
-_accessor_new(Eo *o, void *_pd, va_list *list)
+EOLIAN static Eina_Accessor*
+_evas_table_accessor_new(Eo *o, Evas_Table_Data *priv)
{
- Eina_Accessor **ret = va_arg(*list, Eina_Accessor **);
-
Evas_Object_Table_Accessor *it;
- const Evas_Object_Table_Data *priv = _pd;
-
- if (!priv->children)
- {
- *ret = NULL;
- return;
- }
+ if (!priv->children) return NULL;
it = calloc(1, sizeof(Evas_Object_Table_Accessor));
- if (!it)
- {
- *ret = NULL;
- return;
- }
+ if (!it) return NULL;
EINA_MAGIC_SET(&it->accessor, EINA_MAGIC_ACCESSOR);
it->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(_evas_object_table_accessor_get_container);
it->accessor.free = FUNC_ACCESSOR_FREE(_evas_object_table_accessor_free);
- *ret = &it->accessor;
-}
-
-EAPI Eina_List *
-evas_object_table_children_get(const Evas_Object *o)
-{
- Eina_List *ret = NULL;
- eo_do((Eo *)o, evas_obj_table_children_get(&ret));
- return ret;
+ return &it->accessor;
}
-static void
-_children_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_List*
+_evas_table_children_get(Eo *o EINA_UNUSED, Evas_Table_Data *priv)
{
- Eina_List **ret = va_arg(*list, Eina_List **);
-
Eina_List *new_list = NULL, *l;
Evas_Object_Table_Option *opt;
- const Evas_Object_Table_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;
}
Evas_Object *
return NULL;
}
-EAPI Eina_Bool
-evas_object_table_mirrored_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_evas_table_mirrored_get(Eo *o EINA_UNUSED, Evas_Table_Data *priv)
{
- Eina_Bool ret = EINA_FALSE;
- eo_do((Eo *)obj, evas_obj_table_mirrored_get(&ret));
- return ret;
-}
-
-static void
-_mirrored_get(Eo *o EINA_UNUSED, void *_pd, va_list *list)
-{
- Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
- const Evas_Object_Table_Data *priv = _pd;
-
- *ret = priv->is_mirrored;
-}
-
-EAPI void
-evas_object_table_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
-{
- eo_do(obj, evas_obj_table_mirrored_set(mirrored));
+ return priv->is_mirrored;
}
-static void
-_mirrored_set(Eo *o, void *_pd, va_list *list)
+EOLIAN static void
+_evas_table_mirrored_set(Eo *o, Evas_Table_Data *priv, Eina_Bool mirrored)
{
- Eina_Bool mirrored = va_arg(*list, int);
-
- Evas_Object_Table_Data *priv = _pd;
if (priv->is_mirrored != mirrored)
{
priv->is_mirrored = mirrored;
}
}
-static void
-_class_constructor(Eo_Class *klass)
+EOLIAN static void
+_evas_table_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_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_ADD_TO), _add_to),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_HOMOGENEOUS_SET), _homogeneous_set),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_HOMOGENEOUS_GET), _homogeneous_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_ALIGN_SET), _align_set),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_ALIGN_GET), _align_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_PADDING_SET), _padding_set),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_PADDING_GET), _padding_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_PACK_GET), _pack_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_PACK), _pack),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_UNPACK), _unpack),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_CLEAR), _clear),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_COL_ROW_SIZE_GET), _col_row_size_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_ITERATOR_NEW), _iterator_new),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_ACCESSOR_NEW), _accessor_new),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_CHILDREN_GET), _children_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_MIRRORED_GET), _mirrored_get),
- EO_OP_FUNC(EVAS_OBJ_TABLE_ID(EVAS_OBJ_TABLE_SUB_ID_MIRRORED_SET), _mirrored_set),
- EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _smart_add),
- EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _smart_del),
- EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _smart_resize),
- EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_CALCULATE), _smart_calculate),
- EO_OP_FUNC_SENTINEL
- };
- eo_class_funcs_set(klass, func_desc);
-
- evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
+ evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
}
-static const Eo_Op_Description op_desc[] = {
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_ADD_TO, "Create a table that is child of a given element parent."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_HOMOGENEOUS_SET, "Set how this table should layout children."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_HOMOGENEOUS_GET, "Get the current layout homogeneous mode."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_ALIGN_SET, "Set the alignment of the whole bounding box of contents."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_ALIGN_GET, "Get alignment of the whole bounding box of contents."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_PADDING_SET, "Set padding between cells."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_PADDING_GET, "Get padding between cells."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_PACK_GET, "Get packing location of a child of table."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_PACK, "Add a new child to a table object or set its current packing."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_UNPACK, "Remove child from table."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_CLEAR, "Faster way to remove all child objects from a table object."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_COL_ROW_SIZE_GET, "Get the number of columns and rows this table takes."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_ITERATOR_NEW, "Get an iterator to walk the list of children for the table."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_ACCESSOR_NEW, "Get an accessor to get random access to the list of children for the table."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_CHILDREN_GET, "Get the list of children for the table."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_MIRRORED_GET, "Gets the mirrored mode of the table."),
- EO_OP_DESCRIPTION(EVAS_OBJ_TABLE_SUB_ID_MIRRORED_SET, "Sets the mirrored mode of the table."),
- EO_OP_DESCRIPTION_SENTINEL
-};
-static const Eo_Class_Description class_desc = {
- EO_VERSION,
- MY_CLASS_NAME,
- EO_CLASS_TYPE_REGULAR,
- EO_CLASS_DESCRIPTION_OPS(&EVAS_OBJ_TABLE_BASE_ID, op_desc, EVAS_OBJ_TABLE_SUB_ID_LAST),
- NULL,
- sizeof(Evas_Object_Table_Data),
- _class_constructor,
- NULL
-};
-
-EO_DEFINE_CLASS(evas_object_table_class_get, &class_desc, EVAS_OBJ_SMART_CLIPPED_CLASS, NULL);
+#include "canvas/evas_table.eo.c"
--- /dev/null
+class Evas_Table (Evas_Smart_Clipped)
+{
+ legacy_prefix: evas_object_table;
+ eo_prefix: evas_obj_table;
+ properties {
+ homogeneous {
+ set {
+ /*@
+ @brief Set how this table should layout children.
+
+ @todo consider aspect hint and respect it.
+
+ @par EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE
+ If table does not use homogeneous mode then columns and rows will
+ be calculated based on hints of individual cells. This operation
+ mode is more flexible, but more complex and heavy to calculate as
+ well. @b Weight properties are handled as a boolean expand. Negative
+ alignment will be considered as 0.5. This is the default.
+
+ @todo @c EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE should balance weight.
+
+ @par EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE
+ When homogeneous is relative to table the own table size is divided
+ equally among children, filling the whole table area. That is, if
+ table has @c WIDTH and @c COLUMNS, each cell will get <tt>WIDTH /
+ COLUMNS</tt> pixels. If children have minimum size that is larger
+ than this amount (including padding), then it will overflow and be
+ aligned respecting the alignment hint, possible overlapping sibling
+ cells. @b Weight hint is used as a boolean, if greater than zero it
+ will make the child expand in that axis, taking as much space as
+ possible (bounded to maximum size hint). Negative alignment will be
+ considered as 0.5.
+
+ @par EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM
+ When homogeneous is relative to item it means the greatest minimum
+ cell size will be used. That is, if no element is set to expand,
+ the table will have its contents to a minimum size, the bounding
+ box of all these children will be aligned relatively to the table
+ object using evas_object_table_align_get(). If the table area is
+ too small to hold this minimum bounding box, then the objects will
+ keep their size and the bounding box will overflow the box area,
+ still respecting the alignment. @b Weight hint is used as a
+ boolean, if greater than zero it will make that cell expand in that
+ axis, toggling the <b>expand mode</b>, which makes the table behave
+ much like @b EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE, except that the
+ bounding box will overflow and items will not overlap siblings. If
+ no minimum size is provided at all then the table will fallback to
+ expand mode as well. */
+ }
+ get {
+ /*@
+ Get the current layout homogeneous mode.
+
+ @see evas_object_table_homogeneous_set() */
+ }
+ values {
+ Evas_Object_Table_Homogeneous_Mode homogeneous;
+ }
+ }
+ align {
+ set {
+ /*@
+ Set the alignment of the whole bounding box of contents. */
+ }
+ get {
+ /*@
+ Get alignment of the whole bounding box of contents. */
+ }
+ values {
+ double horizontal;
+ double vertical;
+ }
+ }
+ padding {
+ set {
+ /*@
+ Set padding between cells. */
+ }
+ get {
+ /*@
+ Get padding between cells. */
+ }
+ values {
+ Evas_Coord horizontal;
+ Evas_Coord vertical;
+ }
+ }
+ mirrored {
+ set {
+ /*@
+ Sets the mirrored mode of the table. In mirrored mode the table items go
+ from right to left instead of left to right. That is, 1,1 is top right, not
+ top left.
+
+ @since 1.1 */
+ }
+ get {
+ /*@
+ Gets the mirrored mode of the table.
+
+ @return @c EINA_TRUE if it's a mirrored table, @c EINA_FALSE otherwise.
+ @since 1.1
+ @see evas_object_table_mirrored_set() */
+ }
+ values {
+ Eina_Bool mirrored; /*@ the mirrored mode to set */
+ }
+ }
+ col_row_size {
+ get {
+ /*@
+ Get the number of columns and rows this table takes.
+
+ @note columns and rows are virtual entities, one can specify a table
+ with a single object that takes 4 columns and 5 rows. The only
+ difference for a single cell table is that paddings will be
+ accounted proportionally. */
+ }
+ values {
+ int cols;
+ int rows;
+ }
+ }
+ children {
+ get {
+ /*@
+ Get the list of children for the table.
+
+ @note This is a duplicate of the list kept by the table internally.
+ It's up to the user to destroy it when it no longer needs it.
+ It's possible to remove objects from the table when walking this
+ list, but these removals won't be reflected on it. */
+ return Eina_List * @warn_unused;
+ }
+ }
+ }
+ methods {
+ clear {
+ /*@
+ Faster way to remove all child objects from a table object. */
+
+ params {
+ @in Eina_Bool clear; /*@ if true, it will delete just removed children. */
+ }
+ }
+ accessor_new {
+ /*@
+ Get an accessor to get random access to the list of children for the table.
+
+ @note Do not remove or delete objects while walking the list. */
+
+ const;
+ return Eina_Accessor * @warn_unused;
+ }
+ iterator_new {
+ /*@
+ Get an iterator to walk the list of children for the table.
+
+ @note Do not remove or delete objects while walking the list. */
+
+ const;
+ return Eina_Iterator * @warn_unused;
+ }
+ add_to {
+ /*@
+ @brief Create a table that is child of a given element @a parent.
+
+ @see evas_object_table_add() */
+
+ return Evas_Object * @warn_unused;
+ }
+ pack_get {
+ /*@
+ Get packing location of a child of table
+
+ @return 1 on success, 0 on failure.
+ @since 1.1 */
+
+ const;
+ return Eina_Bool;
+ params {
+ @in Evas_Object *child; /*@ The child object to add. */
+ @out unsigned short col; /*@ pointer to store relative-horizontal position to place child. */
+ @out unsigned short row; /*@ pointer to store relative-vertical position to place child. */
+ @out unsigned short colspan; /*@ pointer to store how many relative-horizontal position to use for this child. */
+ @out unsigned short rowspan; /*@ pointer to store how many relative-vertical position to use for this child. */
+ }
+ }
+ pack {
+ /*@
+ Add a new child to a table object or set its current packing.
+
+ Note that columns and rows only guarantee 16bit unsigned values at best.
+ That means that col + colspan AND row + rowspan must fit inside 16bit
+ unsigned values cleanly. You will be warned once values exceed 15bit
+ storage, and attempting to use values not able to fit in 16bits will
+ result in failure.
+
+ @return 1 on success, 0 on failure. */
+
+ return Eina_Bool;
+ params {
+ @in Evas_Object *child @nonull; /*@ The child object to add. */
+ @in unsigned short col; /*@ relative-horizontal position to place child. */
+ @in unsigned short row; /*@ relative-vertical position to place child. */
+ @in unsigned short colspan; /*@ how many relative-horizontal position to use for this child. */
+ @in unsigned short rowspan; /*@ how many relative-vertical position to use for this child. */
+ }
+ }
+ unpack {
+ /*@
+ Remove child from table.
+
+ @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_table_clear() instead.
+
+ @return 1 on success, 0 on failure. */
+
+ return Eina_Bool;
+ params {
+ @in Evas_Object *child @nonull;
+ }
+ }
+ }
+ implements {
+ class::constructor;
+ Eo_Base::constructor;
+ Evas_Smart::add;
+ Evas_Smart::del;
+ Evas_Smart::calculate;
+ Evas_Smart::resize;
+ }
+}