My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
EvasSmartObject  
Présentation des Evas Smart Object
Updated May 6, 2011 by samuel.r...@gmail.com

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 ;
}
Powered by Google Project Hosting