summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2017-09-13 10:56:55 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2017-09-13 11:01:29 +0900
commitbb9d8bdbaa475004c1d0331880a4e0df71cd5bb0 (patch)
tree55160aca16eddd6421d1a43f65cd59bb5fa3cc53
parent0885d0c405316e0a807d00f38d22f74cd11be5f6 (diff)
downloadefl-bb9d8bdbaa475004c1d0331880a4e0df71cd5bb0.tar.gz
evas: Add group_member_is to smart objects
This is a new function that indicates whether an object is a child of a parent or not. Dead simple, as this simply compares if parent == this. Note that this check was impossible to do with the event grabber. Also, rename group_children_iterate to group_members_iterate for consistency with the other group_member functions. @feature
-rw-r--r--src/lib/evas/canvas/efl_canvas_group.eo35
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_event_grabber.c14
-rw-r--r--src/lib/evas/canvas/efl_canvas_object_event_grabber.eo3
-rw-r--r--src/lib/evas/canvas/evas_object_smart.c15
4 files changed, 52 insertions, 15 deletions
diff --git a/src/lib/evas/canvas/efl_canvas_group.eo b/src/lib/evas/canvas/efl_canvas_group.eo
index a8f4a1daa3..093acf5dbe 100644
--- a/src/lib/evas/canvas/efl_canvas_group.eo
+++ b/src/lib/evas/canvas/efl_canvas_group.eo
@@ -52,8 +52,7 @@ class Efl.Canvas.Group (Efl.Canvas.Object)
]]
legacy: evas_object_smart_calculate;
}
- /* FIXME: children -> members? */
- group_children_iterate @const {
+ group_members_iterate @const {
[[Returns an iterator over the children of this object, that are
canvas objects.
@@ -61,25 +60,28 @@ class Efl.Canvas.Group (Efl.Canvas.Object)
from both the $Efl.Object children list as well as the $Efl.Container
content list.
]]
- return: free(own(iterator<Efl.Canvas.Object>), eina_iterator_free); [[Iterator to object children]]
+ return: free(own(iterator<Efl.Canvas.Object>), eina_iterator_free);
+ [[Iterator to object children]]
legacy: evas_object_smart_iterator_new;
}
group_member_add {
- [[Set an Evas object as a member of a given smart object.
+ [[Set a canvas object as a member of a given group (or smart object).
Members will automatically be stacked and layered together with the
smart object. The various stacking functions will operate on
members relative to the other members instead of the entire canvas,
since they now live on an exclusive layer (see
- evas_object_stack_above(), for more details).
+ @Efl.Gfx.Stack.stack_above(), for more details).
- Any $smart_obj object's specific implementation of the
- $member_add() smart function will take place too, naturally.
+ Subclasses inheriting from this one may override this function
+ to ensure the proper stacking of special objects, such as clippers,
+ event rectangles, etc...
See also @.group_member_del.
+ See also @.group_member_is.
]]
params {
- @in sub_obj: Efl.Canvas.Object @nonull; [[The member object.]]
+ @in sub_obj: own(Efl.Canvas.Object) @nonull; [[The member object.]]
}
legacy: null;
}
@@ -90,18 +92,27 @@ class Efl.Canvas.Group (Efl.Canvas.Object)
to any. The object will still be on the canvas, but no longer
associated with whichever smart object it was associated with.
- See also @.group_member_add for more details.
+ See also @.group_member_add.
+ See also @.group_member_is.
]]
params {
- @in sub_obj: Efl.Canvas.Object; [[The member object.]]
+ @in sub_obj: Efl.Canvas.Object; [[The member object to remove.]]
}
legacy: null;
}
+ group_member_is @const {
+ [[Finds out if a given object is a member of this group.]]
+ params {
+ @in sub_obj: const(Efl.Canvas.Object); [[A potential sub object.]]
+ }
+ return: bool; [[$true if $sub_obj is a member of this group.]]
+ legacy: null;
+ }
@property group_clipper @protected {
[[The internal clipper object used by this group.
- This is the object clipping all the children objects. Do not
- delete or otherwise modify this clipper!
+ This is the object clipping all the child objects. Do not delete
+ or otherwise modify this clipper!
]]
values {
clipper: const(Efl.Canvas.Object); [[A clipper rectangle.]]
diff --git a/src/lib/evas/canvas/efl_canvas_object_event_grabber.c b/src/lib/evas/canvas/efl_canvas_object_event_grabber.c
index 7623af9642..c4794d6143 100644
--- a/src/lib/evas/canvas/efl_canvas_object_event_grabber.c
+++ b/src/lib/evas/canvas/efl_canvas_object_event_grabber.c
@@ -46,7 +46,7 @@ _efl_canvas_group_group_iterator_free(Efl_Object_Event_Grabber_Iterator *it)
}
EOLIAN static Eina_Iterator*
-_efl_canvas_object_event_grabber_efl_canvas_group_group_children_iterate(const Eo *eo_obj, Efl_Object_Event_Grabber_Data *pd)
+_efl_canvas_object_event_grabber_efl_canvas_group_group_members_iterate(const Eo *eo_obj, Efl_Object_Event_Grabber_Data *pd)
{
Efl_Object_Event_Grabber_Iterator *it;
@@ -66,6 +66,18 @@ _efl_canvas_object_event_grabber_efl_canvas_group_group_children_iterate(const E
return &it->iterator;
}
+EOLIAN static Eina_Bool
+_efl_canvas_object_event_grabber_efl_canvas_group_group_member_is(const Eo *eo_obj, Efl_Object_Event_Grabber_Data *pd EINA_UNUSED, const Eo *sub_obj)
+{
+ Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ Evas_Object_Protected_Data *sub = efl_data_scope_safe_get(sub_obj, EFL_CANVAS_OBJECT_CLASS);
+
+ evas_object_async_block(obj);
+
+ if (!sub) return EINA_FALSE;
+ return (sub->events->parent == eo_obj);
+}
+
static void
_stacking_verify(Efl_Object_Event_Grabber_Data *pd, Evas_Object_Protected_Data *obj)
{
diff --git a/src/lib/evas/canvas/efl_canvas_object_event_grabber.eo b/src/lib/evas/canvas/efl_canvas_object_event_grabber.eo
index 6d4a15a4e0..5ad67b6e63 100644
--- a/src/lib/evas/canvas/efl_canvas_object_event_grabber.eo
+++ b/src/lib/evas/canvas/efl_canvas_object_event_grabber.eo
@@ -36,7 +36,8 @@ class Efl.Canvas.Object.Event.Grabber (Efl.Canvas.Group)
Efl.Object.destructor;
Efl.Canvas.Group.group_member_add;
Efl.Canvas.Group.group_member_del;
- Efl.Canvas.Group.group_children_iterate;
+ Efl.Canvas.Group.group_member_is;
+ Efl.Canvas.Group.group_members_iterate;
Efl.Canvas.Group.group_calculate;
Efl.Canvas.Group.group_change;
Efl.Canvas.Group.group_need_recalculate { get; set; }
diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c
index 87af439f63..43c1847ecf 100644
--- a/src/lib/evas/canvas/evas_object_smart.c
+++ b/src/lib/evas/canvas/evas_object_smart.c
@@ -494,8 +494,9 @@ _efl_canvas_group_group_iterator_free(Evas_Object_Smart_Iterator *it)
}
// Should we have an efl_children_iterator_new API and just inherit from it ?
+// No, because each hierarchy is different (Eo, Smart, Widget) -- jpeg
EOLIAN static Eina_Iterator*
-_efl_canvas_group_group_children_iterate(const Eo *eo_obj, Evas_Smart_Data *priv)
+_efl_canvas_group_group_members_iterate(const Eo *eo_obj, Evas_Smart_Data *priv)
{
Evas_Object_Smart_Iterator *it;
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
@@ -517,6 +518,18 @@ _efl_canvas_group_group_children_iterate(const Eo *eo_obj, Evas_Smart_Data *priv
return &it->iterator;
}
+EOLIAN static Eina_Bool
+_efl_canvas_group_group_member_is(const Eo *eo_obj, Evas_Smart_Data *pd EINA_UNUSED, const Eo *sub_obj)
+{
+ Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ Evas_Object_Protected_Data *sub = efl_data_scope_safe_get(sub_obj, EFL_CANVAS_OBJECT_CLASS);
+
+ evas_object_async_block(obj);
+
+ if (!sub) return EINA_FALSE;
+ return (sub->smart.parent == eo_obj);
+}
+
EAPI Eina_List*
evas_object_smart_members_get(const Evas_Object *eo_obj)
{