2016-11-03 08:45:42 -07:00
|
|
|
#include "edje_private.h"
|
|
|
|
#include "edje_part_helper.h"
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#define MY_CLASS EFL_CANVAS_LAYOUT_PART_CLASS
|
2016-11-03 08:45:42 -07:00
|
|
|
|
2017-06-21 17:05:41 -07:00
|
|
|
PROXY_IMPLEMENTATION(other, MY_CLASS, EINA_FALSE)
|
2017-05-29 21:52:22 -07:00
|
|
|
#undef PROXY_IMPLEMENTATION
|
|
|
|
|
2017-09-05 22:39:22 -07:00
|
|
|
const char *
|
|
|
|
_part_type_to_string(unsigned char type)
|
2017-06-21 17:05:41 -07:00
|
|
|
{
|
|
|
|
const char *typestr = "UNKNOWN";
|
|
|
|
|
2017-09-05 22:39:22 -07:00
|
|
|
switch (type)
|
2017-06-21 17:05:41 -07:00
|
|
|
{
|
|
|
|
case EDJE_PART_TYPE_RECTANGLE: typestr = "RECTANGLE"; break;
|
|
|
|
case EDJE_PART_TYPE_TEXT: typestr = "TEXT"; break;
|
|
|
|
case EDJE_PART_TYPE_IMAGE: typestr = "IMAGE"; break;
|
|
|
|
case EDJE_PART_TYPE_SWALLOW: typestr = "SWALLOW"; break;
|
|
|
|
case EDJE_PART_TYPE_TEXTBLOCK: typestr = "TEXTBLOCK"; break;
|
|
|
|
case EDJE_PART_TYPE_GRADIENT: typestr = "GRADIENT"; break;
|
|
|
|
case EDJE_PART_TYPE_GROUP: typestr = "GROUP"; break;
|
|
|
|
case EDJE_PART_TYPE_BOX: typestr = "BOX"; break;
|
|
|
|
case EDJE_PART_TYPE_TABLE: typestr = "TABLE"; break;
|
|
|
|
case EDJE_PART_TYPE_EXTERNAL: typestr = "EXTERNAL"; break;
|
|
|
|
case EDJE_PART_TYPE_PROXY: typestr = "PROXY"; break;
|
|
|
|
case EDJE_PART_TYPE_SPACER: typestr = "SPACER"; break;
|
|
|
|
case EDJE_PART_TYPE_MESH_NODE: typestr = "MESH_NODE"; break;
|
|
|
|
case EDJE_PART_TYPE_LIGHT: typestr = "LIGHT"; break;
|
|
|
|
case EDJE_PART_TYPE_CAMERA: typestr = "CAMERA"; break;
|
|
|
|
case EDJE_PART_TYPE_SNAPSHOT: typestr = "SNAPSHOT"; break;
|
|
|
|
case EDJE_PART_TYPE_VECTOR: typestr = "VECTOR"; break;
|
|
|
|
default: break;
|
|
|
|
}
|
|
|
|
|
2017-09-05 22:39:22 -07:00
|
|
|
return typestr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
_part_reuse_error(Efl_Canvas_Layout_Part_Data *pd)
|
2017-09-05 22:39:22 -07:00
|
|
|
{
|
|
|
|
Edje *ed;
|
|
|
|
|
|
|
|
// TODO: Enable full debug only for eo_debug?
|
|
|
|
// Don't trust pd->ed as it may be invalid now.
|
2017-12-05 19:15:39 -08:00
|
|
|
ed = efl_data_scope_safe_get(pd->obj, EFL_CANVAS_LAYOUT_CLASS);
|
2017-09-05 22:39:22 -07:00
|
|
|
if (!ed)
|
|
|
|
{
|
|
|
|
ERR("A previous misuse of efl_part has been detected. Handles returned "
|
|
|
|
"by efl_part() are valid for a single function call. Did you call "
|
|
|
|
"a non implemented function? obj: %p has been deleted!", pd->obj);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-06-21 17:05:41 -07:00
|
|
|
ERR("A previous misuse of efl_part has been detected. Handles returned "
|
|
|
|
"by efl_part() are valid for a single function call. Did you call "
|
|
|
|
"a non implemented function? obj: %p group: '%s' part: '%s' type: %s%s",
|
2017-09-05 22:39:22 -07:00
|
|
|
pd->obj, ed->group, pd->part, _part_type_to_string(pd->rp->part->type),
|
2017-06-21 17:05:41 -07:00
|
|
|
ed->delete_me ? ". This object is already deleted." : "");
|
|
|
|
}
|
|
|
|
|
2016-11-03 08:45:42 -07:00
|
|
|
PROXY_INIT(box)
|
|
|
|
PROXY_INIT(table)
|
|
|
|
PROXY_INIT(swallow)
|
2017-05-29 04:28:08 -07:00
|
|
|
PROXY_INIT(external)
|
2017-05-30 00:31:19 -07:00
|
|
|
PROXY_INIT(text)
|
2017-05-29 21:52:22 -07:00
|
|
|
PROXY_INIT(other)
|
2018-01-15 23:02:33 -08:00
|
|
|
PROXY_INIT(invalid)
|
2016-11-03 08:45:42 -07:00
|
|
|
|
|
|
|
void
|
|
|
|
_edje_internal_proxy_shutdown(void)
|
|
|
|
{
|
|
|
|
_box_shutdown();
|
|
|
|
_table_shutdown();
|
|
|
|
_swallow_shutdown();
|
2017-05-29 04:28:08 -07:00
|
|
|
_external_shutdown();
|
2017-05-30 00:31:19 -07:00
|
|
|
_text_shutdown();
|
2018-01-15 23:02:33 -08:00
|
|
|
_invalid_shutdown();
|
2017-05-29 21:52:22 -07:00
|
|
|
_other_shutdown();
|
2016-11-03 08:45:42 -07:00
|
|
|
}
|
|
|
|
|
2017-05-25 19:33:58 -07:00
|
|
|
void
|
2017-10-13 02:16:41 -07:00
|
|
|
_edje_real_part_set(Eo *obj EINA_UNUSED, Edje *ed, Edje_Real_Part *rp, const char *part)
|
2017-05-25 19:33:58 -07:00
|
|
|
{
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
Efl_Canvas_Layout_Part_Data *pd;
|
2017-06-21 17:05:41 -07:00
|
|
|
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
pd = efl_data_scope_get(obj, EFL_CANVAS_LAYOUT_PART_CLASS);
|
2017-06-21 17:05:41 -07:00
|
|
|
pd->obj = ed->obj;
|
2017-05-25 19:33:58 -07:00
|
|
|
pd->ed = ed;
|
|
|
|
pd->rp = rp;
|
|
|
|
pd->part = part;
|
2017-06-21 17:05:41 -07:00
|
|
|
efl_parent_set(obj, ed->obj);
|
2017-05-25 19:33:58 -07:00
|
|
|
}
|
2017-05-25 18:52:57 -07:00
|
|
|
|
2017-05-25 19:33:58 -07:00
|
|
|
EOLIAN static Efl_Object *
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_object_finalize(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
|
2017-05-25 19:33:58 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_FALSE_RETURN_VAL(pd->rp && pd->ed && pd->part, NULL);
|
|
|
|
return efl_finalize(efl_super(obj, MY_CLASS));
|
|
|
|
}
|
2017-05-25 18:52:57 -07:00
|
|
|
|
2017-09-13 19:59:44 -07:00
|
|
|
EOLIAN Eina_Rect
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_gfx_geometry_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
|
2017-05-25 19:33:58 -07:00
|
|
|
{
|
|
|
|
Edje_Real_Part *rp = pd->rp;
|
2017-09-13 19:59:44 -07:00
|
|
|
Eina_Rect r = EINA_RECT_ZERO();
|
2017-05-25 19:33:58 -07:00
|
|
|
|
|
|
|
_edje_recalc_do(pd->ed);
|
2017-10-13 02:16:41 -07:00
|
|
|
if (!rp) return r;
|
2017-05-25 19:33:58 -07:00
|
|
|
|
2017-10-13 02:16:41 -07:00
|
|
|
return (Eina_Rect) rp->rect;
|
2017-05-25 19:33:58 -07:00
|
|
|
}
|
2017-05-25 18:52:57 -07:00
|
|
|
|
2017-05-25 19:53:27 -07:00
|
|
|
EOLIAN static void
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_state_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, const char **name, double *val)
|
2017-05-25 19:53:27 -07:00
|
|
|
{
|
|
|
|
const char *str;
|
|
|
|
|
2017-10-13 02:16:41 -07:00
|
|
|
if (!name && !val) return;
|
2017-05-25 19:53:27 -07:00
|
|
|
str = _edje_object_part_state_get(pd->ed, pd->part, val);
|
|
|
|
if (name) *name = str;
|
|
|
|
}
|
|
|
|
|
2017-09-20 20:23:29 -07:00
|
|
|
EOLIAN static Efl_Canvas_Layout_Part_Type
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_part_type_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
|
2017-09-20 20:23:29 -07:00
|
|
|
{
|
|
|
|
Edje_Real_Part *rp;
|
|
|
|
|
|
|
|
rp = _edje_real_part_recursive_get(&pd->ed, pd->part);
|
2017-10-13 02:16:41 -07:00
|
|
|
if (!rp || !rp->part) return EFL_CANVAS_LAYOUT_PART_TYPE_NONE;
|
2017-09-20 20:23:29 -07:00
|
|
|
|
2017-10-13 02:16:41 -07:00
|
|
|
return (Efl_Canvas_Layout_Part_Type) rp->part->type;
|
2017-09-20 20:23:29 -07:00
|
|
|
}
|
|
|
|
|
2017-05-30 07:13:02 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_value_set(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double dx, double dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_value_set(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_value_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double *dx, double *dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_value_get(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_size_set(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double dw, double dh)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_size_set(pd->ed, pd->part, dw, dh);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_size_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double *dw, double *dh)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_size_get(pd->ed, pd->part, dw, dh);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Efl_Ui_Drag_Dir
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_dir_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_dir_get(pd->ed, pd->part);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_step_set(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double dx, double dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_step_set(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_step_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double *dx, double *dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_step_get(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_step_move(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double dx, double dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_step(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_page_set(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double dx, double dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_page_set(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_page_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double *dx, double *dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_page_get(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_efl_canvas_layout_part_efl_ui_drag_drag_page_move(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, double dx, double dy)
|
2017-05-30 07:13:02 -07:00
|
|
|
{
|
2017-10-13 02:16:41 -07:00
|
|
|
return _edje_object_part_drag_page(pd->ed, pd->part, dx, dy);
|
2017-05-30 07:13:02 -07:00
|
|
|
}
|
|
|
|
|
2017-09-05 22:39:22 -07:00
|
|
|
static Eo *
|
2017-10-13 02:16:41 -07:00
|
|
|
_edje_invalid_part_efl_content_get(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd)
|
2017-09-05 22:39:22 -07:00
|
|
|
{
|
|
|
|
ERR("Part '%s' (type: %s) of group '%s' is not a SWALLOW part!", pd->part, _part_type_to_string(pd->rp->type), pd->ed->group);
|
2017-10-13 02:16:41 -07:00
|
|
|
return NULL;
|
2017-09-05 22:39:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2017-10-13 02:16:41 -07:00
|
|
|
_edje_invalid_part_efl_content_set(Eo *obj EINA_UNUSED, Efl_Canvas_Layout_Part_Data *pd, Eo *subobj EINA_UNUSED)
|
2017-09-05 22:39:22 -07:00
|
|
|
{
|
|
|
|
ERR("Part '%s' (type: %s) of group '%s' is not a SWALLOW part!", pd->part, _part_type_to_string(pd->rp->type), pd->ed->group);
|
2017-10-13 02:16:41 -07:00
|
|
|
return EINA_FALSE;
|
2017-09-05 22:39:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Internal EO APIs and hidden overrides */
|
|
|
|
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#define EFL_CANVAS_LAYOUT_PART_EXTRA_OPS \
|
2017-09-05 22:39:22 -07:00
|
|
|
EFL_OBJECT_OP_FUNC(efl_content_get, _edje_invalid_part_efl_content_get), \
|
|
|
|
EFL_OBJECT_OP_FUNC(efl_content_set, _edje_invalid_part_efl_content_set), \
|
|
|
|
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#include "efl_canvas_layout_part.eo.c"
|