efl: add Efl.Gfx.Stack interface and update Evas_Object accordingly.
authorCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:23:22 +0000 (16:23 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:23:22 +0000 (16:23 +0200)
src/Makefile_Efl.am
src/Makefile_Efl_Cxx.am
src/lib/efl/Efl.h
src/lib/efl/interfaces/efl_gfx_stack.eo [new file with mode: 0644]
src/lib/efl/interfaces/efl_interfaces_main.c
src/lib/evas/Evas_Legacy.h
src/lib/evas/canvas/evas_layer.c
src/lib/evas/canvas/evas_object.eo
src/lib/evas/canvas/evas_object_main.c
src/lib/evas/canvas/evas_stack.c

index 2525020..6423b6a 100644 (file)
@@ -6,6 +6,7 @@ efl_eolian_files = \
       lib/efl/interfaces/efl_text.eo \
       lib/efl/interfaces/efl_text_properties.eo \
       lib/efl/interfaces/efl_gfx_base.eo \
+      lib/efl/interfaces/efl_gfx_stack.eo \
       lib/efl/interfaces/efl_gfx_shape.eo \
       lib/efl/interfaces/efl_gfx_gradient.eo \
       lib/efl/interfaces/efl_gfx_gradient_linear.eo \
index e8c8462..bf06f78 100644 (file)
@@ -10,6 +10,7 @@ generated_efl_cxx_bindings = \
                  lib/efl/interfaces/efl_text.eo.hh \
                  lib/efl/interfaces/efl_text_properties.eo.hh \
                 lib/efl/interfaces/efl_gfx_base.eo.hh \
+                lib/efl/interfaces/efl_gfx_stack.eo.hh \
                 lib/efl/interfaces/efl_gfx_shape.eo.hh \
                 lib/efl/interfaces/efl_gfx_gradient.eo.hh \
                 lib/efl/interfaces/efl_gfx_gradient_linear.eo.hh \
index 91d067c..5332ff5 100644 (file)
@@ -124,6 +124,7 @@ typedef enum _Efl_Gfx_Gradient_Spread
 #include "interfaces/efl_gfx_utils.h"
 
 #include "interfaces/efl_gfx_base.eo.h"
+#include "interfaces/efl_gfx_stack.eo.h"
 #include "interfaces/efl_gfx_shape.eo.h"
 #include "interfaces/efl_gfx_gradient.eo.h"
 #include "interfaces/efl_gfx_gradient_linear.eo.h"
diff --git a/src/lib/efl/interfaces/efl_gfx_stack.eo b/src/lib/efl/interfaces/efl_gfx_stack.eo
new file mode 100644 (file)
index 0000000..a104d0d
--- /dev/null
@@ -0,0 +1,154 @@
+interface Efl.Gfx.Stack {
+   legacy_prefix: null;
+   properties {
+      layer {
+         set {
+            /*@
+            Sets the layer of its canvas that the given object will be part of.
+
+            If you don't use this function, you'll be dealing with an @b unique
+            layer of objects, the default one. Additional layers are handy when
+            you don't want a set of objects to interfere with another set with
+            regard to @b stacking. Two layers are completely disjoint in that
+            matter.
+
+            This is a low-level function, which you'd be using when something
+            should be always on top, for example.
+
+            @warning Be careful, it doesn't make sense to change the layer of
+            smart objects' children. Smart objects have a layer of their own,
+            which should contain all their children objects.
+
+            @see evas_object_layer_get() */
+         }
+         get {
+            /*@
+            Retrieves the layer of its canvas that the given object is part of.
+
+            @return  Number of its layer
+
+            @see evas_object_layer_set() */
+         }
+         values {
+            short l; /*@ The number of the layer to place the object on.
+            Must be between #EVAS_LAYER_MIN and #EVAS_LAYER_MAX. */
+         }
+      }
+      below {
+         get {
+            /*@
+            Get the Evas object stacked right below @p obj
+
+            @return the #Efl_Gfx_Stack directly below @p obj, if any, or @c NULL,
+            if none
+
+            This function will traverse layers in its search, if there are
+            objects on layers below the one @p obj is placed at.
+
+            @see evas_object_layer_get()
+            @see evas_object_layer_set()
+            @see evas_object_below_get() */
+            return: Efl_Gfx_Stack * @warn_unused;
+         }
+      }
+      above {
+         get {
+            /*@
+            Get the Evas object stacked right above @p obj
+
+            @return the #Efl_Gfx_Stack directly above @p obj, if any, or @c NULL,
+            if none
+
+            This function will traverse layers in its search, if there are
+            objects on layers above the one @p obj is placed at.
+
+            @see evas_object_layer_get()
+            @see evas_object_layer_set()
+            @see evas_object_below_get() */
+            return: Efl_Gfx_Stack * @warn_unused;
+         }
+      }
+   }
+   methods {
+      stack_below {
+         /*@
+         Stack @p obj immediately below @p below
+
+         Objects, in a given canvas, are stacked in the order they get added
+         to it.  This means that, if they overlap, the highest ones will
+         cover the lowest ones, in that order. This function is a way to
+         change the stacking order for the objects.
+
+         This function is intended to be used with <b>objects belonging to
+         the same layer</b> in a given canvas, otherwise it will fail (and
+         accomplish nothing).
+
+         If you have smart objects on your canvas and @p obj is a member of
+         one of them, then @p below must also be a member of the same
+         smart object.
+
+         Similarly, if @p obj is not a member of a smart object, @p below
+         must not be either.
+
+         @see evas_object_layer_get()
+         @see evas_object_layer_set()
+         @see evas_object_stack_below() */
+
+         params {
+            @in Efl_Gfx_Stack *below @nonull; /*@ the object below which to stack */
+         }
+      }
+      raise {
+         /*@
+         Raise @p obj to the top of its layer.
+
+         @p obj will, then, be the highest one in the layer it belongs
+         to. Object on other layers won't get touched.
+
+         @see evas_object_stack_above()
+         @see evas_object_stack_below()
+         @see evas_object_lower() */
+
+      }
+      stack_above {
+         /*@
+         Stack @p obj immediately above @p above
+
+         Objects, in a given canvas, are stacked in the order they get added
+         to it.  This means that, if they overlap, the highest ones will
+         cover the lowest ones, in that order. This function is a way to
+         change the stacking order for the objects.
+
+         This function is intended to be used with <b>objects belonging to
+         the same layer</b> in a given canvas, otherwise it will fail (and
+         accomplish nothing).
+
+         If you have smart objects on your canvas and @p obj is a member of
+         one of them, then @p above must also be a member of the same
+         smart object.
+
+         Similarly, if @p obj is not a member of a smart object, @p above
+         must not be either.
+
+         @see evas_object_layer_get()
+         @see evas_object_layer_set()
+         @see evas_object_stack_below() */
+
+         params {
+            @in Efl_Gfx_Stack *above @nonull; /*@ the object above which to stack */
+         }
+      }
+      lower {
+         /*@
+         Lower @p obj to the bottom of its layer.
+
+         @p obj will, then, be the lowest one in the layer it belongs
+         to. Objects on other layers won't get touched.
+
+         @see evas_object_stack_above()
+         @see evas_object_stack_below()
+         @see evas_object_raise() */
+
+      }
+   }
+}
index 3aecd65..7a91b98 100644 (file)
@@ -12,6 +12,7 @@
 #include "interfaces/efl_text_properties.eo.c"
 
 #include "interfaces/efl_gfx_base.eo.c"
+#include "interfaces/efl_gfx_stack.eo.c"
 #include "interfaces/efl_gfx_shape.eo.c"
 #include "interfaces/efl_gfx_gradient.eo.c"
 #include "interfaces/efl_gfx_gradient_linear.eo.c"
index 0c352ec..45f9188 100644 (file)
@@ -567,7 +567,6 @@ EAPI void             evas_object_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
  */
 EAPI void             evas_object_hide(Evas_Object *obj) EINA_ARG_NONNULL(1);
 
-
 /**
  *
  * Sets the general/main color of the given Evas object to the given
@@ -647,6 +646,163 @@ EAPI void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
  */
 EAPI Eina_Bool evas_object_visible_get(const Evas_Object *obj);
 
+/**
+ *
+ * Sets the layer of its canvas that the given object will be part of.
+ *
+ * If you don't use this function, you'll be dealing with an @b unique
+ * layer of objects, the default one. Additional layers are handy when
+ * you don't want a set of objects to interfere with another set with
+ * regard to @b stacking. Two layers are completely disjoint in that
+ * matter.
+ *
+ * This is a low-level function, which you'd be using when something
+ * should be always on top, for example.
+ *
+ * @warning Be careful, it doesn't make sense to change the layer of
+ * smart objects' children. Smart objects have a layer of their own,
+ * which should contain all their children objects.
+ *
+ * @see evas_object_layer_get()
+ *
+ * @param[in] l The number of the layer to place the object on.
+Must be between #EVAS_LAYER_MIN and #EVAS_LAYER_MAX.
+ */
+EAPI void evas_object_layer_set(Evas_Object *obj, short l);
+
+/**
+ *
+ * Retrieves the layer of its canvas that the given object is part of.
+ *
+ * @return  Number of its layer
+ *
+ * @see evas_object_layer_set()
+ *
+ */
+EAPI short evas_object_layer_get(const Evas_Object *obj);
+
+/**
+ *
+ * Get the Evas object stacked right below @p obj
+ *
+ * @return the #Evas_Object directly below @p obj, if any, or @c NULL,
+ * if none
+ *
+ * This function will traverse layers in its search, if there are
+ * objects on layers below the one @p obj is placed at.
+ *
+ * @see evas_object_layer_get()
+ * @see evas_object_layer_set()
+ * @see evas_object_below_get()
+ *
+ */
+EAPI Evas_Object *evas_object_below_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+
+/**
+ *
+ * Get the Evas object stacked right above @p obj
+ *
+ * @return the #Evas_Object directly above @p obj, if any, or @c NULL,
+ * if none
+ *
+ * This function will traverse layers in its search, if there are
+ * objects on layers above the one @p obj is placed at.
+ *
+ * @see evas_object_layer_get()
+ * @see evas_object_layer_set()
+ * @see evas_object_below_get()
+ *
+ */
+EAPI Evas_Object *evas_object_above_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
+
+/**
+ *
+ * Stack @p obj immediately below @p below
+ *
+ * Objects, in a given canvas, are stacked in the order they get added
+ * to it.  This means that, if they overlap, the highest ones will
+ * cover the lowest ones, in that order. This function is a way to
+ * change the stacking order for the objects.
+ *
+ * This function is intended to be used with <b>objects belonging to
+ * the same layer</b> in a given canvas, otherwise it will fail (and
+ * accomplish nothing).
+ *
+ * If you have smart objects on your canvas and @p obj is a member of
+ * one of them, then @p below must also be a member of the same
+ * smart object.
+ *
+ * Similarly, if @p obj is not a member of a smart object, @p below
+ * must not be either.
+ *
+ * @see evas_object_layer_get()
+ * @see evas_object_layer_set()
+ * @see evas_object_stack_below()
+ *
+ *
+ * @param[in] below the object below which to stack
+ */
+EAPI void evas_object_stack_below(Evas_Object *obj, Evas_Object *below) EINA_ARG_NONNULL(2);
+
+/**
+ *
+ * Raise @p obj to the top of its layer.
+ *
+ * @p obj will, then, be the highest one in the layer it belongs
+ * to. Object on other layers won't get touched.
+ *
+ * @see evas_object_stack_above()
+ * @see evas_object_stack_below()
+ * @see evas_object_lower()
+ *
+ *
+ */
+EAPI void evas_object_raise(Evas_Object *obj);
+
+/**
+ *
+ * Stack @p obj immediately above @p above
+ *
+ * Objects, in a given canvas, are stacked in the order they get added
+ * to it.  This means that, if they overlap, the highest ones will
+ * cover the lowest ones, in that order. This function is a way to
+ * change the stacking order for the objects.
+ *
+ * This function is intended to be used with <b>objects belonging to
+ * the same layer</b> in a given canvas, otherwise it will fail (and
+ * accomplish nothing).
+ *
+ * If you have smart objects on your canvas and @p obj is a member of
+ * one of them, then @p above must also be a member of the same
+ * smart object.
+ *
+ * Similarly, if @p obj is not a member of a smart object, @p above
+ * must not be either.
+ *
+ * @see evas_object_layer_get()
+ * @see evas_object_layer_set()
+ * @see evas_object_stack_below()
+ *
+ *
+ * @param[in] above the object above which to stack
+ */
+EAPI void evas_object_stack_above(Evas_Object *obj, Evas_Object *above) EINA_ARG_NONNULL(2);
+
+/**
+ *
+ * Lower @p obj to the bottom of its layer.
+ *
+ * @p obj will, then, be the lowest one in the layer it belongs
+ * to. Objects on other layers won't get touched.
+ *
+ * @see evas_object_stack_above()
+ * @see evas_object_stack_below()
+ * @see evas_object_raise()
+ *
+ *
+ */
+EAPI void evas_object_lower(Evas_Object *obj);
+
 
 #include "canvas/evas_common_interface.eo.legacy.h"
 #include "canvas/evas_object.eo.legacy.h"
index e1baf63..3731078 100644 (file)
@@ -178,8 +178,16 @@ _evas_object_layer_set_child(Evas_Object *eo_obj, Evas_Object *par, short l)
 
 /* public functions */
 
+EAPI void
+evas_object_layer_set(Evas_Object *obj, short l)
+{
+   eo_do((Evas_Object *)obj, efl_gfx_stack_layer_set(l));
+}
+
 EOLIAN void
-_evas_object_layer_set(Eo *eo_obj, Evas_Object_Protected_Data *obj EINA_UNUSED, short l)
+_evas_object_efl_gfx_stack_layer_set(Eo *eo_obj,
+                                     Evas_Object_Protected_Data *obj,
+                                     short l)
 {
    Evas *eo_e;
 
@@ -236,8 +244,17 @@ _evas_object_layer_set(Eo *eo_obj, Evas_Object_Protected_Data *obj EINA_UNUSED,
    evas_object_inform_call_restack(eo_obj);
 }
 
+EAPI short
+evas_object_layer_get(const Evas_Object *obj)
+{
+   short ret;
+
+   return eo_do_ret((Evas_Object *)obj, ret, efl_gfx_stack_layer_get());
+}
+
 EOLIAN short
-_evas_object_layer_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
+_evas_object_efl_gfx_stack_layer_get(Eo *eo_obj EINA_UNUSED,
+                                     Evas_Object_Protected_Data *obj)
 {
    if (obj->smart.parent)
      {
index d4823e3..5caf894 100644 (file)
@@ -1,4 +1,4 @@
-abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
+abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base, Efl.Gfx.Stack)
 {
    eo_prefix: evas_obj;
    data: Evas_Object_Protected_Data;
@@ -381,39 +381,6 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
             Evas_Coord h; /*@ Integer to use as aspect height ratio term. */
          }
       }
-      layer {
-         set {
-            /*@
-            Sets the layer of its canvas that the given object will be part of.
-
-            If you don't use this function, you'll be dealing with an @b unique
-            layer of objects, the default one. Additional layers are handy when
-            you don't want a set of objects to interfere with another set with
-            regard to @b stacking. Two layers are completely disjoint in that
-            matter.
-
-            This is a low-level function, which you'd be using when something
-            should be always on top, for example.
-
-            @warning Be careful, it doesn't make sense to change the layer of
-            smart objects' children. Smart objects have a layer of their own,
-            which should contain all their children objects.
-
-            @see evas_object_layer_get() */
-         }
-         get {
-            /*@
-            Retrieves the layer of its canvas that the given object is part of.
-
-            @return  Number of its layer
-
-            @see evas_object_layer_set() */
-         }
-         values {
-            short l; /*@ The number of the layer to place the object on.
-            Must be between #EVAS_LAYER_MIN and #EVAS_LAYER_MAX. */
-         }
-      }
       clip {
          set {
             /*@
@@ -1050,23 +1017,6 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
             return: Evas_Object * @warn_unused;
          }
       }
-      below {
-         get {
-            /*@
-            Get the Evas object stacked right below @p obj
-
-            @return the #Evas_Object directly below @p obj, if any, or @c NULL,
-            if none
-
-            This function will traverse layers in its search, if there are
-            objects on layers below the one @p obj is placed at.
-
-            @see evas_object_layer_get()
-            @see evas_object_layer_set()
-            @see evas_object_below_get() */
-            return: Evas_Object * @warn_unused;
-         }
-      }
       clipees {
          get {
             /*@
@@ -1121,23 +1071,6 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
             return: Evas_Object * @warn_unused;
          }
       }
-      above {
-         get {
-            /*@
-            Get the Evas object stacked right above @p obj
-
-            @return the #Evas_Object directly above @p obj, if any, or @c NULL,
-            if none
-
-            This function will traverse layers in its search, if there are
-            objects on layers above the one @p obj is placed at.
-
-            @see evas_object_layer_get()
-            @see evas_object_layer_set()
-            @see evas_object_below_get() */
-            return: Evas_Object * @warn_unused;
-         }
-      }
       size_hint_display_mode {
          get {
             /*@
@@ -1221,74 +1154,6 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
             receiving the @p keyname events. */
          }
       }
-      stack_below {
-         /*@
-         Stack @p obj immediately below @p below
-
-         Objects, in a given canvas, are stacked in the order they get added
-         to it.  This means that, if they overlap, the highest ones will
-         cover the lowest ones, in that order. This function is a way to
-         change the stacking order for the objects.
-
-         This function is intended to be used with <b>objects belonging to
-         the same layer</b> in a given canvas, otherwise it will fail (and
-         accomplish nothing).
-
-         If you have smart objects on your canvas and @p obj is a member of
-         one of them, then @p below must also be a member of the same
-         smart object.
-
-         Similarly, if @p obj is not a member of a smart object, @p below
-         must not be either.
-
-         @see evas_object_layer_get()
-         @see evas_object_layer_set()
-         @see evas_object_stack_below() */
-
-         params {
-            @in Evas_Object *below @nonull; /*@ the object below which to stack */
-         }
-      }
-      raise {
-         /*@
-         Raise @p obj to the top of its layer.
-
-         @p obj will, then, be the highest one in the layer it belongs
-         to. Object on other layers won't get touched.
-
-         @see evas_object_stack_above()
-         @see evas_object_stack_below()
-         @see evas_object_lower() */
-
-      }
-      stack_above {
-         /*@
-         Stack @p obj immediately above @p above
-
-         Objects, in a given canvas, are stacked in the order they get added
-         to it.  This means that, if they overlap, the highest ones will
-         cover the lowest ones, in that order. This function is a way to
-         change the stacking order for the objects.
-
-         This function is intended to be used with <b>objects belonging to
-         the same layer</b> in a given canvas, otherwise it will fail (and
-         accomplish nothing).
-
-         If you have smart objects on your canvas and @p obj is a member of
-         one of them, then @p above must also be a member of the same
-         smart object.
-
-         Similarly, if @p obj is not a member of a smart object, @p above
-         must not be either.
-
-         @see evas_object_layer_get()
-         @see evas_object_layer_set()
-         @see evas_object_stack_below() */
-
-         params {
-            @in Evas_Object *above @nonull; /*@ the object above which to stack */
-         }
-      }
       smart_type_check @const {
          /*@
          Checks whether a given smart object or any of its smart object
@@ -1367,18 +1232,6 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
             present to trigger the event. */
          }
       }
-      lower {
-         /*@
-         Lower @p obj to the bottom of its layer.
-
-         @p obj will, then, be the lowest one in the layer it belongs
-         to. Objects on other layers won't get touched.
-
-         @see evas_object_stack_above()
-         @see evas_object_stack_below()
-         @see evas_object_raise() */
-
-      }
       clip_unset {
          /*@
          Disable/cease clipping on a clipped @p obj object.
@@ -1441,6 +1294,14 @@ abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx.Base)
       Efl.Gfx.Base.color.get;
       Efl.Gfx.Base.size.set;
       Efl.Gfx.Base.size.get;
+      Efl.Gfx.Stack.layer.set;
+      Efl.Gfx.Stack.layer.get;
+      Efl.Gfx.Stack.below.get;
+      Efl.Gfx.Stack.above.get;
+      Efl.Gfx.Stack.stack_below;
+      Efl.Gfx.Stack.stack_above;
+      Efl.Gfx.Stack.raise;
+      Efl.Gfx.Stack.lower;
    }
    events {
        mouse,in; /*@ Mouse In Event */
index f45f91f..4b44830 100644 (file)
@@ -1591,7 +1591,7 @@ _evas_object_eo_base_dbg_info_get(Eo *eo_obj, Evas_Object_Protected_Data *obj EI
 
    eo_do(eo_obj,
          visible = efl_gfx_visible_get(),
-         layer = evas_obj_layer_get(),
+         layer = efl_gfx_stack_layer_get(),
          name = evas_obj_name_get(),
          efl_gfx_position_get(&x, &y),
          efl_gfx_size_get(&w, &h),
index 44508da..84fa6d8 100644 (file)
@@ -37,8 +37,14 @@ evas_object_below_get_internal(const Evas_Object_Protected_Data *obj)
    return NULL;
 }
 
+EAPI void
+evas_object_raise(Evas_Object *obj)
+{
+   eo_do((Evas_Object *)obj, efl_gfx_stack_raise());
+}
+
 EOLIAN void
-_evas_object_raise(Eo *eo_obj, Evas_Object_Protected_Data *obj)
+_evas_object_efl_gfx_stack_raise(Eo *eo_obj, Evas_Object_Protected_Data *obj)
 {
    evas_object_async_block(obj);
    if (evas_object_intercept_call_raise(eo_obj, obj)) return;
@@ -84,8 +90,14 @@ _evas_object_raise(Eo *eo_obj, Evas_Object_Protected_Data *obj)
      }
 }
 
+EAPI void
+evas_object_lower(Evas_Object *obj)
+{
+   eo_do((Evas_Object *)obj, efl_gfx_stack_lower());
+}
+
 EOLIAN void
-_evas_object_lower(Eo *eo_obj, Evas_Object_Protected_Data *obj)
+_evas_object_efl_gfx_stack_lower(Eo *eo_obj, Evas_Object_Protected_Data *obj)
 {
    evas_object_async_block(obj);
    if (evas_object_intercept_call_lower(eo_obj, obj)) return;
@@ -132,8 +144,14 @@ _evas_object_lower(Eo *eo_obj, Evas_Object_Protected_Data *obj)
      }
 }
 
+EAPI void
+evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
+{
+   eo_do((Evas_Object *)obj, efl_gfx_stack_above(above));
+}
+
 EOLIAN void
-_evas_object_stack_above(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *eo_above)
+_evas_object_efl_gfx_stack_stack_above(Eo *eo_obj, Evas_Object_Protected_Data *obj, Efl_Gfx_Stack *eo_above)
 {
    evas_object_async_block(obj);
    if (!eo_above)
@@ -208,8 +226,14 @@ _evas_object_stack_above(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Objec
      }
 }
 
+EAPI void
+evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
+{
+   eo_do((Evas_Object *)obj, efl_gfx_stack_below(below));
+}
+
 EOLIAN void
-_evas_object_stack_below(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *eo_below)
+_evas_object_efl_gfx_stack_stack_below(Eo *eo_obj, Evas_Object_Protected_Data *obj, Efl_Gfx_Stack *eo_below)
 {
    evas_object_async_block(obj);
    if (!eo_below)
@@ -284,8 +308,17 @@ _evas_object_stack_below(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Objec
      }
 }
 
-EOLIAN Evas_Object *
-_evas_object_above_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
+EAPI Evas_Object *
+evas_object_above_get(const Evas_Object *obj)
+{
+   Evas_Object *ret;
+
+   return eo_do_ret((Evas_Object *)obj, ret, efl_gfx_stack_above_get());
+}
+
+EOLIAN Efl_Gfx_Stack *
+_evas_object_efl_gfx_stack_above_get(Eo *eo_obj EINA_UNUSED,
+                                     Evas_Object_Protected_Data *obj)
 {
    if (obj->smart.parent)
      {
@@ -306,8 +339,17 @@ _evas_object_above_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
    return NULL;
 }
 
-EOLIAN Evas_Object *
-_evas_object_below_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
+EAPI Evas_Object *
+evas_object_below_get(const Evas_Object *obj)
+{
+   Evas_Object *ret;
+
+   return eo_do_ret((Evas_Object *)obj, ret, efl_gfx_stack_below_get());
+}
+
+EOLIAN Efl_Gfx_Stack *
+_evas_object_efl_gfx_stack_below_get(Eo *eo_obj EINA_UNUSED,
+                                     Evas_Object_Protected_Data *obj)
 {
    if (obj->smart.parent)
      {