forked from enlightenment/efl
make it easy to write bindings for box.
giving an extra void *user_data to layout function is now easy to write bindings, just give the callback to be a generic function that will call the language/binding specific function handled as user_data. Example, for python we can use: void _layout_dispatcher(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) { PyObject *pyobj = data, *args; args = PyTyple_New(1); PyTuple_SET_ITEM(args, 0, Evas_object_from_instance(o)); PyObject_Call(pyobj, args, NULL); Py_DECREF(args); } evas_object_box_layout_set(o, _layout_dispatcher, pyobj, Py_DecRef); SVN revision: 37640
This commit is contained in:
parent
e20d52ab8b
commit
4e108162aa
|
@ -977,7 +977,7 @@ extern "C" {
|
|||
typedef struct _Evas_Object_Box_Api Evas_Object_Box_Api;
|
||||
typedef struct _Evas_Object_Box_Data Evas_Object_Box_Data;
|
||||
typedef struct _Evas_Object_Box_Option Evas_Object_Box_Option;
|
||||
typedef void (*Evas_Object_Box_Layout)(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
typedef void (*Evas_Object_Box_Layout)(Evas_Object *o, Evas_Object_Box_Data *priv, void *user_data);
|
||||
|
||||
struct _Evas_Object_Box_Api
|
||||
{
|
||||
|
@ -1007,7 +1007,11 @@ extern "C" {
|
|||
Evas_Coord h, v;
|
||||
} pad;
|
||||
Eina_List *children;
|
||||
Evas_Object_Box_Layout layout;
|
||||
struct {
|
||||
Evas_Object_Box_Layout cb;
|
||||
void *data;
|
||||
void (*free_data)(void *data);
|
||||
} layout;
|
||||
};
|
||||
|
||||
struct _Evas_Object_Box_Option
|
||||
|
@ -1016,20 +1020,20 @@ extern "C" {
|
|||
};
|
||||
|
||||
EAPI void evas_object_box_smart_set(Evas_Object_Box_Api *api);
|
||||
EAPI void evas_object_box_layout_set(Evas_Object *o, Evas_Object_Box_Layout cb);
|
||||
EAPI void evas_object_box_layout_set(Evas_Object *o, Evas_Object_Box_Layout cb, const void *data, void (*free_data)(void *data));
|
||||
|
||||
EAPI Evas_Object *evas_object_box_add(Evas *evas);
|
||||
EAPI Evas_Object *evas_object_box_add_to(Evas_Object *parent);
|
||||
|
||||
EAPI void evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv);
|
||||
EAPI void evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
EAPI void evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
|
||||
|
||||
EAPI void evas_object_box_align_set(Evas_Object *o, double horizontal, double vertical);
|
||||
EAPI void evas_object_box_align_get(const Evas_Object *o, double *horizontal, double *vertical);
|
||||
|
|
|
@ -333,7 +333,9 @@ _evas_object_box_smart_add(Evas_Object *o)
|
|||
priv->align.v = 0.5;
|
||||
priv->pad.h = 0;
|
||||
priv->pad.v = 0;
|
||||
priv->layout = evas_object_box_layout_horizontal;
|
||||
priv->layout.cb = evas_object_box_layout_horizontal;
|
||||
priv->layout.data = NULL;
|
||||
priv->layout.free_data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -362,6 +364,9 @@ _evas_object_box_smart_del(Evas_Object *o)
|
|||
l = eina_list_remove_list(l, l);
|
||||
}
|
||||
|
||||
if (priv->layout.data && priv->layout.free_data)
|
||||
priv->layout.free_data(priv->layout.data);
|
||||
|
||||
_parent_sc.del(o);
|
||||
}
|
||||
|
||||
|
@ -375,8 +380,8 @@ static void
|
|||
_evas_object_box_smart_calculate(Evas_Object *o)
|
||||
{
|
||||
EVAS_OBJECT_BOX_DATA_GET_OR_RETURN(o, priv);
|
||||
if (priv->layout)
|
||||
priv->layout(o, priv);
|
||||
if (priv->layout.cb)
|
||||
priv->layout.cb(o, priv, priv->layout.data);
|
||||
else
|
||||
fprintf(stderr, "ERROR: no layout function set for %p box.\n", o);
|
||||
}
|
||||
|
@ -478,10 +483,16 @@ evas_object_box_smart_set(Evas_Object_Box_Api *api)
|
|||
* etc.).
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_set(Evas_Object *o, Evas_Object_Box_Layout cb)
|
||||
evas_object_box_layout_set(Evas_Object *o, Evas_Object_Box_Layout cb, const void *data, void (*free_data)(void *data))
|
||||
{
|
||||
EVAS_OBJECT_BOX_DATA_GET_OR_RETURN(o, priv);
|
||||
priv->layout = cb;
|
||||
|
||||
if (priv->layout.data && priv->layout.free_data)
|
||||
priv->layout.free_data(priv->layout.data);
|
||||
|
||||
priv->layout.cb = cb;
|
||||
priv->layout.data = (void *)data;
|
||||
priv->layout.free_data = free_data;
|
||||
evas_object_smart_changed(o);
|
||||
}
|
||||
|
||||
|
@ -656,7 +667,7 @@ _evas_object_box_layout_horizontal_weight_apply(Evas_Object_Box_Data *priv, Evas
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int pad_inc = 0, sub_pixel = 0;
|
||||
int req_w, global_pad, remaining;
|
||||
|
@ -816,7 +827,7 @@ _evas_object_box_layout_vertical_weight_apply(Evas_Object_Box_Data *priv, Evas_O
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int pad_inc = 0, sub_pixel = 0;
|
||||
int req_h, global_pad, remaining;
|
||||
|
@ -947,7 +958,7 @@ evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv)
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int cell_sz, share, inc;
|
||||
int sub_pixel = 0;
|
||||
|
@ -1014,7 +1025,7 @@ evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Da
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int cell_sz, share, inc;
|
||||
int sub_pixel = 0;
|
||||
|
@ -1113,7 +1124,7 @@ evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int remaining, global_pad, pad_inc = 0, sub_pixel = 0;
|
||||
int cell_sz = 0;
|
||||
|
@ -1202,7 +1213,7 @@ evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Obje
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int remaining, global_pad, pad_inc = 0, sub_pixel = 0;
|
||||
int cell_sz = 0;
|
||||
|
@ -1381,7 +1392,7 @@ _evas_object_box_layout_flow_horizontal_row_info_collect(Evas_Object_Box_Data *p
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int n_children, v_justify;
|
||||
int r, row_count = 0;
|
||||
|
@ -1550,7 +1561,7 @@ _evas_object_box_layout_flow_vertical_col_info_collect(Evas_Object_Box_Data *pri
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
int n_children, h_justify;
|
||||
int c, col_count;
|
||||
|
@ -1668,7 +1679,7 @@ evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv)
|
|||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv)
|
||||
evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
|
||||
{
|
||||
Eina_List *l;
|
||||
Evas_Coord ox, oy, ow, oh;
|
||||
|
|
Loading…
Reference in New Issue