Eolian: Integration of Grid

This commit is contained in:
Daniel Zaoui 2014-03-23 11:46:17 +02:00
parent 2fe064a1ec
commit 5cb8eedddd
4 changed files with 140 additions and 176 deletions

View File

@ -589,7 +589,9 @@ BUILT_SOURCES = \
elm_gesture_layer.eo.c \
elm_gesture_layer.eo.h \
elm_glview.eo.c \
elm_glview.eo.h
elm_glview.eo.h \
elm_grid.eo.c \
elm_grid.eo.h
EXTRA_DIST += \
elm_widget.eo \
@ -624,7 +626,8 @@ EXTRA_DIST += \
elm_entry.eo \
elm_flip.eo \
elm_gesture_layer.eo \
elm_glview.eo
elm_glview.eo \
elm_grid.eo
nodist_includesunstable_HEADERS = \
elm_widget.eo.h \
@ -659,5 +662,6 @@ nodist_includesunstable_HEADERS = \
elm_entry.eo.h \
elm_flip.eo.h \
elm_gesture_layer.eo.h \
elm_glview.eo.h
elm_glview.eo.h \
elm_grid.eo.h

View File

@ -7,33 +7,26 @@
#include "elm_priv.h"
#include "elm_widget_grid.h"
EAPI Eo_Op ELM_OBJ_GRID_BASE_ID = EO_NOOP;
#define MY_CLASS ELM_OBJ_GRID_CLASS
#define MY_CLASS_NAME "Elm_Grid"
#define MY_CLASS_NAME_LEGACY "elm_grid"
static void
_elm_grid_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
EOLIAN static Eina_Bool
_elm_grid_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED)
{
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
*ret = EINA_TRUE;
return EINA_TRUE;
}
static void
_elm_grid_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
EOLIAN static Eina_Bool
_elm_grid_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next)
{
const Eina_List *items;
Eina_List *(*list_free)(Eina_List *list);
void *(*list_data_get)(const Eina_List *list);
Elm_Focus_Direction dir = va_arg(*list, Elm_Focus_Direction);
Evas_Object **next = va_arg(*list, Evas_Object **);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
/* Focus chain */
/* TODO: Change this to use other chain */
@ -48,39 +41,32 @@ _elm_grid_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
list_data_get = eina_list_data_get;
list_free = eina_list_free;
if (!items) return;
if (!items) return EINA_FALSE;
}
int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next);
if (list_free) list_free((Eina_List *)items);
if (ret) *ret = int_ret;
return int_ret;
}
static void
_elm_grid_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
EOLIAN static Eina_Bool
_elm_grid_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED)
{
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
*ret = EINA_TRUE;
return EINA_TRUE;
}
static void
_elm_grid_smart_focus_direction(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
EOLIAN static Eina_Bool
_elm_grid_elm_widget_focus_direction(Eo *obj, void *_pd EINA_UNUSED, const Evas_Object *base, double degree, Evas_Object **direction, double *weight)
{
const Eina_List *items;
Eina_List *(*list_free)(Eina_List *list);
void *(*list_data_get)(const Eina_List *list);
Evas_Object *base = va_arg(*list, Evas_Object *);
double degree = va_arg(*list, double);
Evas_Object **direction = va_arg(*list, Evas_Object **);
double *weight = va_arg(*list, double *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
/* Focus chain */
/* TODO: Change this to use other chain */
@ -95,7 +81,7 @@ _elm_grid_smart_focus_direction(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
list_data_get = eina_list_data_get;
list_free = eina_list_free;
if (!items) return;
if (!items) return EINA_FALSE;
}
int_ret = elm_widget_focus_list_direction_get(obj, base, items, list_data_get,
@ -103,7 +89,7 @@ _elm_grid_smart_focus_direction(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
if (list_free) list_free((Eina_List *)items);
if (ret) *ret = int_ret;
return int_ret;
}
static void
@ -114,23 +100,21 @@ _mirrored_set(Evas_Object *obj, Eina_Bool rtl)
evas_object_grid_mirrored_set(wd->resize_obj, rtl);
}
static void
_elm_grid_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
EOLIAN static Eina_Bool
_elm_grid_elm_widget_theme_apply(Eo *obj, void *sd EINA_UNUSED)
{
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret;
eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret));
if (!int_ret) return;
if (!int_ret) return EINA_FALSE;
_mirrored_set(obj, elm_widget_mirrored_get(obj));
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
static void
_elm_grid_smart_add(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_grid_evas_smart_add(Eo *obj, void *_pd EINA_UNUSED)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
Evas_Object *grid;
@ -148,8 +132,8 @@ _elm_grid_smart_add(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
eo_do(obj, elm_obj_widget_theme_apply(NULL));
}
static void
_elm_grid_smart_del(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_grid_evas_smart_del(Eo *obj, void *_pd EINA_UNUSED)
{
Eina_List *l;
Evas_Object *child;
@ -180,111 +164,50 @@ elm_grid_add(Evas_Object *parent)
return obj;
}
static void
_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_grid_eo_base_constructor(Eo *obj, void *_pd EINA_UNUSED)
{
eo_do_super(obj, MY_CLASS, eo_constructor());
eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY));
}
EAPI void
elm_grid_size_set(Evas_Object *obj,
Evas_Coord w,
Evas_Coord h)
EOLIAN static void
_elm_grid_size_set(Eo *obj, void *_pd EINA_UNUSED, Evas_Coord w, Evas_Coord h)
{
ELM_GRID_CHECK(obj);
eo_do(obj, elm_obj_grid_size_set(w, h));
}
static void
_size_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
Evas_Coord w = va_arg(*list, Evas_Coord);
Evas_Coord h = va_arg(*list, Evas_Coord);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
evas_object_grid_size_set(wd->resize_obj, w, h);
}
EAPI void
elm_grid_size_get(const Evas_Object *obj,
Evas_Coord *w,
Evas_Coord *h)
EOLIAN static void
_elm_grid_size_get(Eo *obj, void *_pd EINA_UNUSED, Evas_Coord *w, Evas_Coord *h)
{
ELM_GRID_CHECK(obj);
eo_do((Eo *) obj, elm_obj_grid_size_get(w, h));
}
static void
_size_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
Evas_Coord *w = va_arg(*list, Evas_Coord *);
Evas_Coord *h = va_arg(*list, Evas_Coord *);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
evas_object_grid_size_get(wd->resize_obj, w, h);
}
EAPI void
elm_grid_pack(Evas_Object *obj,
Evas_Object *subobj,
Evas_Coord x,
Evas_Coord y,
Evas_Coord w,
Evas_Coord h)
EOLIAN static void
_elm_grid_pack(Eo *obj, void *_pd EINA_UNUSED, Evas_Object *subobj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
ELM_GRID_CHECK(obj);
eo_do(obj, elm_obj_grid_pack(subobj, x, y, w, h));
}
static void
_pack(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
Evas_Object *subobj = va_arg(*list, Evas_Object *);
Evas_Coord x = va_arg(*list, Evas_Coord);
Evas_Coord y = va_arg(*list, Evas_Coord);
Evas_Coord w = va_arg(*list, Evas_Coord);
Evas_Coord h = va_arg(*list, Evas_Coord);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
elm_widget_sub_object_add(obj, subobj);
evas_object_grid_pack(wd->resize_obj, subobj, x, y, w, h);
}
EAPI void
elm_grid_unpack(Evas_Object *obj,
Evas_Object *subobj)
EOLIAN static void
_elm_grid_unpack(Eo *obj, void *_pd EINA_UNUSED, Evas_Object *subobj)
{
ELM_GRID_CHECK(obj);
eo_do(obj, elm_obj_grid_unpack(subobj));
}
static void
_unpack(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
Evas_Object *subobj = va_arg(*list, Evas_Object *);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
elm_widget_sub_object_del(obj, subobj);
evas_object_grid_unpack(wd->resize_obj, subobj);
}
EAPI void
elm_grid_clear(Evas_Object *obj,
Eina_Bool clear)
EOLIAN static void
_elm_grid_clear(Eo *obj, void *_pd EINA_UNUSED, Eina_Bool clear)
{
ELM_GRID_CHECK(obj);
eo_do(obj, elm_obj_grid_clear(clear));
}
static void
_clear(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
Eina_Bool clear = va_arg(*list, int);
Eina_List *chld;
Evas_Object *o;
@ -331,71 +254,17 @@ elm_grid_pack_get(Evas_Object *subobj,
(wd->resize_obj, subobj, x, y, w, h);
}
EAPI Eina_List *
elm_grid_children_get(const Evas_Object *obj)
EOLIAN static Eina_List*
_elm_grid_children_get(Eo *obj, void *_pd EINA_UNUSED)
{
ELM_GRID_CHECK(obj) NULL;
Eina_List *ret = NULL;
eo_do((Eo *) obj, elm_obj_grid_children_get(&ret));
return ret;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
return evas_object_grid_children_get(wd->resize_obj);
}
static void
_children_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
_elm_grid_class_constructor(Eo_Class *klass)
{
Eina_List **ret = va_arg(*list, Eina_List **);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
*ret = evas_object_grid_children_get(wd->resize_obj);
return;
}
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_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_grid_smart_add),
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_grid_smart_del),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_grid_smart_theme),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_grid_smart_focus_next_manager_is),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_grid_smart_focus_next),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_grid_smart_focus_direction_manager_is),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION), _elm_grid_smart_focus_direction),
EO_OP_FUNC(ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_SIZE_SET), _size_set),
EO_OP_FUNC(ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_SIZE_GET), _size_get),
EO_OP_FUNC(ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_PACK), _pack),
EO_OP_FUNC(ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_UNPACK), _unpack),
EO_OP_FUNC(ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_CLEAR), _clear),
EO_OP_FUNC(ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_CHILDREN_GET), _children_get),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_desc);
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
}
static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(ELM_OBJ_GRID_SUB_ID_SIZE_SET, "Set the virtual size of the grid."),
EO_OP_DESCRIPTION(ELM_OBJ_GRID_SUB_ID_SIZE_GET, "Get the virtual size of the grid."),
EO_OP_DESCRIPTION(ELM_OBJ_GRID_SUB_ID_PACK, "Pack child at given position and size."),
EO_OP_DESCRIPTION(ELM_OBJ_GRID_SUB_ID_UNPACK, "Unpack a child from a grid object."),
EO_OP_DESCRIPTION(ELM_OBJ_GRID_SUB_ID_CLEAR, "Faster way to remove all child objects from a grid object."),
EO_OP_DESCRIPTION(ELM_OBJ_GRID_SUB_ID_CHILDREN_GET, "Get the list of the children for the grid."),
EO_OP_DESCRIPTION_SENTINEL
};
static const Eo_Class_Description class_desc = {
EO_VERSION,
MY_CLASS_NAME,
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_GRID_BASE_ID, op_desc, ELM_OBJ_GRID_SUB_ID_LAST),
NULL,
0,
_class_constructor,
NULL
};
EO_DEFINE_CLASS(elm_obj_grid_class_get, &class_desc, ELM_OBJ_WIDGET_CLASS, NULL);
#include "elm_grid.eo.c"

