Introduction
Cela me sert surtout d'aide mémoire. Si quelqu'un voit des erreurs ou autre => mail (compte gmail).
Les fonctions show, hide, color_set, clip_set et clip_unset sont marquées comme obsolète dans Evas.h (FIXME: DELETE ME), mais je n'en suis pas certains, ou peut-être que je n'ai pas compris pourquoi elles sont obsolètes.
En effet, si l'on n'appelle pas la fonction evas_object_show pour chaque objet contenu dans le smart, ces objets ne sont pas affiché lorsqu'on appelle la fonction evas_object_show sur le smart.
exemple : un objet bouton est constitué d'un object rectangle et d'un objet texte.
Si on n'appelle pas evas_object_show (rectangle) et evas_object_show (texte) dans le code du bouton, l'appel à la fonction evas_object_show (bouton) n'affiche pas l'objet.
Par contre, l'objet bouton s'affiche, si, dans le code de l'objet bouton, on appelle evas_object_show (rectangle) et evas_object_show (texte) sans appeler evas_object_show (bouton).
Donc pour faire en sorte d'afficher le bouton uniquement lors de l'appel a la fonction evas_object_show (bouton), on a 2 possibilités (non testées actuellement) :
# ajouter une fonction __my_evas_smart_object_show (Evas_Object * o) qui appellera la fonction evas_object_show () sur chaque sous-objets
# intercepter, dans le code du bouton, l'appel a la fonction evas_object_show() en utilisant la routine evas_object_intercept_show_callback_add ().
Details
Code générique non testé :
My_Evas_Smart.h
#ifndef __MY_EVAS_SMART_H__
#define __MY_EVAS_SMART_H__
Evas_Object * my_evas_smart_object_add (Evas * e);
#endif /* __MY_EVAS_SMART_H__my_evas_smart.c
#include "My_Evas_Smart.h"
typedef struct _smart_data Smart_Data;
struct _smart_data
{
Evas_Object * clip;
/* les donnees de l'object */;
Evas_Coord x, y, w, h;
};
static void _my_evas_smart_object_add(Evas_Object * o);
static void _my_evas_smart_object_del(Evas_Object * o);
static void _my_evas_smart_object_move(Evas_Object * o, Evas_Coord x, Evas_Coord y);
static void _my_evas_smart_object_resize(Evas_Object * o, Evas_Coord w, Evas_Coord h);
static void _my_evas_smart_object_show(Evas_Object * o);
static void _my_evas_smart_object_hide(Evas_Object * o);
static void _my_evas_smart_color_set(Evas_Object * o, int r, int g, int b, int a);
static void _my_evas_smart_clip_set(Evas_Object * o, Evas_Object * clip);
static void _my_evas_smart_clip_unset( Evas_Object * o);
static void _my_evas_smart_calculate(Evas_Object *o);
static void _my_evas_smart_member_add(Evas_Object *o, Evas_Object *child);
static void _my_evas_smart_member_del(Evas_Object *o, Evas_Object *child);
static Evas_Smart * my_smart;
Evas_Smart_Class sclass = {
"my evas smart object name", /* nom de l'object */
EVAS_SMART_CLASS_VERSION, /* macro obligatoire */
_my_evas_smart_object_add, /* créer (evas_object_smart_add) */
_my_evas_smart_object_del, /* supprimer (evas_object_del) */
_my_evas_smart_object_move, /* déplacer (evas_object_move) */
_my_evas_smart_object_resize, /* dimensionner (evas_object_resize) */
_my_evas_smart_object_show, /* afficher (evas_object_show) */
_my_evas_smart_object_hide, /* cacher (evas_object_hide) */
_my_evas_smart_color_set, /* colorer (evas_object_color_set) */
_my_evas_smart_clip_set, /* clipper (evas_object_clip_set) */
_my_evas_smart_clip_unset, /* dé-clipper (evas_object_clip_unset) */
_my_evas_smart_calculate, /* */
_my_evas_smart_member_add, /* */
_my_evas_smart_member_del, /* */
NULL, /* Parent Smart Class (Evas_Smart_Class) */
NULL, /* callbacks (EvasSmart_Cb_Description) */
NULL, /* interfaces (utilisation future) */
NULL /* const void * data */
};
/* --------------------------------------------------------------------------- */
/* Interface publique de l'objet */
/* --------------------------------------------------------------------------- */
Evas_Object *
my_evas_smart_object_add (Evas * e)
{
Evas_Object * o;
if (!smart)
smart = evas_smart_class_new ( &sclass );
o = evas_object_smart_add ( e, smart );
return o;
}
/* --------------------------------------------------------------------------- */
/* Interface publique de l'objet */
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_object_add (Evas_Object * o)
{
Smart_Data * sd;
sd = calloc ( 1, sizeof ( Smart_Data ) )
if (!sd) return ;
/* mise a jour sd */
sd->clip = evas_object_rectangle_add ( evas_object_evas_get (o));
sd->x = 0;
sd->y = 0;
sd->w = 0;
sd->h = 0;
evas_object_smart_data_set (o, sd);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_object_del (Evas_Object * o)
{
Smart_Data * sd;
sd = evas_object_smart_data_get (o);
if (!sd) return ;
free (sd);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_object_move (Evas_Object * o, Evas_Coord x, Evas_Coord y)
{
Smart_Data * sd;
sd = evas_object_smart_data_get (o);
if (!sd) return ;
sd->x = x;
sd->y = y;
evas_object_smart_data_set (o, sd);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_object_resize (Evas_Object * o, Evas_Coord w, Evas_Coord h)
{
Smart_Data * sd;
sd = evas_object_smart_data_get (o);
if (!sd) return ;
sd->w = w;
sd->h = h;
evas_object_smart_data_set (o, sd);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_object_show (Evas_Object * o)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
evas_object_show (sd->clip);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_object_hide (Evas_Object * o)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
evas_object_hide (sd->clip);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_color_set (Evas_Object * o, int r, int g, int b, int a)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
evas_object_color_set (sd->clip, a, r, g, b);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_clip_set (Evas_Object * o, Evas_Object * clip)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
evas_object_clip_set (sd->clip, clip);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_clip_unset ( Evas_Object * o)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
evas_object_clip_set (sd->clip);
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_calculate(Evas_Object *o)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_member_add(Evas_Object *o, Evas_Object *child)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
return ;
}
/* --------------------------------------------------------------------------- */
static void
_my_evas_smart_member_del(Evas_Object *o, Evas_Object *child)
{
Smart_Data * sd;
if (!o) return ;
sd = evas_object_smart_data_get (o)
if (!sd) return ;
return ;
}