clip = efl_canvas_object_clip_get(d.img);
if (clip == d.clipper)
{
- efl_canvas_object_clip_unset(d.img);
+ efl_canvas_object_clip_set(d.img, NULL);
fprintf(stdout, "off\n");
}
else
}
EOLIAN static void
-_efl_ui_image_efl_canvas_group_group_clip_set(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *clip)
+_efl_ui_image_efl_canvas_object_clip_set(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *clip)
{
- efl_canvas_group_clip_set(efl_super(obj, MY_CLASS), clip);
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 0, clip))
+ return;
+
+ efl_canvas_object_clip_set(efl_super(obj, MY_CLASS), clip);
evas_object_clip_set(sd->img, clip);
if (sd->prev_img) evas_object_clip_set(sd->prev_img, clip);
}
-EOLIAN static void
-_efl_ui_image_efl_canvas_group_group_clip_unset(Eo *obj, Efl_Ui_Image_Data *sd)
-{
- efl_canvas_group_clip_unset(efl_super(obj, MY_CLASS));
-
- evas_object_clip_unset(sd->img);
- if (sd->prev_img) evas_object_clip_unset(sd->prev_img);
-}
-
EOLIAN static Elm_Theme_Apply
_efl_ui_image_elm_widget_theme_apply(Eo *obj, Efl_Ui_Image_Data *sd EINA_UNUSED)
{
Edje.Object.size_max.get;
Edje.Object.size_min_calc;
Edje.Object.calc_force;
+ Efl.Canvas.Object.clip.set;
Efl.Canvas.Group.group_hide;
- Efl.Canvas.Group.group_clip.set;
- Efl.Canvas.Group.group_clip_unset;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_move;
Efl.Canvas.Group.group_add;
}
EOLIAN static void
-_elm_widget_efl_canvas_group_group_clip_set(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *clip)
+_elm_widget_efl_canvas_object_clip_set(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED, Evas_Object *clip)
{
Eina_Iterator *it;
Evas_Object *o;
- it = evas_object_smart_iterator_new(obj);
- EINA_ITERATOR_FOREACH(it, o)
- {
- if (evas_object_data_get(o, "_elm_leaveme")) continue;
- evas_object_clip_set(o, clip);
- }
- eina_iterator_free(it);
-}
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 0, clip))
+ return;
-EOLIAN static void
-_elm_widget_efl_canvas_group_group_clip_unset(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED)
-{
- Eina_Iterator *it;
- Evas_Object *o;
+ efl_canvas_object_clip_set(efl_super(obj, MY_CLASS), clip);
it = evas_object_smart_iterator_new(obj);
EINA_ITERATOR_FOREACH(it, o)
{
if (evas_object_data_get(o, "_elm_leaveme")) continue;
- evas_object_clip_unset(o);
+ evas_object_clip_set(o, clip);
}
eina_iterator_free(it);
}
Efl.Object.dbg_info_get;
Efl.Object.provider_find;
Efl.Gfx.color.set;
+ Efl.Canvas.Object.clip.set;
Efl.Canvas.Object.no_render.set;
Efl.Canvas.Group.group_hide;
Efl.Canvas.Group.group_calculate;
- Efl.Canvas.Group.group_clip_unset;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_move;
Efl.Canvas.Group.group_member_del;
Efl.Canvas.Group.group_add;
Efl.Canvas.Group.group_del;
- Efl.Canvas.Group.group_clip.set;
Efl.Canvas.Group.group_member_add;
Efl.Canvas.Group.group_resize;
Elm.Interface.Atspi_Accessible.name.get;
implements {
Efl.Object.constructor;
Efl.Gfx.color.set;
+ Efl.Canvas.Object.clip.set;
Efl.Canvas.Group.group_add;
Efl.Canvas.Group.group_del;
Efl.Canvas.Group.group_move;
Efl.Canvas.Group.group_resize;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_hide;
- Efl.Canvas.Group.group_clip.set;
- Efl.Canvas.Group.group_clip_unset;
Efl.File.file.set;
Efl.File.file.get;
Efl.Player.play.set;
}
EOLIAN static void
-_efl_canvas_video_efl_canvas_group_group_clip_set(Evas_Object *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd, Evas_Object * clip)
+_efl_canvas_video_efl_canvas_object_clip_set(Evas_Object *obj, Efl_Canvas_Video_Data *sd, Evas_Object *clip)
{
+ if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 0, clip))
+ return;
+
if (sd->crop.clipper) evas_object_clip_set(sd->crop.clipper, clip);
else evas_object_clip_set(sd->obj, clip);
evas_object_clip_set(sd->bg, clip);
}
-EOLIAN static void
-_efl_canvas_video_efl_canvas_group_group_clip_unset(Evas_Object *obj EINA_UNUSED, Efl_Canvas_Video_Data *sd)
-{
- if (sd->crop.clipper) evas_object_clip_unset(sd->crop.clipper);
- else evas_object_clip_unset(sd->obj);
- evas_object_clip_unset(sd->bg);
-
-}
-
#include "efl_canvas_video.eo.c"
EAPI void evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
/**
+ * @brief Disable/cease clipping on a clipped @c obj object.
+ *
+ * This function disables clipping for the object @c obj, if it was already
+ * clipped, i.e., its visibility and color get detached from the previous
+ * clipper. If it wasn't, this has no effect. The object @c obj must be a valid
+ * Evas_Object.
+ *
+ * See also @ref evas_object_clip_set, @ref evas_object_clipees_get and
+ * @ref evas_object_clip_get.
+ *
+ * @ingroup Evas_Object
+ */
+EAPI void evas_object_clip_unset(Evas_Object *obj);
+
+/**
* @brief Retrieves the hints for an object's minimum size.
*
* These are hints on the minimum sizes @c obj should have. This is not a size
return: free(own(iterator<Efl.Gfx>), eina_iterator_free);
legacy: evas_object_smart_iterator_new;
}
- @property group_clip {
- set {
- [[No description supplied by the EAPI.]]
- legacy: null;
- }
- values {
- clip: Efl.Canvas.Object;
- }
- }
group_show {
[[No description supplied by the EAPI.]]
legacy: null;
@in h: Evas.Coord;
}
}
- group_clip_unset {
- [[No description supplied by the EAPI.]]
- legacy: null;
- }
group_member_del {
[[Removes a member object from a given smart object.
data: Evas_Object_Smart_Clipped_Data;
implements {
Efl.Gfx.color.set;
+ Efl.Canvas.Object.clip.set;
Efl.Canvas.Object.no_render.set;
Efl.Canvas.Group.group_hide;
- Efl.Canvas.Group.group_clip.set;
- Efl.Canvas.Group.group_clip_unset;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_move;
Efl.Canvas.Group.group_member_del;
is called, it gets implicitly removed from the old clipper's
domain and is made now to be clipped by its new clipper.
- Note: At the moment the only objects that can validly be used
- to clip other objects are rectangle objects. All other object
- types are invalid and the result of using them is undefined.
- The clip object $clip must be a valid object, but can also be
- $null, in which case the effect of this function is the same
- as @.clip_unset on the $obj object.
- ]]
- /* FIXME-doc
- The following figure illustrates some clipping in Evas:
-
- @image html clipping.png
- @image rtf clipping.png
- @image latex clipping.eps
- ---
- Example:
- @dontinclude evas-object-manipulation.c
- @skip solid white clipper (note that it's the default color for a
- @until evas_object_show(d.clipper);
+ If $clip is $null, this call will disable clipping for the object
+ i.e. its visibility and color get detached from the previous
+ clipper. If it wasn't, this has no effect.
- See the full @ref Example_Evas_Object_Manipulation "example".
- */
+ Note: Only rectangle and image (masks) objects can be used
+ as clippers. Anything else will result in undefined behaviour.
+ ]]
}
get {
[[Get the object clipping $obj (if any).
not being clipped at all, $null is returned. The object $obj
must be a valid Evas_Object.
]]
- /* FIXME-doc
- Example:
- @dontinclude evas-object-manipulation.c
- @skip if (evas_object_clip_get(d.img) == d.clipper)
- @until return
-
- See the full @ref Example_Evas_Object_Manipulation "example".
- */
}
values {
clip: Efl.Canvas.Object @nonull; [[The object to clip $obj by.]]
anymore after that point. Any use of the list after this
may have undefined results, possibly leading to crashes.
- See also @.clip and @.clip_unset.
+ See also @.clip.
]]
legacy: null;
return: iterator<Efl.Canvas.Object> @warn_unused; [[An iterator over the
]]
}
}
- clip_unset {
- [[Disable/cease clipping on a clipped $obj object.
-
- This function disables clipping for the object $obj, if it was
- already clipped, i.e., its visibility and color get detached from
- the previous clipper. If it wasn't, this has no effect. The
- object $obj must be a valid Evas_Object.
-
- See also @.clip.set, @.clipees.get and @.clip.get.
- ]]
- }
@property no_render {
get {
[[Returns the state of the "no-render" flag, which means, when
#include "evas_common_private.h"
#include "evas_private.h"
+static void _clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj);
+
void
evas_object_clip_dirty(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
{
static void _clipper_del_cb(void *data, const Efl_Event *event);
+Eina_Bool
+_efl_canvas_object_clip_set_block(Eo *eo_obj, Evas_Object_Protected_Data *obj,
+ Evas_Object *eo_clip, Evas_Object_Protected_Data *clip)
+{
+ if (!obj) obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ if (!clip) clip = efl_data_scope_get(eo_clip, EFL_CANVAS_OBJECT_CLASS);
+
+ evas_object_async_block(obj);
+
+ if (obj->cur->clipper && (obj->cur->clipper->object == eo_clip)) return EINA_TRUE;
+ if (eo_obj == eo_clip) goto err_same;
+ if (clip->delete_me) goto err_clip_deleted;
+ if (obj->delete_me) goto err_obj_deleted;
+ if (!obj->layer || !clip->layer) goto err_no_layer;
+ if (obj->layer->evas != clip->layer->evas) goto err_diff_evas;
+ if ((clip->type != o_rect_type) && (clip->type != o_image_type)) goto err_type;
+
+ return EINA_FALSE;
+
+err_same:
+ CRI("Setting clip %p on itself", eo_obj);
+ return EINA_TRUE;
+err_clip_deleted:
+ CRI("Setting deleted object %p as clip obj %p", eo_clip, eo_obj);
+ return EINA_TRUE;
+err_obj_deleted:
+ CRI("Setting object %p as clip to deleted obj %p", eo_clip, eo_obj);
+ return EINA_TRUE;
+err_no_layer:
+ CRI("Object %p or clip %p layer is not set !", obj, clip);;
+ return EINA_TRUE;
+err_diff_evas:
+ CRI("Setting object %p from Evas (%p) to another Evas (%p)",
+ obj, obj->layer->evas, clip->layer->evas);
+ return EINA_TRUE;
+err_type:
+ CRI("A clipper can only be an evas rectangle or image (got %s)",
+ efl_class_name_get(eo_clip));
+ return EINA_TRUE;
+}
+
EOLIAN void
_efl_canvas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *eo_clip)
{
if (!eo_clip)
{
- evas_object_clip_unset(eo_obj);
+ _clip_unset(eo_obj, obj);
return;
}
- MAGIC_CHECK(eo_clip, Evas_Object, MAGIC_OBJ);
- return;
- MAGIC_CHECK_END();
-
- evas_object_async_block(obj);
-
clip = efl_data_scope_get(eo_clip, EFL_CANVAS_OBJECT_CLASS);
- if (obj->cur->clipper && obj->cur->clipper->object == eo_clip) return;
- if (eo_obj == eo_clip)
- {
- CRI("Setting clip %p on itself", eo_obj);
- return;
- }
- if (clip->delete_me)
- {
- CRI("Setting deleted object %p as clip obj %p", eo_clip, eo_obj);
- return;
- }
- if (obj->delete_me)
- {
- CRI("Setting object %p as clip to deleted obj %p", eo_clip, eo_obj);
- return;
- }
- if (!obj->layer)
- {
- CRI("No evas surface associated with object (%p)", eo_obj);
- return;
- }
- if ((obj->layer && clip->layer) &&
- (obj->layer->evas != clip->layer->evas))
- {
- CRI("Setting object %p from Evas (%p) to another Evas (%p)", obj, obj->layer->evas, clip->layer->evas);
- return;
- }
- if (!obj->layer || !clip->layer)
- {
- CRI("Object %p or clip %p layer is not set !", obj, clip);
- return;
- }
+ if (_efl_canvas_object_clip_set_block(eo_obj, obj, eo_clip, clip)) return;
+ if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 1, eo_clip)) return;
- if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 1, eo_clip))
- return;
-
- // illegal to set anything but a rect or an image as a clip
- if (clip->type != o_rect_type && clip->type != o_image_type)
+ if (obj->is_smart && obj->smart.smart && obj->smart.smart->smart_class &&
+ obj->smart.smart->smart_class->clip_set)
{
- ERR("For now a clip on other object than a rectangle or an image is disabled");
- return;
- }
- if (obj->is_smart)
- {
- efl_canvas_group_clip_set(eo_obj, eo_clip);
+ obj->smart.smart->smart_class->clip_set(eo_obj, eo_clip);
}
if (obj->cur->clipper)
{
return NULL;
}
-EOLIAN void
-_efl_canvas_object_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
+Eina_Bool
+_efl_canvas_object_clip_unset_block(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
{
- if (!obj->cur->clipper) return;
+ if (!obj->cur->clipper)
+ return EINA_TRUE;
+
evas_object_async_block(obj);
obj->clip.cache_clipees_answer = eina_list_free(obj->clip.cache_clipees_answer);
- /* unclip */
+ return EINA_FALSE;
+}
+
+static void
+_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
+{
+ if (_efl_canvas_object_clip_unset_block(eo_obj, obj)) return;
if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_UNSET, 1)) return;
- if (obj->is_smart)
+ if (obj->is_smart && obj->smart.smart && obj->smart.smart->smart_class &&
+ obj->smart.smart->smart_class->clip_unset)
{
- efl_canvas_group_clip_unset(eo_obj);
+ obj->smart.smart->smart_class->clip_unset(eo_obj);
}
if (obj->cur->clipper)
{
evas_object_clip_across_check(eo_obj, obj);
}
+EAPI void
+evas_object_clip_unset(Evas_Object *eo_obj)
+{
+ Evas_Object_Protected_Data *obj;
+
+ if (!efl_isa(eo_obj, EFL_CANVAS_OBJECT_CLASS)) return;
+ obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+ _clip_unset(eo_obj, obj);
+}
+
static void
_clipper_del_cb(void *data, const Efl_Event *event)
{
if (!obj) return;
- _efl_canvas_object_clip_unset(eo_obj, obj);
+ _clip_unset(eo_obj, obj);
if (obj->prev->clipper && (obj->prev->clipper->object == event->object))
{
// not removing cb since it's the del cb... it can't be called again!
case EVAS_OBJECT_INTERCEPT_CB_SHOW:
if (obj->cur->visible) return 1;
if (!obj->interceptors) return 0;
- blocked = evas_object_intercept_call_show(eo_obj, obj);
- break;
+ return evas_object_intercept_call_show(eo_obj, obj);
case EVAS_OBJECT_INTERCEPT_CB_HIDE:
if (!obj->cur->visible) return 1;
if (!obj->interceptors) return 0;
- blocked = evas_object_intercept_call_hide(eo_obj, obj);
- break;
+ return evas_object_intercept_call_hide(eo_obj, obj);
case EVAS_OBJECT_INTERCEPT_CB_MOVE:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
i = va_arg(args, int);
j = va_arg(args, int);
blocked = evas_object_intercept_call_move(eo_obj, obj, i, j);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_RESIZE:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
i = va_arg(args, int);
j = va_arg(args, int);
blocked = evas_object_intercept_call_resize(eo_obj, obj, i, j);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_RAISE:
if (!obj->interceptors) return 0;
- blocked = evas_object_intercept_call_raise(eo_obj, obj);
- break;
+ return evas_object_intercept_call_raise(eo_obj, obj);
case EVAS_OBJECT_INTERCEPT_CB_LOWER:
if (!obj->interceptors) return 0;
- blocked = evas_object_intercept_call_lower(eo_obj, obj);
- break;
+ return evas_object_intercept_call_lower(eo_obj, obj);
case EVAS_OBJECT_INTERCEPT_CB_STACK_ABOVE:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
eo_other = va_arg(args, Evas_Object *);
blocked = evas_object_intercept_call_stack_above(eo_obj, obj, eo_other);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_STACK_BELOW:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
eo_other = va_arg(args, Evas_Object *);
blocked = evas_object_intercept_call_stack_below(eo_obj, obj, eo_other);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_LAYER_SET:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
i = va_arg(args, int);
blocked = evas_object_intercept_call_layer_set(eo_obj, obj, i);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_FOCUS_SET:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
i = va_arg(args, int);
blocked = evas_object_intercept_call_focus_set(eo_obj, obj, !!i);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_COLOR_SET:
if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
r = va_arg(args, int);
g = va_arg(args, int);
b = va_arg(args, int);
a = va_arg(args, int);
blocked = evas_object_intercept_call_color_set(eo_obj, obj, r, g, b, a);
- va_end(args);
break;
case EVAS_OBJECT_INTERCEPT_CB_CLIP_SET:
- if (!obj->interceptors) return 0;
- va_start(args, cb_type);
+ va_start(args, internal);
eo_other = va_arg(args, Evas_Object *);
- blocked = evas_object_intercept_call_clip_set(eo_obj, obj, eo_other);
- va_end(args);
- break;
+ if (eo_other)
+ {
+ if (!internal)
+ {
+ if (_efl_canvas_object_clip_set_block(eo_obj, obj, eo_other, NULL))
+ goto end_block;
+ }
+ if (!obj->interceptors) goto end_noblock;
+ blocked = evas_object_intercept_call_clip_set(eo_obj, obj, eo_other);
+ break;
+ }
+ // else: fallthrough to unset
case EVAS_OBJECT_INTERCEPT_CB_CLIP_UNSET:
+ if (!internal)
+ {
+ if (_efl_canvas_object_clip_unset_block(eo_obj, obj))
+ return 1;
+ }
if (!obj->interceptors) return 0;
- blocked = evas_object_intercept_call_clip_unset(eo_obj, obj);
- break;
+ return evas_object_intercept_call_clip_unset(eo_obj, obj);
}
+ va_end(args);
return blocked;
+
+end_block:
+ va_end(args);
+ return 1;
+
+end_noblock:
+ va_end(args);
+ return 0;
}
/* public calls */
}
EOLIAN static void
-_efl_canvas_group_group_clip_set(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED, Evas_Object *clip)
-{
- // If this function is reached, so we do nothing except trying to call
- // the function of the legacy smart class.
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
- Evas_Smart *s = obj->smart.smart;
- if (s && s->smart_class->clip_set) s->smart_class->clip_set(eo_obj, clip);
-}
-
-EOLIAN static void
-_efl_canvas_group_group_clip_unset(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED)
-{
- // If this function is reached, so we do nothing except trying to call
- // the function of the legacy smart class.
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
- Evas_Smart *s = obj->smart.smart;
- if (s && s->smart_class->clip_unset) s->smart_class->clip_unset(eo_obj);
-}
-
-EOLIAN static void
_efl_canvas_group_efl_canvas_object_no_render_set(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED, Eina_Bool enable)
{
Evas_Object_Protected_Data *obj2;
evas_object_clip_set(cso->clipper, clip);
}
-EOLIAN static void
-_efl_canvas_group_clipped_efl_canvas_group_group_clip_set(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *obj EINA_UNUSED, Evas_Object *clip)
-{
- evas_object_smart_clipped_smart_clip_set(eo_obj, clip);
-}
-
static void
evas_object_smart_clipped_smart_clip_unset(Evas_Object *eo_obj)
{
}
EOLIAN static void
-_efl_canvas_group_clipped_efl_canvas_group_group_clip_unset(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *obj EINA_UNUSED)
+_efl_canvas_group_clipped_efl_canvas_object_clip_set(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *obj EINA_UNUSED, Evas_Object *clip)
{
- evas_object_smart_clipped_smart_clip_unset(eo_obj);
+ if (clip)
+ {
+ if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_SET, 0, clip))
+ return;
+ evas_object_smart_clipped_smart_clip_set(eo_obj, clip);
+ }
+ else
+ {
+ if (_evas_object_intercept_call(eo_obj, EVAS_OBJECT_INTERCEPT_CB_CLIP_UNSET, 0))
+ return;
+ evas_object_smart_clipped_smart_clip_unset(eo_obj);
+ }
}
static void
void _efl_canvas_object_clip_prev_reset(Evas_Object_Protected_Data *obj, Eina_Bool cur_prev);
+Eina_Bool _efl_canvas_object_clip_set_block(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *eo_clip, Evas_Object_Protected_Data *clip);
+Eina_Bool _efl_canvas_object_clip_unset_block(Eo *eo_obj, Evas_Object_Protected_Data *obj);
+
void _canvas_event_default_flags_set(Eo *e, void *_pd, va_list *list);
void _canvas_event_default_flags_get(Eo *e, void *_pd, va_list *list);
void _canvas_event_freeze(Eo *e, void *_pd, va_list *list);