efl: add Efl.Gfx.Stack interface and update Evas_Object accordingly.

This commit is contained in:
Cedric BAIL 2015-04-03 16:23:22 +02:00
parent a77b27f82b
commit 500fe6ef1b
10 changed files with 394 additions and 160 deletions

View 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 \

View 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 \

View 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"

View File

@ -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() */
}
}
}

View 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"

View 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"

View 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)
{

View 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 */

View 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),

View 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)
{