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.c \
elm_gesture_layer.eo.h \ elm_gesture_layer.eo.h \
elm_glview.eo.c \ elm_glview.eo.c \
elm_glview.eo.h elm_glview.eo.h \
elm_grid.eo.c \
elm_grid.eo.h
EXTRA_DIST += \ EXTRA_DIST += \
elm_widget.eo \ elm_widget.eo \
@ -624,7 +626,8 @@ EXTRA_DIST += \
elm_entry.eo \ elm_entry.eo \
elm_flip.eo \ elm_flip.eo \
elm_gesture_layer.eo \ elm_gesture_layer.eo \
elm_glview.eo elm_glview.eo \
elm_grid.eo
nodist_includesunstable_HEADERS = \ nodist_includesunstable_HEADERS = \
elm_widget.eo.h \ elm_widget.eo.h \
@ -659,5 +662,6 @@ nodist_includesunstable_HEADERS = \
elm_entry.eo.h \ elm_entry.eo.h \
elm_flip.eo.h \ elm_flip.eo.h \
elm_gesture_layer.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_priv.h"
#include "elm_widget_grid.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 ELM_OBJ_GRID_CLASS
#define MY_CLASS_NAME "Elm_Grid" #define MY_CLASS_NAME "Elm_Grid"
#define MY_CLASS_NAME_LEGACY "elm_grid" #define MY_CLASS_NAME_LEGACY "elm_grid"
static void EOLIAN static Eina_Bool
_elm_grid_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) _elm_grid_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *); return EINA_TRUE;
*ret = EINA_TRUE;
} }
static void EOLIAN static Eina_Bool
_elm_grid_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elm_grid_elm_widget_focus_next(Eo *obj, void *_pd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next)
{ {
const Eina_List *items; const Eina_List *items;
Eina_List *(*list_free)(Eina_List *list); Eina_List *(*list_free)(Eina_List *list);
void *(*list_data_get)(const 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; Eina_Bool int_ret;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
/* Focus chain */ /* Focus chain */
/* TODO: Change this to use other 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_data_get = eina_list_data_get;
list_free = eina_list_free; 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); int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next);
if (list_free) list_free((Eina_List *)items); if (list_free) list_free((Eina_List *)items);
if (ret) *ret = int_ret; return int_ret;
} }
static void EOLIAN static Eina_Bool
_elm_grid_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) _elm_grid_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *); return EINA_TRUE;
*ret = EINA_TRUE;
} }
static void EOLIAN static Eina_Bool
_elm_grid_smart_focus_direction(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _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; const Eina_List *items;
Eina_List *(*list_free)(Eina_List *list); Eina_List *(*list_free)(Eina_List *list);
void *(*list_data_get)(const 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; Eina_Bool int_ret;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
/* Focus chain */ /* Focus chain */
/* TODO: Change this to use other 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_data_get = eina_list_data_get;
list_free = eina_list_free; 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, 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 (list_free) list_free((Eina_List *)items);
if (ret) *ret = int_ret; return int_ret;
} }
static void static void
@ -114,23 +100,21 @@ _mirrored_set(Evas_Object *obj, Eina_Bool rtl)
evas_object_grid_mirrored_set(wd->resize_obj, rtl); evas_object_grid_mirrored_set(wd->resize_obj, rtl);
} }
static void EOLIAN static Eina_Bool
_elm_grid_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _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; Eina_Bool int_ret;
eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&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)); _mirrored_set(obj, elm_widget_mirrored_get(obj));
if (ret) *ret = EINA_TRUE; return EINA_TRUE;
} }
static void EOLIAN static void
_elm_grid_smart_add(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) _elm_grid_evas_smart_add(Eo *obj, void *_pd EINA_UNUSED)
{ {
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
Evas_Object *grid; 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)); eo_do(obj, elm_obj_widget_theme_apply(NULL));
} }
static void EOLIAN static void
_elm_grid_smart_del(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) _elm_grid_evas_smart_del(Eo *obj, void *_pd EINA_UNUSED)
{ {
Eina_List *l; Eina_List *l;
Evas_Object *child; Evas_Object *child;
@ -180,111 +164,50 @@ elm_grid_add(Evas_Object *parent)
return obj; return obj;
} }
static void EOLIAN static void
_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) _elm_grid_eo_base_constructor(Eo *obj, void *_pd EINA_UNUSED)
{ {
eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do_super(obj, MY_CLASS, eo_constructor());
eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY)); eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY));
} }
EAPI void EOLIAN static void
elm_grid_size_set(Evas_Object *obj, _elm_grid_size_set(Eo *obj, void *_pd EINA_UNUSED, Evas_Coord w, Evas_Coord h)
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); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
evas_object_grid_size_set(wd->resize_obj, w, h); evas_object_grid_size_set(wd->resize_obj, w, h);
} }
EAPI void EOLIAN static void
elm_grid_size_get(const Evas_Object *obj, _elm_grid_size_get(Eo *obj, void *_pd EINA_UNUSED, Evas_Coord *w, Evas_Coord *h)
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); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
evas_object_grid_size_get(wd->resize_obj, w, h); evas_object_grid_size_get(wd->resize_obj, w, h);
} }
EAPI void EOLIAN static void
elm_grid_pack(Evas_Object *obj, _elm_grid_pack(Eo *obj, void *_pd EINA_UNUSED, Evas_Object *subobj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
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_DATA_GET_OR_RETURN(obj, wd);
elm_widget_sub_object_add(obj, subobj); elm_widget_sub_object_add(obj, subobj);
evas_object_grid_pack(wd->resize_obj, subobj, x, y, w, h); evas_object_grid_pack(wd->resize_obj, subobj, x, y, w, h);
} }
EAPI void EOLIAN static void
elm_grid_unpack(Evas_Object *obj, _elm_grid_unpack(Eo *obj, void *_pd EINA_UNUSED, Evas_Object *subobj)
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_DATA_GET_OR_RETURN(obj, wd);
elm_widget_sub_object_del(obj, subobj); elm_widget_sub_object_del(obj, subobj);
evas_object_grid_unpack(wd->resize_obj, subobj); evas_object_grid_unpack(wd->resize_obj, subobj);
} }
EAPI void EOLIAN static void
elm_grid_clear(Evas_Object *obj, _elm_grid_clear(Eo *obj, void *_pd EINA_UNUSED, Eina_Bool clear)
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; Eina_List *chld;
Evas_Object *o; Evas_Object *o;
@ -331,71 +254,17 @@ elm_grid_pack_get(Evas_Object *subobj,
(wd->resize_obj, subobj, x, y, w, h); (wd->resize_obj, subobj, x, y, w, h);
} }
EAPI Eina_List * EOLIAN static Eina_List*
elm_grid_children_get(const Evas_Object *obj) _elm_grid_children_get(Eo *obj, void *_pd EINA_UNUSED)
{ {
ELM_GRID_CHECK(obj) NULL; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
Eina_List *ret = NULL; return evas_object_grid_children_get(wd->resize_obj);
eo_do((Eo *) obj, elm_obj_grid_children_get(&ret));
return ret;
} }
static void 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); evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
} }
static const Eo_Op_Description op_desc[] = { #include "elm_grid.eo.c"
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);

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() #define ELM_OBJ_GRID_CLASS elm_obj_grid_class_get()
const Eo_Class *elm_obj_grid_class_get(void) EINA_CONST; 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) #define elm_obj_grid_children_get(ret) ELM_OBJ_GRID_ID(ELM_OBJ_GRID_SUB_ID_CHILDREN_GET), EO_TYPECHECK(Eina_List **, ret)
#endif
/** /**
* @} * @}