2001-09-14 07:33:57 -07:00
|
|
|
#include "embed.h"
|
|
|
|
|
|
|
|
typedef struct _Embed Embed_Private;
|
|
|
|
|
|
|
|
struct _Embed
|
|
|
|
{
|
|
|
|
Ebits_Object o;
|
|
|
|
Evas evas;
|
|
|
|
Evas_Object image_obj;
|
|
|
|
Evas_Object clip_obj;
|
|
|
|
int clip_x, clip_y;
|
|
|
|
E_Text *text_obj;
|
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_show(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_show(em->evas, em->clip_obj);
|
|
|
|
e_text_show(em->text_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_hide(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_hide(em->evas, em->clip_obj);
|
|
|
|
e_text_hide(em->text_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_move(void *_data, double x, double y)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_move(em->evas, em->clip_obj, x, y);
|
|
|
|
e_text_move(em->text_obj, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_resize(void *_data, double w, double h)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_resize(em->evas, em->clip_obj, w, h);
|
|
|
|
e_text_resize(em->text_obj, w, h);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_raise(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_raise(em->evas, em->clip_obj);
|
|
|
|
e_text_raise(em->text_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_lower(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_lower(em->evas, em->clip_obj);
|
|
|
|
e_text_lower(em->text_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_set_layer(void *_data, int l)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj) evas_set_layer(em->evas, em->clip_obj, l);
|
|
|
|
e_text_set_layer(em->text_obj, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_set_clip(void *_data, Evas_Object clip)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (em->clip_obj)
|
|
|
|
{
|
|
|
|
if (clip)
|
|
|
|
e_text_set_clip(em->clip_obj, clip);
|
|
|
|
else
|
|
|
|
e_text_unset_clip(em->clip_obj);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (clip)
|
|
|
|
e_text_set_clip(em->text_obj, clip);
|
|
|
|
else
|
|
|
|
e_text_unset_clip(em->text_obj);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_set_color_class(void *_data, char *cc, int r, int g, int b, int a)
|
|
|
|
{
|
|
|
|
UN(_data);
|
|
|
|
UN(cc);
|
|
|
|
UN(r);
|
|
|
|
UN(g);
|
|
|
|
UN(b);
|
|
|
|
UN(a);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_get_min_size(void *_data, double *w, double *h)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
e_text_get_min_size(em->text_obj, w, h);
|
|
|
|
if (em->clip_x) *w = 0;
|
|
|
|
if (em->clip_y) *h = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_text_func_get_max_size(void *_data, double *w, double *h)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
e_text_get_max_size(em->text_obj, w, h);
|
|
|
|
if (em->clip_x) *w = 999999999;
|
|
|
|
if (em->clip_y) *h = 999999999;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***/
|
|
|
|
|
|
|
|
Embed
|
|
|
|
e_embed_text(Ebits_Object o, char *bit_name, Evas evas, E_Text *text_obj, int clip_x, int clip_y)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = NEW(Embed_Private, 1);
|
|
|
|
ZERO(em, Embed_Private, 1);
|
|
|
|
em->o = o;
|
|
|
|
em->evas = evas;
|
|
|
|
em->text_obj = text_obj;
|
|
|
|
em->clip_x = clip_x;
|
|
|
|
em->clip_y = clip_y;
|
|
|
|
if ((clip_x) || (clip_y))
|
|
|
|
{
|
|
|
|
em->clip_obj = evas_add_rectangle(em->evas);
|
|
|
|
evas_set_color(em->evas, em->clip_obj, 255, 255, 255, 255);
|
|
|
|
e_text_set_clip(em->text_obj, em->clip_obj);
|
|
|
|
evas_show(em->evas, em->clip_obj);
|
|
|
|
}
|
|
|
|
ebits_set_named_bit_replace(o, bit_name,
|
|
|
|
e_embed_text_func_show,
|
|
|
|
e_embed_text_func_hide,
|
|
|
|
e_embed_text_func_move,
|
|
|
|
e_embed_text_func_resize,
|
|
|
|
e_embed_text_func_raise,
|
|
|
|
e_embed_text_func_lower,
|
|
|
|
e_embed_text_func_set_layer,
|
|
|
|
e_embed_text_func_set_clip,
|
|
|
|
e_embed_text_func_set_color_class,
|
|
|
|
e_embed_text_func_get_min_size,
|
|
|
|
e_embed_text_func_get_max_size,
|
|
|
|
em);
|
|
|
|
return em;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_show(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_show(em->evas, em->image_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_hide(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_hide(em->evas, em->image_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_move(void *_data, double x, double y)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_move(em->evas, em->image_obj, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_resize(void *_data, double w, double h)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_resize(em->evas, em->image_obj, w, h);
|
|
|
|
evas_set_image_fill(em->evas, em->image_obj, 0, 0, w, h);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_raise(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_raise(em->evas, em->image_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_lower(void *_data)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_lower(em->evas, em->image_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_set_layer(void *_data, int l)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_set_layer(em->evas, em->image_obj, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_set_clip(void *_data, Evas_Object clip)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if (clip)
|
|
|
|
evas_set_clip(em->evas, em->image_obj, clip);
|
|
|
|
else
|
|
|
|
evas_unset_clip(em->evas, em->image_obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_set_color_class(void *_data, char *cc, int r, int g, int b, int a)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
if ((cc) && (!strcmp(cc, "icon")))
|
|
|
|
evas_set_color(em->evas, em->image_obj, r, g, b, a);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_get_min_size(void *_data, double *w, double *h)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
int iw, ih;
|
|
|
|
|
|
|
|
em = _data;
|
2001-09-24 14:21:25 -07:00
|
|
|
iw = 0;
|
|
|
|
ih = 0;
|
2001-09-14 07:33:57 -07:00
|
|
|
evas_get_image_size(em->evas, em->image_obj, &iw, &ih);
|
|
|
|
if (w) *w = iw;
|
|
|
|
if (h) *h = ih;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
e_embed_image_func_get_max_size(void *_data, double *w, double *h)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
int iw, ih;
|
|
|
|
|
|
|
|
em = _data;
|
|
|
|
evas_get_image_size(em->evas, em->image_obj, &iw, &ih);
|
|
|
|
if (w) *w = iw;
|
|
|
|
if (h) *h = ih;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***/
|
|
|
|
|
|
|
|
Embed
|
|
|
|
e_embed_image_object(Ebits_Object o, char *bit_name, Evas evas, Evas_Object image_obj)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = NEW(Embed_Private, 1);
|
|
|
|
ZERO(em, Embed_Private, 1);
|
|
|
|
em->o = o;
|
|
|
|
em->evas = evas;
|
|
|
|
em->image_obj = image_obj;
|
|
|
|
ebits_set_named_bit_replace(o, bit_name,
|
|
|
|
e_embed_image_func_show,
|
|
|
|
e_embed_image_func_hide,
|
|
|
|
e_embed_image_func_move,
|
|
|
|
e_embed_image_func_resize,
|
|
|
|
e_embed_image_func_raise,
|
|
|
|
e_embed_image_func_lower,
|
|
|
|
e_embed_image_func_set_layer,
|
|
|
|
e_embed_image_func_set_clip,
|
|
|
|
e_embed_image_func_set_color_class,
|
|
|
|
e_embed_image_func_get_min_size,
|
|
|
|
e_embed_image_func_get_max_size,
|
|
|
|
em);
|
|
|
|
return em;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****/
|
|
|
|
|
|
|
|
void
|
|
|
|
e_embed_free(Embed emb)
|
|
|
|
{
|
|
|
|
Embed_Private *em;
|
|
|
|
|
|
|
|
em = emb;
|
|
|
|
if (em->clip_obj) evas_del_object(em->evas, em->clip_obj);
|
|
|
|
FREE(em);
|
|
|
|
}
|