View File

@ -0,0 +1,87 @@
class Elm_Grid (Elm_Widget)
{
eo_prefix: elm_obj_grid;
data: null;
properties {
size {
set {
/*@
Set the virtual size of the grid
@ingroup Grid */
}
get {
/*@
Get the virtual size of the grid
@ingroup Grid */
}
values {
Evas_Coord w; /*@ The virtual width of the grid */
Evas_Coord h; /*@ The virtual height of the grid */
}
}
children {
get {
/*@
Get the list of the 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.
@ingroup Grid */
return Eina_List *;
}
}
}
methods {
clear {
/*@
Faster way to remove all child objects from a grid object.
@ingroup Grid */
params {
@in Eina_Bool clear; /*@ If true, it will delete just removed children */
}
}
unpack {
/*@
Unpack a child from a grid object
@ingroup Grid */
params {
@in Evas_Object *subobj; /*@ The child to unpack */
}
}
pack {
/*@
Pack child at given position and size
@ingroup Grid */
params {
@in Evas_Object *subobj; /*@ The child to pack */
@in Evas_Coord x; /*@ The virtual x coord at which to pack it */
@in Evas_Coord y; /*@ The virtual y coord at which to pack it */
@in Evas_Coord w; /*@ The virtual width at which to pack it */
@in Evas_Coord h; /*@ The virtual height at which to pack it */
}
}
}
implements {
class::constructor;
Eo_Base::constructor;
Evas_Smart::add;
Evas_Smart::del;
Elm_Widget::focus_direction;
Elm_Widget::focus_next_manager_is;
Elm_Widget::focus_next;
Elm_Widget::focus_direction_manager_is;
Elm_Widget::theme_apply;
}
}

View File

@ -3,6 +3,9 @@
*
* @{
*/
#include "elm_grid.eo.h"
#if 0
#define ELM_OBJ_GRID_CLASS elm_obj_grid_class_get()
const Eo_Class *elm_obj_grid_class_get(void) EINA_CONST;
@ -100,6 +103,7 @@ enum
*/
#define elm_obj_grid_children_get(ret) ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_CHILDREN_GET), EO_TYPECHECK(Eina_List **, ret)
#endif
/**
* @}