work has been done while i've been away. i just need to put this in cvs. many

fixem's have been fixed. text parts work fully now, ALONG with all their
respective effect modes, fits, alignments and "chopping". a few more api
calls have been added and cleaned up. you'll need to update eet too for this
to work.


SVN revision: 7113
This commit is contained in:
Carsten Haitzler 2003-07-07 07:55:18 +00:00
parent f54245420a
commit 1b587fd598
20 changed files with 1196 additions and 313 deletions

View File

@ -1,127 +1,127 @@
images { images {
image, "bg.png" LOSSY 98; image, "bg.png" LOSSY 95;
image, "e.png" LOSSY 98; image, "e.png" LOSSY 95;
// used for anim // used for anim
image, "e001.png" LOSSY 98; image, "e001.png" LOSSY 95;
image, "e002.png" LOSSY 98; image, "e002.png" LOSSY 95;
image, "e003.png" LOSSY 98; image, "e003.png" LOSSY 95;
image, "e004.png" LOSSY 98; image, "e004.png" LOSSY 95;
image, "e005.png" LOSSY 98; image, "e005.png" LOSSY 95;
image, "e006.png" LOSSY 98; image, "e006.png" LOSSY 95;
image, "e007.png" LOSSY 98; image, "e007.png" LOSSY 95;
image, "e008.png" LOSSY 98; image, "e008.png" LOSSY 95;
image, "e009.png" LOSSY 98; image, "e009.png" LOSSY 95;
image, "e010.png" LOSSY 98; image, "e010.png" LOSSY 95;
image, "e011.png" LOSSY 98; image, "e011.png" LOSSY 95;
image, "e012.png" LOSSY 98; image, "e012.png" LOSSY 95;
image, "e013.png" LOSSY 98; image, "e013.png" LOSSY 95;
image, "e014.png" LOSSY 98; image, "e014.png" LOSSY 95;
image, "e015.png" LOSSY 98; image, "e015.png" LOSSY 95;
image, "e016.png" LOSSY 98; image, "e016.png" LOSSY 95;
image, "e017.png" LOSSY 98; image, "e017.png" LOSSY 95;
image, "e018.png" LOSSY 98; image, "e018.png" LOSSY 95;
image, "e019.png" LOSSY 98; image, "e019.png" LOSSY 95;
image, "e020.png" LOSSY 98; image, "e020.png" LOSSY 95;
image, "e021.png" LOSSY 98; image, "e021.png" LOSSY 95;
image, "e022.png" LOSSY 98; image, "e022.png" LOSSY 95;
image, "e023.png" LOSSY 98; image, "e023.png" LOSSY 95;
image, "e024.png" LOSSY 98; image, "e024.png" LOSSY 95;
image, "e025.png" LOSSY 98; image, "e025.png" LOSSY 95;
image, "e026.png" LOSSY 98; image, "e026.png" LOSSY 95;
image, "e027.png" LOSSY 98; image, "e027.png" LOSSY 95;
image, "e028.png" LOSSY 98; image, "e028.png" LOSSY 95;
image, "e029.png" LOSSY 98; image, "e029.png" LOSSY 95;
image, "e030.png" LOSSY 98; image, "e030.png" LOSSY 95;
image, "e031.png" LOSSY 98; image, "e031.png" LOSSY 95;
image, "e032.png" LOSSY 98; image, "e032.png" LOSSY 95;
image, "e033.png" LOSSY 98; image, "e033.png" LOSSY 95;
image, "e034.png" LOSSY 98; image, "e034.png" LOSSY 95;
image, "e035.png" LOSSY 98; image, "e035.png" LOSSY 95;
image, "e036.png" LOSSY 98; image, "e036.png" LOSSY 95;
image, "e037.png" LOSSY 98; image, "e037.png" LOSSY 95;
image, "e038.png" LOSSY 98; image, "e038.png" LOSSY 95;
image, "e039.png" LOSSY 98; image, "e039.png" LOSSY 95;
image, "e040.png" LOSSY 98; image, "e040.png" LOSSY 95;
image, "e041.png" LOSSY 98; image, "e041.png" LOSSY 95;
image, "e042.png" LOSSY 98; image, "e042.png" LOSSY 95;
image, "e043.png" LOSSY 98; image, "e043.png" LOSSY 95;
image, "e044.png" LOSSY 98; image, "e044.png" LOSSY 95;
image, "e045.png" LOSSY 98; image, "e045.png" LOSSY 95;
image, "e046.png" LOSSY 98; image, "e046.png" LOSSY 95;
image, "e047.png" LOSSY 98; image, "e047.png" LOSSY 95;
image, "e048.png" LOSSY 98; image, "e048.png" LOSSY 95;
image, "e049.png" LOSSY 98; image, "e049.png" LOSSY 95;
image, "e050.png" LOSSY 98; image, "e050.png" LOSSY 95;
image, "e051.png" LOSSY 98; image, "e051.png" LOSSY 95;
image, "e052.png" LOSSY 98; image, "e052.png" LOSSY 95;
image, "e053.png" LOSSY 98; image, "e053.png" LOSSY 95;
image, "e054.png" LOSSY 98; image, "e054.png" LOSSY 95;
image, "e055.png" LOSSY 98; image, "e055.png" LOSSY 95;
image, "e056.png" LOSSY 98; image, "e056.png" LOSSY 95;
image, "e057.png" LOSSY 98; image, "e057.png" LOSSY 95;
image, "e058.png" LOSSY 98; image, "e058.png" LOSSY 95;
image, "e059.png" LOSSY 98; image, "e059.png" LOSSY 95;
image, "e060.png" LOSSY 98; image, "e060.png" LOSSY 95;
image, "e061.png" LOSSY 98; image, "e061.png" LOSSY 95;
image, "e062.png" LOSSY 98; image, "e062.png" LOSSY 95;
image, "e063.png" LOSSY 98; image, "e063.png" LOSSY 95;
image, "e064.png" LOSSY 98; image, "e064.png" LOSSY 95;
image, "e065.png" LOSSY 98; image, "e065.png" LOSSY 95;
image, "e066.png" LOSSY 98; image, "e066.png" LOSSY 95;
image, "e067.png" LOSSY 98; image, "e067.png" LOSSY 95;
image, "e068.png" LOSSY 98; image, "e068.png" LOSSY 95;
image, "e069.png" LOSSY 98; image, "e069.png" LOSSY 95;
image, "e070.png" LOSSY 98; image, "e070.png" LOSSY 95;
image, "e071.png" LOSSY 98; image, "e071.png" LOSSY 95;
image, "e072.png" LOSSY 98; image, "e072.png" LOSSY 95;
image, "e073.png" LOSSY 98; image, "e073.png" LOSSY 95;
image, "e074.png" LOSSY 98; image, "e074.png" LOSSY 95;
image, "e075.png" LOSSY 98; image, "e075.png" LOSSY 95;
image, "e076.png" LOSSY 98; image, "e076.png" LOSSY 95;
image, "e077.png" LOSSY 98; image, "e077.png" LOSSY 95;
image, "e078.png" LOSSY 98; image, "e078.png" LOSSY 95;
image, "e079.png" LOSSY 98; image, "e079.png" LOSSY 95;
image, "e080.png" LOSSY 98; image, "e080.png" LOSSY 95;
image, "e081.png" LOSSY 98; image, "e081.png" LOSSY 95;
image, "e082.png" LOSSY 98; image, "e082.png" LOSSY 95;
image, "e083.png" LOSSY 98; image, "e083.png" LOSSY 95;
image, "e084.png" LOSSY 98; image, "e084.png" LOSSY 95;
image, "e085.png" LOSSY 98; image, "e085.png" LOSSY 95;
image, "e086.png" LOSSY 98; image, "e086.png" LOSSY 95;
image, "e087.png" LOSSY 98; image, "e087.png" LOSSY 95;
image, "e088.png" LOSSY 98; image, "e088.png" LOSSY 95;
image, "e089.png" LOSSY 98; image, "e089.png" LOSSY 95;
image, "e090.png" LOSSY 98; image, "e090.png" LOSSY 95;
image, "e091.png" LOSSY 98; image, "e091.png" LOSSY 95;
image, "e092.png" LOSSY 98; image, "e092.png" LOSSY 95;
image, "e093.png" LOSSY 98; image, "e093.png" LOSSY 95;
image, "e094.png" LOSSY 98; image, "e094.png" LOSSY 95;
image, "e095.png" LOSSY 98; image, "e095.png" LOSSY 95;
image, "e096.png" LOSSY 98; image, "e096.png" LOSSY 95;
image, "e097.png" LOSSY 98; image, "e097.png" LOSSY 95;
image, "e098.png" LOSSY 98; image, "e098.png" LOSSY 95;
image, "e099.png" LOSSY 98; image, "e099.png" LOSSY 95;
image, "e100.png" LOSSY 98; image, "e100.png" LOSSY 95;
image, "e101.png" LOSSY 98; image, "e101.png" LOSSY 95;
image, "e102.png" LOSSY 98; image, "e102.png" LOSSY 95;
image, "e103.png" LOSSY 98; image, "e103.png" LOSSY 95;
image, "e104.png" LOSSY 98; image, "e104.png" LOSSY 95;
image, "e105.png" LOSSY 98; image, "e105.png" LOSSY 95;
image, "e106.png" LOSSY 98; image, "e106.png" LOSSY 95;
image, "e107.png" LOSSY 98; image, "e107.png" LOSSY 95;
image, "e108.png" LOSSY 98; image, "e108.png" LOSSY 95;
image, "e109.png" LOSSY 98; image, "e109.png" LOSSY 95;
image, "e110.png" LOSSY 98; image, "e110.png" LOSSY 95;
image, "e111.png" LOSSY 98; image, "e111.png" LOSSY 95;
image, "e112.png" LOSSY 98; image, "e112.png" LOSSY 95;
image, "e113.png" LOSSY 98; image, "e113.png" LOSSY 95;
image, "e114.png" LOSSY 98; image, "e114.png" LOSSY 95;
image, "e115.png" LOSSY 98; image, "e115.png" LOSSY 95;
image, "e116.png" LOSSY 98; image, "e116.png" LOSSY 95;
image, "e117.png" LOSSY 98; image, "e117.png" LOSSY 95;
image, "e118.png" LOSSY 98; image, "e118.png" LOSSY 95;
image, "e119.png" LOSSY 98; image, "e119.png" LOSSY 95;
image, "e120.png" LOSSY 98; image, "e120.png" LOSSY 95;
} }
collections { collections {
@ -147,6 +147,35 @@ collections {
border, 12 12 12 12; border, 12 12 12 12;
} }
} }
part {
name, "text";
type, TEXT;
effect, SOFT_SHADOW;
description {
state, "default" 0.0;
rel1 {
relative, 1.0 0.0;
offset, 0 0;
to, "logo";
}
rel2 {
relative, 2.0, 1.0;
offset, -64, -1;
to, "logo";
}
color, 255 255 255 255;
// color2, 0 0 255 255;
color3, 0 0 0 32;
text {
text, "This is a longer test string";
font, "Vera-Bold";
size, 8;
fit, 0 0;
// min, 1 1;
align, 0.0 0.5;
}
}
}
/* /*
part { part {
name, "clip"; name, "clip";

View File

@ -22,6 +22,10 @@ collections
name, "background"; name, "background";
// IMAGE, RECTANGLE, TEXT // IMAGE, RECTANGLE, TEXT
// type, IMAGE; // type, IMAGE;
// for text only really
// NONE, PLAIN, OUTLINE, SOFT_OUTLINE, SHADOW, SOFT_SHADOW, OUTLINE_SHADOW,
// OUTLINE_SOFT_SHADOW
// effect, NONE;
mouse_events, 0; mouse_events, 0;
// clip_to "p1"; // clip_to "p1";
// color_class, "default"; // color_class, "default";
@ -87,7 +91,6 @@ collections
// text, "test text"; // text, "test text";
// font, "Vera"; // font, "Vera";
// size, 12; // size, 12;
// effect, PLAIN;
// fit, 0 0; // fit, 0 0;
// min, 1 1; // min, 1 1;
// align 0.5 0.5; // align 0.5 0.5;

View File

@ -3,6 +3,7 @@
#include <Evas.h> #include <Evas.h>
#include <Ecore.h> #include <Ecore.h>
#include <Ecore_X.h>
#include <Ecore_Evas.h> #include <Ecore_Evas.h>
/* ... only for testing */ /* ... only for testing */
#include <Eet.h> #include <Eet.h>

View File

@ -49,7 +49,7 @@ int parse_enum(int n, ...);
int parse_int(int n); int parse_int(int n);
int parse_int_range(int n, int f, int t); int parse_int_range(int n, int f, int t);
double parse_float(int n); double parse_float(int n);
double parse_float_range(int n, int f, int t); double parse_float_range(int n, double f, double t);
int object_handler_num(void); int object_handler_num(void);
int statement_handler_num(void); int statement_handler_num(void);

View File

@ -15,6 +15,7 @@ static void ob_collections_group_parts(void);
static void ob_collections_group_parts_part(void); static void ob_collections_group_parts_part(void);
static void st_collections_group_parts_part_name(void); static void st_collections_group_parts_part_name(void);
static void st_collections_group_parts_part_type(void); static void st_collections_group_parts_part_type(void);
static void st_collections_group_parts_part_effect(void);
static void st_collections_group_parts_part_mouse_events(void); static void st_collections_group_parts_part_mouse_events(void);
static void st_collections_group_parts_part_clip_to_id(void); static void st_collections_group_parts_part_clip_to_id(void);
static void st_collections_group_parts_part_color_class(void); static void st_collections_group_parts_part_color_class(void);
@ -51,7 +52,6 @@ static void st_collections_group_parts_part_description_color3(void);
static void st_collections_group_parts_part_description_text_text(void); static void st_collections_group_parts_part_description_text_text(void);
static void st_collections_group_parts_part_description_text_font(void); static void st_collections_group_parts_part_description_text_font(void);
static void st_collections_group_parts_part_description_text_size(void); static void st_collections_group_parts_part_description_text_size(void);
static void st_collections_group_parts_part_description_text_effect(void);
static void st_collections_group_parts_part_description_text_fit(void); static void st_collections_group_parts_part_description_text_fit(void);
static void st_collections_group_parts_part_description_text_min(void); static void st_collections_group_parts_part_description_text_min(void);
static void st_collections_group_parts_part_description_text_align(void); static void st_collections_group_parts_part_description_text_align(void);
@ -76,6 +76,7 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.name", st_collections_group_name}, {"collections.group.name", st_collections_group_name},
{"collections.group.parts.part.name", st_collections_group_parts_part_name}, {"collections.group.parts.part.name", st_collections_group_parts_part_name},
{"collections.group.parts.part.type", st_collections_group_parts_part_type}, {"collections.group.parts.part.type", st_collections_group_parts_part_type},
{"collections.group.parts.part.effect", st_collections_group_parts_part_effect},
{"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events}, {"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events},
{"collections.group.parts.part.clip_to", st_collections_group_parts_part_clip_to_id}, {"collections.group.parts.part.clip_to", st_collections_group_parts_part_clip_to_id},
{"collections.group.parts.part.color_class", st_collections_group_parts_part_color_class}, {"collections.group.parts.part.color_class", st_collections_group_parts_part_color_class},
@ -110,7 +111,6 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.description.text.text", st_collections_group_parts_part_description_text_text}, {"collections.group.parts.part.description.text.text", st_collections_group_parts_part_description_text_text},
{"collections.group.parts.part.description.text.font", st_collections_group_parts_part_description_text_font}, {"collections.group.parts.part.description.text.font", st_collections_group_parts_part_description_text_font},
{"collections.group.parts.part.description.text.size", st_collections_group_parts_part_description_text_size}, {"collections.group.parts.part.description.text.size", st_collections_group_parts_part_description_text_size},
{"collections.group.parts.part.description.text.effect", st_collections_group_parts_part_description_text_effect},
{"collections.group.parts.part.description.text.fit", st_collections_group_parts_part_description_text_fit}, {"collections.group.parts.part.description.text.fit", st_collections_group_parts_part_description_text_fit},
{"collections.group.parts.part.description.text.min", st_collections_group_parts_part_description_text_min}, {"collections.group.parts.part.description.text.min", st_collections_group_parts_part_description_text_min},
{"collections.group.parts.part.description.text.align", st_collections_group_parts_part_description_text_align}, {"collections.group.parts.part.description.text.align", st_collections_group_parts_part_description_text_align},
@ -135,6 +135,7 @@ New_Object_Handler object_handlers[] =
{"collections.group.parts.part", ob_collections_group_parts_part}, {"collections.group.parts.part", ob_collections_group_parts_part},
{"collections.group.parts.part.name", NULL}, {"collections.group.parts.part.name", NULL},
{"collections.group.parts.part.type", NULL}, {"collections.group.parts.part.type", NULL},
{"collections.group.parts.part.effect", NULL},
{"collections.group.parts.part.mouse_events", NULL}, {"collections.group.parts.part.mouse_events", NULL},
{"collections.group.parts.part.clip_to", NULL}, {"collections.group.parts.part.clip_to", NULL},
{"collections.group.parts.part.color_class", NULL}, {"collections.group.parts.part.color_class", NULL},
@ -178,7 +179,6 @@ New_Object_Handler object_handlers[] =
{"collections.group.parts.part.description.text.text", NULL}, {"collections.group.parts.part.description.text.text", NULL},
{"collections.group.parts.part.description.text.font", NULL}, {"collections.group.parts.part.description.text.font", NULL},
{"collections.group.parts.part.description.text.size", NULL}, {"collections.group.parts.part.description.text.size", NULL},
{"collections.group.parts.part.description.text.effect", NULL},
{"collections.group.parts.part.description.text.fit", NULL}, {"collections.group.parts.part.description.text.fit", NULL},
{"collections.group.parts.part.description.text.min", NULL}, {"collections.group.parts.part.description.text.min", NULL},
{"collections.group.parts.part.description.text.align", NULL}, {"collections.group.parts.part.description.text.align", NULL},
@ -445,6 +445,8 @@ ob_collections_group_parts_part_description(void)
ed->color3.g = 0; ed->color3.g = 0;
ed->color3.b = 0; ed->color3.b = 0;
ed->color3.a = 128; ed->color3.a = 128;
ed->text.align.x = 0.5;
ed->text.align.y = 0.5;
} }
static void static void
@ -614,8 +616,8 @@ st_collections_group_parts_part_description_rel1_relative(void)
ep = evas_list_data(evas_list_last(pc->parts)); ep = evas_list_data(evas_list_last(pc->parts));
ed = ep->default_desc; ed = ep->default_desc;
if (ep->other_desc) ed = evas_list_data(evas_list_last(ep->other_desc)); if (ep->other_desc) ed = evas_list_data(evas_list_last(ep->other_desc));
ed->rel1.relative_x = parse_float_range(0, 0.0, 1.0); ed->rel1.relative_x = parse_float(0);
ed->rel1.relative_y = parse_float_range(1, 0.0, 1.0); ed->rel1.relative_y = parse_float(1);
} }
static void static void
@ -664,8 +666,8 @@ st_collections_group_parts_part_description_rel2_relative(void)
ep = evas_list_data(evas_list_last(pc->parts)); ep = evas_list_data(evas_list_last(pc->parts));
ed = ep->default_desc; ed = ep->default_desc;
if (ep->other_desc) ed = evas_list_data(evas_list_last(ep->other_desc)); if (ep->other_desc) ed = evas_list_data(evas_list_last(ep->other_desc));
ed->rel2.relative_x = parse_float_range(0, 0.0, 1.0); ed->rel2.relative_x = parse_float(0);
ed->rel2.relative_y = parse_float_range(1, 0.0, 1.0); ed->rel2.relative_y = parse_float(1);
} }
static void static void
@ -931,7 +933,7 @@ st_collections_group_parts_part_description_text_size(void)
} }
static void static void
st_collections_group_parts_part_description_text_effect(void) st_collections_group_parts_part_effect(void)
{ {
Edje_Part_Collection *pc; Edje_Part_Collection *pc;
Edje_Part *ep; Edje_Part *ep;
@ -939,15 +941,16 @@ st_collections_group_parts_part_description_text_effect(void)
pc = evas_list_data(evas_list_last(edje_collections)); pc = evas_list_data(evas_list_last(edje_collections));
ep = evas_list_data(evas_list_last(pc->parts)); ep = evas_list_data(evas_list_last(pc->parts));
ed = ep->default_desc; ep->effect = parse_enum(0,
if (ep->other_desc) ed = evas_list_data(evas_list_last(ep->other_desc)); "NONE", EDJE_TEXT_EFFECT_NONE,
ed->text.effect = parse_enum(0, "PLAIN", EDJE_TEXT_EFFECT_PLAIN,
"NONE", EDJE_TEXT_EFFECT_NONE, "OUTLINE", EDJE_TEXT_EFFECT_OUTLINE,
"PLAIN", EDJE_TEXT_EFFECT_PLAIN, "SOFT_OUTLINE", EDJE_TEXT_EFFECT_SOFT_OUTLINE,
"OUTLINE", EDJE_TEXT_EFFECT_OUTLINE, "SHADOW", EDJE_TEXT_EFFECT_SHADOW,
"SHADOW", EDJE_TEXT_EFFECT_SHADOW, "SOFT_SHADOW", EDJE_TEXT_EFFECT_SOFT_SHADOW,
"SHADOW_OUTLINE", EDJE_TEXT_EFFECT_OUTLINE_SHADOW, "OUTLINE_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SHADOW,
NULL); "OUTLINE_SOFT_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW,
NULL);
} }
static void static void

View File

@ -137,8 +137,15 @@ data_write(void)
} }
if (verbose) if (verbose)
{ {
printf("%s: Wrote %9i bytes (%4iKb) for \"%s\" image entry \"%s\"\n", struct stat st;
progname, bytes, (bytes + 512) / 1024, buf, img->entry);
if (stat(imlib_image_get_filename(), &st) != 0)
st.st_size = 0;
printf("%s: Wrote %9i bytes (%4iKb) for \"%s\" image entry \"%s\" compress: [raw: %2.1f%%] [real: %2.1f%%]\n",
progname, bytes, (bytes + 512) / 1024, buf, img->entry,
100 - (100 * (double)bytes) / ((double)(im_w * im_h * 4)),
100 - (100 * (double)bytes) / ((double)(st.st_size))
);
} }
imlib_image_put_back_data(im_data); imlib_image_put_back_data(im_data);
imlib_free_image(); imlib_free_image();

View File

@ -476,7 +476,7 @@ parse_float(int n)
} }
double double
parse_float_range(int n, int f, int t) parse_float_range(int n, double f, double t)
{ {
char *str; char *str;
double i; double i;
@ -491,7 +491,7 @@ parse_float_range(int n, int f, int t)
i = atof(str); i = atof(str);
if ((i < f) || (i > t)) if ((i < f) || (i > t))
{ {
fprintf(stderr, "%s: Error. %s:%i integer %i out of range of %3.3f to %3.3f inclusive\n", fprintf(stderr, "%s: Error. %s:%i float %3.3f out of range of %3.3f to %3.3f inclusive\n",
progname, file_in, line, i, f, t); progname, file_in, line, i, f, t);
exit(-1); exit(-1);
} }

View File

@ -6,11 +6,33 @@ static void main_resize(Ecore_Evas *ee);
static int main_signal_exit(void *data, int ev_type, void *ev); static int main_signal_exit(void *data, int ev_type, void *ev);
static void main_delete_request(Ecore_Evas *ee); static void main_delete_request(Ecore_Evas *ee);
void bg_setup(void); void bg_setup(void);
void bg_resize(double w, double h); void bg_resize(double w, double h);
static void bg_key_down(void *data, Evas * e, Evas_Object * obj, void *event_info);
void test_setup(char *file, char *name); void test_setup(char *file, char *name);
void test_reize(double w, double h); void test_reize(double w, double h);
typedef struct _Demo_Edje Demo_Edje;
struct _Demo_Edje
{
Evas_Object *edje;
Evas_Object *left;
Evas_Object *right;
Evas_Object *top;
Evas_Object *bottom;
Evas_Object *title;
Evas_Object *title_clip;
Evas_Object *image;
int down_top : 1;
int down_bottom : 1;
int hdir;
int vdir;
};
static Evas_List *edjes = NULL;
static Evas_Object *o_bg = NULL;
static Evas_Object *o_shadow = NULL;
double start_time = 0.0; double start_time = 0.0;
Ecore_Evas *ecore_evas = NULL; Ecore_Evas *ecore_evas = NULL;
@ -49,10 +71,8 @@ main_start(int argc, char **argv)
ecore_evas_name_class_set(ecore_evas, "edje", "main"); ecore_evas_name_class_set(ecore_evas, "edje", "main");
ecore_evas_show(ecore_evas); ecore_evas_show(ecore_evas);
evas = ecore_evas_get(ecore_evas); evas = ecore_evas_get(ecore_evas);
// evas_image_cache_set(evas, 1024 * 1024); evas_image_cache_set(evas, 8 * 1024 * 1024);
// evas_font_cache_set(evas, 256 * 1024); evas_font_cache_set(evas, 1 * 1024 * 1024);
evas_image_cache_set(evas, 0);
evas_font_cache_set(evas, 0);
evas_font_path_append(evas, DAT"data/test/fonts"); evas_font_path_append(evas, DAT"data/test/fonts");
return 1; return 1;
} }
@ -87,9 +107,6 @@ main_delete_request(Ecore_Evas *ee)
ecore_main_loop_quit(); ecore_main_loop_quit();
} }
static Evas_Object *o_bg = NULL;
static Evas_Object *o_shadow = NULL;
void void
bg_setup(void) bg_setup(void)
{ {
@ -104,6 +121,8 @@ bg_setup(void)
evas_object_image_fill_set(o, 0, 0, 128, 128); evas_object_image_fill_set(o, 0, 0, 128, 128);
evas_object_pass_events_set(o, 1); evas_object_pass_events_set(o, 1);
evas_object_show(o); evas_object_show(o);
evas_object_focus_set(o, 1);
evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN, bg_key_down, NULL);
o_bg = o; o_bg = o;
o = evas_object_image_add(evas); o = evas_object_image_add(evas);
@ -126,25 +145,27 @@ bg_resize(double w, double h)
evas_object_image_fill_set(o_shadow, 0, 0, w, h); evas_object_image_fill_set(o_shadow, 0, 0, w, h);
} }
typedef struct _Demo_Edje Demo_Edje; static void
bg_key_down(void *data, Evas * e, Evas_Object * obj, void *event_info)
struct _Demo_Edje
{ {
Evas_Object *edje; Evas_Event_Key_Down *ev;
Evas_Object *left;
Evas_Object *right; ev = (Evas_Event_Key_Down *)event_info;
Evas_Object *top; {
Evas_Object *bottom; Evas_List *l;
Evas_Object *title;
Evas_Object *title_clip; for (l = edjes; l; l = l->next)
Evas_Object *image; {
int down_top : 1; Demo_Edje *de;
int down_bottom : 1;
int hdir; de = l->data;
int vdir; if (!strcmp(ev->keyname, "p")) edje_play_set(de->edje, 1);
}; else if (!strcmp(ev->keyname, "o")) edje_play_set(de->edje, 0);
else if (!strcmp(ev->keyname, "a")) edje_animation_set(de->edje, 1);
static Evas_List *edjes = NULL; else if (!strcmp(ev->keyname, "s")) edje_animation_set(de->edje, 0);
}
}
}
static void cb (void *data, Evas_Object *o, const char *sig, const char *src); static void cb (void *data, Evas_Object *o, const char *sig, const char *src);

View File

@ -19,8 +19,14 @@ extern "C" {
void edje_signal_callback_add(Evas_Object *o, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data); void edje_signal_callback_add(Evas_Object *o, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data);
void *edje_signal_callback_del(Evas_Object *o, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source)); void *edje_signal_callback_del(Evas_Object *o, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source));
void edje_signal_emit(Evas_Object *o, const char *emission, const char *source); void edje_signal_emit(Evas_Object *o, const char *emission, const char *source);
void edje_play_set(Evas_Object *obj, int play);
void edje_part_geometry_get(Evas_Object *o, char *part, double *x, double *y, double *w, double *h); int edje_play_get(Evas_Object *obj);
void edje_animation_set(Evas_Object *obj, int on);
int edje_animation_get(Evas_Object *obj);
int edje_part_exists(Evas_Object *obj, const char *part);
void edje_part_geometry_get(Evas_Object *o, const char *part, double *x, double *y, double *w, double *h);
void edje_part_text_set(Evas_Object *o, const char *part, const char *text);
const char *edje_part_text_get(Evas_Object *obj, const char *part);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -23,6 +23,7 @@ edje_load.c \
edje_main.c \ edje_main.c \
edje_program.c \ edje_program.c \
edje_smart.c \ edje_smart.c \
edje_text.c \
edje_util.c \ edje_util.c \
edje_private.h edje_private.h

View File

@ -337,26 +337,20 @@ _edje_part_recalc_single(Edje *ed,
size = chosen_desc->text.size; size = chosen_desc->text.size;
if (ep->text.text) text = ep->text.text; if (ep->text.text) text = ep->text.text;
if (ep->text.font) font = ep->text.font; if (ep->text.font) font = ep->text.font;
if (ep->text.size) size = ep->text.size; if (ep->text.size > 0) size = ep->text.size;
evas_object_text_font_set(ep->object, font, size); evas_object_text_font_set(ep->object, font, size);
if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y)) if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y))
{ {
evas_object_text_text_set(ep->object, text); evas_object_text_text_set(ep->object, text);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th); evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
if (chosen_desc->text.min_x) if (chosen_desc->text.min_x)
{ minw = tw +
minw = tw; _edje_text_styles[ep->part->effect].pad.l +
/* FIXME: account for effect */ _edje_text_styles[ep->part->effect].pad.r;
/* for now just add 2 */
minw += 2;
}
if (chosen_desc->text.min_y) if (chosen_desc->text.min_y)
{ minw = th +
minh = th; _edje_text_styles[ep->part->effect].pad.t +
/* FIXME: account for effect */ _edje_text_styles[ep->part->effect].pad.b;
/* for now just add 2 */
minw += 2;
}
} }
} }
/* adjust for min size */ /* adjust for min size */
@ -507,7 +501,6 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep)
{ {
_edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, ep->param2.rel1_to, ep->param2.rel2_to, ep->param2.confine_to, &p2); _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, ep->param2.rel1_to, ep->param2.rel2_to, ep->param2.confine_to, &p2);
/* FIXME: pos isnt just linear - depends on tween method */
pos = ep->description_pos; pos = ep->description_pos;
/* visible is special */ /* visible is special */
@ -569,11 +562,13 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep)
{ {
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
evas_object_resize(ep->object, p3.w, p3.h); evas_object_resize(ep->object, p3.w, p3.h);
evas_object_color_set(ep->object, p3.color.r, p3.color.g, p3.color.b, p3.color.a);
if (p3.visible) evas_object_show(ep->object);
else evas_object_hide(ep->object);
} }
else if (ep->part->type == EDJE_PART_TYPE_TEXT) else if (ep->part->type == EDJE_PART_TYPE_TEXT)
{ {
/* FIXME: if text object calculate text now */ _edje_text_recalc_apply(ed, ep, &p3, chosen_desc);
/* FIXME: set other colors */
} }
else if (ep->part->type == EDJE_PART_TYPE_IMAGE) else if (ep->part->type == EDJE_PART_TYPE_IMAGE)
{ {
@ -610,10 +605,10 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep)
snprintf(buf, sizeof(buf), "images/%i", image_id); snprintf(buf, sizeof(buf), "images/%i", image_id);
evas_object_image_file_set(ep->object, ed->file->path, buf); evas_object_image_file_set(ep->object, ed->file->path, buf);
evas_object_color_set(ep->object, p3.color.r, p3.color.g, p3.color.b, p3.color.a);
if (p3.visible) evas_object_show(ep->object);
else evas_object_hide(ep->object);
} }
if (p3.visible) evas_object_show(ep->object);
else evas_object_hide(ep->object);
evas_object_color_set(ep->object, p3.color.r, p3.color.g, p3.color.b, p3.color.a);
ep->x = p3.x; ep->x = p3.x;
ep->y = p3.y; ep->y = p3.y;

View File

@ -41,7 +41,25 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
ed = data; ed = data;
rp = evas_object_data_get(obj, "real_part"); rp = evas_object_data_get(obj, "real_part");
if (!rp) return; if (!rp) return;
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button); if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_DOWN)
{
Ecore_X_Event_Mouse_Button_Down *evx;
evx = ecore_event_current_event_get();
if (evx)
{
if (evx->triple_click)
snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button);
else if (evx->double_click)
snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button);
else
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
}
else
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
}
else
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
if (rp->clicked_button == 0) if (rp->clicked_button == 0)
{ {
rp->clicked_button = ev->button; rp->clicked_button = ev->button;
@ -144,15 +162,18 @@ _edje_timer_cb(void *data)
ed = animl->data; ed = animl->data;
_edje_freeze(ed); _edje_freeze(ed);
animl = evas_list_remove(animl, animl->data); animl = evas_list_remove(animl, animl->data);
for (l = ed->actions; l; l = l->next) if (!ed->paused)
newl = evas_list_append(newl, l->data);
while (newl)
{ {
Edje_Running_Program *runp; for (l = ed->actions; l; l = l->next)
newl = evas_list_append(newl, l->data);
runp = newl->data; while (newl)
newl = evas_list_remove(newl, newl->data); {
_edje_program_run_iterate(runp, t); Edje_Running_Program *runp;
runp = newl->data;
newl = evas_list_remove(newl, newl->data);
_edje_program_run_iterate(runp, t);
}
} }
_edje_thaw(ed); _edje_thaw(ed);
_edje_unref(ed); _edje_unref(ed);

View File

@ -13,86 +13,61 @@ Eet_Data_Descriptor *_edje_edd_edje_part = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_description = NULL; Eet_Data_Descriptor *_edje_edd_edje_part_description = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL; Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL;
#define NEWD(str, typ) \
eet_data_descriptor_new(str, sizeof(typ), \
(void *(*) (void *))evas_list_next, \
(void *(*) (void *, void *))evas_list_append, \
(void *(*) (void *))evas_list_data, \
(void *(*) (void *))evas_list_free, \
(void (*) (void *, int (*) (void *, const char *, void *, void *), void *))evas_hash_foreach, \
(void *(*) (void *, const char *, void *))evas_hash_add, \
(void (*) (void *))evas_hash_free)
void void
_edje_edd_setup(void) _edje_edd_setup(void)
{ {
/* image directory */ /* image directory */
_edje_edd_edje_image_directory_entry = _edje_edd_edje_image_directory_entry =
eet_data_descriptor_new("Edje_Image_Directory_Entry", NEWD("Edje_Image_Directory_Entry",
sizeof(Edje_Image_Directory_Entry), Edje_Image_Directory_Entry);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "entry", entry, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "entry", entry, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_type", source_type, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_type", source_type, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_param", source_param, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "source_param", source_param, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, Edje_Image_Directory_Entry, "id", id, EET_T_INT);
_edje_edd_edje_image_directory = _edje_edd_edje_image_directory =
eet_data_descriptor_new("Edje_Image_Directory", NEWD("Edje_Image_Directory",
sizeof(Edje_Image_Directory), Edje_Image_Directory);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_image_directory, Edje_Image_Directory, "entries", entries, _edje_edd_edje_image_directory_entry); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_image_directory, Edje_Image_Directory, "entries", entries, _edje_edd_edje_image_directory_entry);
/* collection directory */ /* collection directory */
_edje_edd_edje_part_collection_directory_entry = _edje_edd_edje_part_collection_directory_entry =
eet_data_descriptor_new("Edje_Part_Collection_Directory_Entry", NEWD("Edje_Part_Collection_Directory_Entry",
sizeof(Edje_Part_Collection_Directory_Entry), Edje_Part_Collection_Directory_Entry);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "entry", entry, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "entry", entry, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "id", id, EET_T_INT);
_edje_edd_edje_part_collection_directory = _edje_edd_edje_part_collection_directory =
eet_data_descriptor_new("Edje_Part_Collection_Directory", NEWD("Edje_Part_Collection_Directory",
sizeof(Edje_Part_Collection_Directory), Edje_Part_Collection_Directory);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection_directory, Edje_Part_Collection_Directory, "entries", entries, _edje_edd_edje_part_collection_directory_entry); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection_directory, Edje_Part_Collection_Directory, "entries", entries, _edje_edd_edje_part_collection_directory_entry);
/* the main file directory */ /* the main file directory */
_edje_edd_edje_file = _edje_edd_edje_file =
eet_data_descriptor_new("Edje_File", NEWD("Edje_File",
sizeof(Edje_File), Edje_File);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", image_dir, _edje_edd_edje_image_directory); EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", image_dir, _edje_edd_edje_image_directory);
EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", collection_dir, _edje_edd_edje_part_collection_directory); EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", collection_dir, _edje_edd_edje_part_collection_directory);
/* parts & programs - loaded induvidually */ /* parts & programs - loaded induvidually */
_edje_edd_edje_program_target = _edje_edd_edje_program_target =
eet_data_descriptor_new("Edje_Program_Target", NEWD("Edje_Program_Target",
sizeof(Edje_Program_Target), Edje_Program_Target);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target, "id", id, EET_T_INT);
_edje_edd_edje_program = _edje_edd_edje_program =
eet_data_descriptor_new("Edje_Program", NEWD("Edje_Program",
sizeof(Edje_Program), Edje_Program);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "id", id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal", signal, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal", signal, EET_T_STRING);
@ -109,23 +84,13 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "after", after, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "after", after, EET_T_INT);
_edje_edd_edje_part_image_id = _edje_edd_edje_part_image_id =
eet_data_descriptor_new("Edje_Part_Image_Id", NEWD("Edje_Part_Image_Id",
sizeof(Edje_Part_Image_Id), Edje_Part_Image_Id);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_image_id, Edje_Part_Image_Id, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_image_id, Edje_Part_Image_Id, "id", id, EET_T_INT);
_edje_edd_edje_part_description = _edje_edd_edje_part_description =
eet_data_descriptor_new("Edje_Part_Description", NEWD("Edje_Part_Description",
sizeof(Edje_Part_Description), Edje_Part_Description);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.name", state.name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.name", state.name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.value", state.value, EET_T_DOUBLE); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "state.value", state.value, EET_T_DOUBLE);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "visible", visible, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "visible", visible, EET_T_CHAR);
@ -186,7 +151,6 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.text", text.text, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.text", text.text, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.font", text.font, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.font", text.font, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.size", text.size, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.size", text.size, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.effect", text.effect, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.fit_x", text.fit_x, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.fit_x", text.fit_x, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.fit_y", text.fit_y, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.fit_y", text.fit_y, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.min_x", text.min_x, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.min_x", text.min_x, EET_T_CHAR);
@ -195,16 +159,12 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.align.y", text.align.y, EET_T_DOUBLE); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.align.y", text.align.y, EET_T_DOUBLE);
_edje_edd_edje_part = _edje_edd_edje_part =
eet_data_descriptor_new("Edje_Part", NEWD("Edje_Part",
sizeof(Edje_Part), Edje_Part);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "name", name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "id", id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "type", type, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "type", type, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "effect", effect, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", mouse_events, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", mouse_events, EET_T_CHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", clip_to_id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", clip_to_id, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "color_class", color_class, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "color_class", color_class, EET_T_STRING);
@ -213,13 +173,8 @@ _edje_edd_setup(void)
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part, Edje_Part, "other_desc", other_desc, _edje_edd_edje_part_description); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part, Edje_Part, "other_desc", other_desc, _edje_edd_edje_part_description);
_edje_edd_edje_part_collection = _edje_edd_edje_part_collection =
eet_data_descriptor_new("Edje_Part_Collection", NEWD("Edje_Part_Collection",
sizeof(Edje_Part_Collection), Edje_Part_Collection);
evas_list_next,
evas_list_append,
evas_list_data,
evas_hash_foreach,
evas_hash_add);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "programs", programs, _edje_edd_edje_program); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "programs", programs, _edje_edd_edje_program);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "parts", parts, _edje_edd_edje_part); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, "parts", parts, _edje_edd_edje_part);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT);

View File

@ -35,8 +35,10 @@ edje_file_set(Evas_Object *obj, const char *file, const char *part)
ep = l->data; ep = l->data;
rp = calloc(1, sizeof(Edje_Real_Part)); rp = calloc(1, sizeof(Edje_Real_Part));
if (!rp) return; if (!rp) return;
rp->part = ep;
ed->parts = evas_list_append(ed->parts, rp); ed->parts = evas_list_append(ed->parts, rp);
rp->param1.description = ep->default_desc; rp->param1.description = ep->default_desc;
_edje_text_part_on_add(ed, rp);
if (ep->type == EDJE_PART_TYPE_RECTANGLE) if (ep->type == EDJE_PART_TYPE_RECTANGLE)
rp->object = evas_object_rectangle_add(ed->evas); rp->object = evas_object_rectangle_add(ed->evas);
else if (ep->type == EDJE_PART_TYPE_IMAGE) else if (ep->type == EDJE_PART_TYPE_IMAGE)
@ -76,7 +78,6 @@ edje_file_set(Evas_Object *obj, const char *file, const char *part)
evas_object_pass_events_set(rp->object, 1); evas_object_pass_events_set(rp->object, 1);
evas_object_clip_set(rp->object, ed->clipper); evas_object_clip_set(rp->object, ed->clipper);
evas_object_show(rp->object); evas_object_show(rp->object);
rp->part = ep;
} }
for (l = ed->parts; l; l = l->next) for (l = ed->parts; l; l = l->next)
{ {
@ -87,6 +88,7 @@ edje_file_set(Evas_Object *obj, const char *file, const char *part)
rp->param1.rel1_to = evas_list_nth(ed->parts, rp->param1.description->rel1.id); rp->param1.rel1_to = evas_list_nth(ed->parts, rp->param1.description->rel1.id);
if (rp->param1.description->rel2.id >= 0) if (rp->param1.description->rel2.id >= 0)
rp->param1.rel2_to = evas_list_nth(ed->parts, rp->param1.description->rel2.id); rp->param1.rel2_to = evas_list_nth(ed->parts, rp->param1.description->rel2.id);
_edje_text_part_on_add_clippers(ed, rp);
if (rp->part->clip_to_id >= 0) if (rp->part->clip_to_id >= 0)
{ {
rp->clip_to = evas_list_nth(ed->parts, rp->part->clip_to_id); rp->clip_to = evas_list_nth(ed->parts, rp->part->clip_to_id);
@ -207,9 +209,12 @@ _edje_file_del(Edje *ed)
Edje_Real_Part *rp; Edje_Real_Part *rp;
rp = ed->parts->data; rp = ed->parts->data;
_edje_text_part_on_del(ed, rp);
evas_object_del(rp->object); evas_object_del(rp->object);
if (rp->text.text) free(rp->text.text); if (rp->text.text) free(rp->text.text);
if (rp->text.font) free(rp->text.font); if (rp->text.font) free(rp->text.font);
if (rp->text.cache.in_str) free(rp->text.cache.in_str);
if (rp->text.cache.out_str) free(rp->text.cache.out_str);
free(rp); free(rp);
ed->parts = evas_list_remove(ed->parts, ed->parts->data); ed->parts = evas_list_remove(ed->parts, ed->parts->data);
} }
@ -245,7 +250,35 @@ _edje_file_del(Edje *ed)
void void
_edje_file_free(Edje_File *edf) _edje_file_free(Edje_File *edf)
{ {
printf("FIXME: leak Edje_File!\n"); if (edf->path) free(edf->path);
if (edf->image_dir)
{
while (edf->image_dir->entries)
{
Edje_Image_Directory_Entry *ie;
ie = edf->image_dir->entries->data;
edf->image_dir->entries = evas_list_remove(edf->image_dir->entries, ie);
if (ie->entry) free(ie->entry);
free(ie);
}
free(edf->image_dir);
}
if (edf->collection_dir)
{
while (edf->collection_dir->entries)
{
Edje_Part_Collection_Directory_Entry *ce;
ce = edf->collection_dir->entries->data;
edf->collection_dir->entries = evas_list_remove(edf->collection_dir->entries, ce);
if (ce->entry) free(ce->entry);
free(ce);
}
free(edf->collection_dir);
}
if (edf->collection_hash) evas_hash_free(edf->collection_hash);
free(edf);
} }
void void

View File

@ -9,6 +9,7 @@ edje_init(void)
if (initted) return; if (initted) return;
initted = 1; initted = 1;
_edje_edd_setup(); _edje_edd_setup();
_edje_text_init();
} }
Edje * Edje *

View File

@ -5,41 +5,47 @@
#include <Evas.h> #include <Evas.h>
#include <Ecore.h> #include <Ecore.h>
#include <Ecore_X.h>
#include <Eet.h> #include <Eet.h>
#include <math.h> #include <math.h>
#include <fnmatch.h> #include <fnmatch.h>
/* FIXME: /* FIXME:
*
* free stuff - no more leaks * free stuff - no more leaks
*
* dragables have to work * dragables have to work
* drag start/top signals etc. * drag start/top signals etc.
* drag needs to have signals with relative pos as arg. * drag needs to have signals with relative pos as arg.
* drag vals should be 0.0 -> 1.0 if drag is confined. "rest" pos = 0.0. * drag vals should be 0.0 -> 1.0 if drag is confined. "rest" pos = 0.0.
* query dragable for its relative pos value * query dragable for its relative pos value
* text parts need to work *
* text and color classes need to work * text and color classes need to work
* reduce linked list walking and list_nth calls *
* named parts need to be able to be "replaced" with new evas objects * named parts need to be able to be "replaced" with new evas objects
* part replacement with object callbacks should be possible * part replacement with object callbacks should be possible
*
* real part size and "before min/max limit" sizes need to be stored per part * real part size and "before min/max limit" sizes need to be stored per part
* need to be able to calculate min & max size of a whole edje * need to be able to calculate min & max size of a whole edje
*
* need to be able to list collections in an eet file * need to be able to list collections in an eet file
*
* externally sourced images need to be supported in edje_cc and edje * externally sourced images need to be supported in edje_cc and edje
* part queries for geometry etc. *
* need to be able to "pause" edjes from API
* need to be able to force anim times to 0.0 from API to turn off animation
* need to detect relative part loops * need to detect relative part loops
* need to detect clip_to part loops * need to detect clip_to part loops
*
* edje_cc should be able to force lossy, lossless, min and max quality and compression of encoded images * edje_cc should be able to force lossy, lossless, min and max quality and compression of encoded images
* edje_cc needs to prune out unused images * edje_cc needs to prune out unused images
* edje_cc might need an option for limiting number of tween images * edje_cc might need an option for limiting number of tween images
*
* audit edje for corrupt/bad input files * audit edje for corrupt/bad input files
*
* ? reduce linked list walking and list_nth calls
* ? add containering (hbox, vbox, table, wrapping multi-line hbox & vbox) * ? add containering (hbox, vbox, table, wrapping multi-line hbox & vbox)
* ? somehow handle double click?
* ? add numeric params to conditions for progs (ranges etc.) * ? add numeric params to conditions for progs (ranges etc.)
* ? containering for multiple children? (hbox, vbox, table, wrapping list) */
*/
/* HOW THIS ALL WORKS: /* HOW THIS ALL WORKS:
@ -103,12 +109,15 @@ typedef struct _Edje_Part_Description Edje_Part_Description;
#define EDJE_PART_TYPE_IMAGE 3 #define EDJE_PART_TYPE_IMAGE 3
#define EDJE_PART_TYPE_LAST 4 #define EDJE_PART_TYPE_LAST 4
#define EDJE_TEXT_EFFECT_NONE 0 #define EDJE_TEXT_EFFECT_NONE 0
#define EDJE_TEXT_EFFECT_PLAIN 1 #define EDJE_TEXT_EFFECT_PLAIN 1
#define EDJE_TEXT_EFFECT_OUTLINE 2 #define EDJE_TEXT_EFFECT_OUTLINE 2
#define EDJE_TEXT_EFFECT_SHADOW 3 #define EDJE_TEXT_EFFECT_SOFT_OUTLINE 3
#define EDJE_TEXT_EFFECT_OUTLINE_SHADOW 4 #define EDJE_TEXT_EFFECT_SHADOW 4
#define EDJE_TEXT_EFFECT_LAST 5 #define EDJE_TEXT_EFFECT_SOFT_SHADOW 5
#define EDJE_TEXT_EFFECT_OUTLINE_SHADOW 6
#define EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW 7
#define EDJE_TEXT_EFFECT_LAST 8
#define EDJE_ACTION_TYPE_NONE 0 #define EDJE_ACTION_TYPE_NONE 0
#define EDJE_ACTION_TYPE_STATE_SET 1 #define EDJE_ACTION_TYPE_STATE_SET 1
@ -218,6 +227,7 @@ struct _Edje_Part
char *name; /* the name if any of the part */ char *name; /* the name if any of the part */
int id; /* its id number */ int id; /* its id number */
unsigned char type; /* what type (image, rect, text) */ unsigned char type; /* what type (image, rect, text) */
unsigned char effect; /* 0 = plain... */
unsigned char mouse_events; /* it will affect/respond to mouse events */ unsigned char mouse_events; /* it will affect/respond to mouse events */
int clip_to_id; /* the part id to clip this one to */ int clip_to_id; /* the part id to clip this one to */
char *color_class; /* how to modify the color */ char *color_class; /* how to modify the color */
@ -307,7 +317,6 @@ struct _Edje_Part_Description
int size; /* 0 = use user set size */ int size; /* 0 = use user set size */
unsigned char effect; /* 0 = plain... */
unsigned char fit_x; /* resize font size down to fit in x dir */ unsigned char fit_x; /* resize font size down to fit in x dir */
unsigned char fit_y; /* resize font size down to fit in y dir */ unsigned char fit_y; /* resize font size down to fit in y dir */
unsigned char min_x; /* if text size should be part min size */ unsigned char min_x; /* if text size should be part min size */
@ -334,6 +343,7 @@ typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
typedef struct _Edje_Calc_Params Edje_Calc_Params; typedef struct _Edje_Calc_Params Edje_Calc_Params;
typedef struct _Edje_Emission Edje_Emission; typedef struct _Edje_Emission Edje_Emission;
typedef struct _Edje_Pending_Program Edje_Pending_Program; typedef struct _Edje_Pending_Program Edje_Pending_Program;
typedef struct _Ejde_Text_Style Ejde_Text_Style;
struct _Edje struct _Edje
{ {
@ -342,12 +352,15 @@ struct _Edje
int layer; int layer;
double x, y, w, h; double x, y, w, h;
unsigned char dirty : 1; unsigned short dirty : 1;
unsigned char recalc : 1; unsigned short recalc : 1;
unsigned char walking_callbacks : 1; unsigned short walking_callbacks : 1;
unsigned char delete_callbacks : 1; unsigned short delete_callbacks : 1;
unsigned char just_added_callbacks : 1; unsigned short just_added_callbacks : 1;
unsigned char have_objects : 1; unsigned short have_objects : 1;
unsigned short paused : 1;
unsigned short no_anim : 1;
double paused_at;
Evas *evas; /* the evas this edje belongs to */ Evas *evas; /* the evas this edje belongs to */
Evas_Object *obj; /* the smart object */ Evas_Object *obj; /* the smart object */
Evas_Object *clipper; /* a big rect to clip this edje to */ Evas_Object *clipper; /* a big rect to clip this edje to */
@ -364,7 +377,11 @@ struct _Edje
struct _Edje_Real_Part struct _Edje_Real_Part
{ {
int x, y, w, h; int x, y, w, h;
struct {
int x, y;
} offset;
Evas_Object *object; Evas_Object *object;
Evas_List *extra_objects;
unsigned char calculated : 1; unsigned char calculated : 1;
unsigned char dirty : 1; unsigned char dirty : 1;
unsigned char still_in : 1; unsigned char still_in : 1;
@ -377,6 +394,13 @@ struct _Edje_Real_Part
char *text; char *text;
char *font; char *font;
int size; int size;
struct {
double in_w, in_h;
int in_size;
char *in_str;
char *out_str;
int out_size;
} cache;
} text; } text;
double description_pos; double description_pos;
struct { struct {
@ -437,6 +461,22 @@ struct _Edje_Pending_Program
Ecore_Timer *timer; Ecore_Timer *timer;
}; };
struct _Ejde_Text_Style
{
struct {
unsigned char x, y;
} offset;
struct {
unsigned char l, r, t, b;
} pad;
int num;
struct {
unsigned char color; /* 0 = color, 1, 2 = color2, color3 */
char x, y; /* offset */
unsigned char alpha;
} members[32];
};
void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, double pos); void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, double pos);
void _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, char *d1, double v1, char *d2, double v2); void _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, char *d1, double v1, char *d2, double v2);
void _edje_recalc(Edje *ed); void _edje_recalc(Edje *ed);
@ -469,6 +509,12 @@ void _edje_program_end(Edje *ed, Edje_Running_Program *runp);
void _edje_program_run(Edje *ed, Edje_Program *pr, int force); void _edje_program_run(Edje *ed, Edje_Program *pr, int force);
void _edje_emit(Edje *ed, char *sig, char *src); void _edje_emit(Edje *ed, char *sig, char *src);
void _edje_text_init(void);
void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep);
void _edje_text_part_on_add_clippers(Edje *ed, Edje_Real_Part *ep);
void _edje_text_part_on_del(Edje *ed, Edje_Real_Part *ep);
void _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *params, Edje_Part_Description *chosen_desc);
Edje *_edje_fetch(Evas_Object *obj); Edje *_edje_fetch(Evas_Object *obj);
int _edje_glob_match(char *str, char *glob); int _edje_glob_match(char *str, char *glob);
int _edje_freeze(Edje *ed); int _edje_freeze(Edje *ed);
@ -487,8 +533,9 @@ extern Eet_Data_Descriptor *_edje_edd_edje_part;
extern Eet_Data_Descriptor *_edje_edd_edje_part_description; extern Eet_Data_Descriptor *_edje_edd_edje_part_description;
extern Eet_Data_Descriptor *_edje_edd_edje_part_image_id; extern Eet_Data_Descriptor *_edje_edd_edje_part_image_id;
extern int _edje_anim_count; extern int _edje_anim_count;
extern Ecore_Timer *_edje_timer; extern Ecore_Timer *_edje_timer;
extern Evas_List *_edje_animators; extern Evas_List *_edje_animators;
extern Ejde_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
#endif #endif

View File

@ -98,6 +98,95 @@ edje_signal_emit(Evas_Object *obj, const char *emission, const char *source)
_edje_emit(ed, (char *)emission, (char *)source); _edje_emit(ed, (char *)emission, (char *)source);
} }
void
edje_play_set(Evas_Object *obj, int play)
{
Edje *ed;
double t;
Evas_List *l;
ed = _edje_fetch(obj);
if (!ed) return;
if (play)
{
if (!ed->paused) return;
ed->paused = 0;
t = ecore_time_get() - ed->paused_at;
for (l = ed->actions; l; l = l->next)
{
Edje_Running_Program *runp;
runp = l->data;
runp->start_time += t;
}
}
else
{
if (ed->paused) return;
ed->paused = 1;
ed->paused_at = ecore_time_get();
}
}
int
edje_play_get(Evas_Object *obj)
{
Edje *ed;
ed = _edje_fetch(obj);
if (!ed) return 0;
if (ed->paused) return 0;
return 1;
}
void
edje_animation_set(Evas_Object *obj, int on)
{
Edje *ed;
Evas_List *l;
ed = _edje_fetch(obj);
if (!ed) return;
ed->no_anim = !on;
_edje_freeze(ed);
if (!on)
{
Evas_List *newl = NULL;
for (l = ed->actions; l; l = l->next)
newl = evas_list_append(newl, l->data);
while (newl)
{
Edje_Running_Program *runp;
runp = newl->data;
newl = evas_list_remove(newl, newl->data);
_edje_program_run_iterate(runp, runp->start_time + runp->program->tween.time);
}
}
else
{
_edje_emit(ed, "load", "");
if (evas_object_visible_get(obj))
{
evas_object_hide(obj);
evas_object_show(obj);
}
}
_edje_thaw(ed);
}
int
edje_animation_get(Evas_Object *obj)
{
Edje *ed;
ed = _edje_fetch(obj);
if (!ed) return 0;
if (ed->no_anim) return 0;
return 1;
}
/* Private Routines */ /* Private Routines */
int int
@ -244,7 +333,7 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force)
_edje_emit(ed, "program,start", pr->name); _edje_emit(ed, "program,start", pr->name);
if (pr->action == EDJE_ACTION_TYPE_STATE_SET) if (pr->action == EDJE_ACTION_TYPE_STATE_SET)
{ {
if (pr->tween.time > 0.0) if ((pr->tween.time > 0.0) && (!ed->no_anim))
{ {
Edje_Running_Program *runp; Edje_Running_Program *runp;

View File

@ -85,6 +85,18 @@ _edje_smart_layer_set(Evas_Object * obj, int layer)
Edje_Real_Part *ep; Edje_Real_Part *ep;
ep = l->data; ep = l->data;
if (ep->extra_objects)
{
Evas_List *el;
for (el = ep->extra_objects; el; el = el->next)
{
Evas_Object *o;
o = el->data;
evas_object_layer_set(o, ed->layer);
}
}
evas_object_layer_set(ep->object, ed->layer); evas_object_layer_set(ep->object, ed->layer);
} }
snprintf(buf, sizeof(buf), "layer,set,%i", layer); snprintf(buf, sizeof(buf), "layer,set,%i", layer);
@ -104,6 +116,18 @@ _edje_smart_raise(Evas_Object * obj)
Edje_Real_Part *ep; Edje_Real_Part *ep;
ep = l->data; ep = l->data;
if (ep->extra_objects)
{
Evas_List *el;
for (el = ep->extra_objects; el; el = el->next)
{
Evas_Object *o;
o = el->data;
evas_object_raise(o);
}
}
evas_object_raise(ep->object); evas_object_raise(ep->object);
} }
_edje_emit(ed, "raise", ""); _edje_emit(ed, "raise", "");
@ -123,6 +147,18 @@ _edje_smart_lower(Evas_Object * obj)
ep = l->data; ep = l->data;
evas_object_lower(ep->object); evas_object_lower(ep->object);
if (ep->extra_objects)
{
Evas_List *el;
for (el = ep->extra_objects; el; el = el->next)
{
Evas_Object *o;
o = el->data;
evas_object_lower(o);
}
}
} }
_edje_emit(ed, "lower", ""); _edje_emit(ed, "lower", "");
} }
@ -141,6 +177,18 @@ _edje_smart_stack_above(Evas_Object * obj, Evas_Object * above)
ep = l->data; ep = l->data;
evas_object_stack_above(ep->object, above); evas_object_stack_above(ep->object, above);
if (ep->extra_objects)
{
Evas_List *el;
for (el = evas_list_last(ep->extra_objects); el; el = el->prev)
{
Evas_Object *o;
o = el->data;
evas_object_stack_above(o, above);
}
}
} }
_edje_emit(ed, "stack_above", ""); _edje_emit(ed, "stack_above", "");
} }
@ -158,6 +206,18 @@ _edje_smart_stack_below(Evas_Object * obj, Evas_Object * below)
Edje_Real_Part *ep; Edje_Real_Part *ep;
ep = l->data; ep = l->data;
if (ep->extra_objects)
{
Evas_List *el;
for (el = ep->extra_objects; el; el = el->next)
{
Evas_Object *o;
o = el->data;
evas_object_stack_below(o, below);
}
}
evas_object_stack_below(ep->object, below); evas_object_stack_below(ep->object, below);
} }
_edje_emit(ed, "stack_below", ""); _edje_emit(ed, "stack_below", "");
@ -180,9 +240,25 @@ _edje_smart_move(Evas_Object * obj, double x, double y)
for (l = ed->parts; l; l = l->next) for (l = ed->parts; l; l = l->next)
{ {
Edje_Real_Part *ep; Edje_Real_Part *ep;
double ox, oy;
ep = l->data; ep = l->data;
evas_object_move(ep->object, ed->x + ep->x, ed->y + ep->y); evas_object_geometry_get(ep->object, &ox, &oy, NULL, NULL);
evas_object_move(ep->object, ed->x + ep->x + ep->offset.x, ed->y + ep->y +ep->offset.y);
if (ep->extra_objects)
{
Evas_List *el;
for (el = ep->extra_objects; el; el = el->next)
{
Evas_Object *o;
double oox, ooy;
o = el->data;
evas_object_geometry_get(o, &oox, &ooy, NULL, NULL);
evas_object_move(o, ed->x + ep->x + ep->offset.x + (oox - ox), ed->y + ep->y + ep->offset.y + (ooy - oy));
}
}
} }
_edje_emit(ed, "move", ""); _edje_emit(ed, "move", "");
} }

View File

@ -0,0 +1,519 @@
#include "Edje.h"
#include "edje_private.h"
Ejde_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
void
_edje_text_init(void)
{
int i, j, n;
const vals[5][5] =
{
{0, 1, 2, 1, 0},
{1, 3, 4, 3, 1},
{2, 4, 5, 4, 2},
{1, 3, 4, 3, 1},
{0, 1, 2, 1, 0}
};
memset(_edje_text_styles, 0, sizeof(_edje_text_styles));
_edje_text_styles[EDJE_TEXT_EFFECT_NONE].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_NONE].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_PLAIN].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_PLAIN].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.r = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.b = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].num = 5;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].y = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].x = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].offset.x = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].offset.y = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.l = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.r = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.t = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.b = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[0].alpha = 255;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
if (((i == 2) && (j == 2)) || (vals[i][j] == 0)) continue;
n = _edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].num;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].x = i - 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].y = j - 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].alpha = vals[i][j] * 50;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].num = n + 1;
}
}
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].pad.r = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].pad.b = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].num = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.r = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.b = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[0].alpha = 255;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
if (vals[i][j] == 0) continue;
n = _edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].num;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].x = i - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].y = j - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].alpha = vals[i][j] * 50;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].num = n + 1;
}
}
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.r = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.b = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].num = 6;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].x = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].y = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].y = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].x = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.r = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.b = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[0].alpha = 255;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
if (vals[i][j] == 0) continue;
n = _edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].x = i - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].y = j - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].alpha = vals[i][j] * 50;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num = n + 1;
}
}
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].y = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].x = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num += 4;
}
void
_edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep)
{
int i;
if (ep->part->type != EDJE_PART_TYPE_TEXT) return;
if (ep->part->effect >= EDJE_TEXT_EFFECT_LAST) return;
for (i = 1; i < _edje_text_styles[ep->part->effect].num; i++)
{
Evas_Object *o;
o = evas_object_text_add(ed->evas);
evas_object_smart_member_add(o, ed->obj);
evas_object_pass_events_set(o, 1);
evas_object_clip_set(o, ed->clipper);
evas_object_show(o);
ep->extra_objects = evas_list_append(ep->extra_objects, o);
}
}
void
_edje_text_part_on_add_clippers(Edje *ed, Edje_Real_Part *ep)
{
Evas_List *l;
for (l = ep->extra_objects; l; l = l->next)
{
Evas_Object *o;
o = l->data;
if (ep->part->clip_to_id >= 0)
{
ep->clip_to = evas_list_nth(ed->parts, ep->part->clip_to_id);
if (ep->clip_to)
{
evas_object_pass_events_set(ep->clip_to->object, 1);
evas_object_clip_set(o, ep->clip_to->object);
}
}
}
}
void
_edje_text_part_on_del(Edje *ed, Edje_Real_Part *ep)
{
while (ep->extra_objects)
{
Evas_Object *o;
o = ep->extra_objects->data;
ep->extra_objects = evas_list_remove(ep->extra_objects, o);
evas_object_del(o);
}
}
void
_edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
Edje_Calc_Params *params,
Edje_Part_Description *chosen_desc)
{
char *text;
char *font;
int size;
double tw, th;
double ox, oy, sw, sh;
char *buf = NULL;
text = chosen_desc->text.text;
font = chosen_desc->text.font;
size = chosen_desc->text.size;
if (ep->text.text) text = ep->text.text;
if (ep->text.font) font = ep->text.font;
if (ep->text.size > 0) size = ep->text.size;
ox = _edje_text_styles[ep->part->effect].offset.x;
oy = _edje_text_styles[ep->part->effect].offset.y;
sw = params->w - (_edje_text_styles[ep->part->effect].pad.l + _edje_text_styles[ep->part->effect].pad.r);
sh = params->h - (_edje_text_styles[ep->part->effect].pad.t + _edje_text_styles[ep->part->effect].pad.b);
if ((ep->text.cache.in_size == size) &&
(ep->text.cache.in_w == sw) &&
(ep->text.cache.in_h == sh) &&
(ep->text.cache.in_str) &&
(text) &&
(!strcmp(ep->text.cache.in_str, text)))
{
text = ep->text.cache.out_str;
size = ep->text.cache.out_size;
goto arrange_text;
}
if (ep->text.cache.in_str) free(ep->text.cache.in_str);
ep->text.cache.in_str = strdup(text);
ep->text.cache.in_size = size;
if (chosen_desc->text.fit_x)
{
evas_object_text_font_set(ep->object, font, size);
evas_object_text_text_set(ep->object, text);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
if (tw > sw)
{
int psize;
psize = size;
while ((tw > sw) && (size > 0))
{
psize = size;
size = (size * sw) / tw;
if ((psize - size) <= 0) size = psize - 1;
evas_object_text_font_set(ep->object, font, size);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
}
}
else if (tw < sw)
{
int psize;
psize = size;
while ((tw < sw) && (size > 0))
{
psize = size;
size = (size * sw) / tw;
if ((psize - size) >= 0) size = psize + 1;
evas_object_text_font_set(ep->object, font, size);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
}
size = psize;
}
}
if (chosen_desc->text.fit_y)
{
size = sh;
evas_object_text_font_set(ep->object, font, size);
evas_object_text_text_set(ep->object, text);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
if (th < sh)
{
int dif;
dif = (th - sh) / 4;
if (dif < 1) dif = 1;
while ((th < sh) && (sw > 0.0))
{
size += dif;
evas_object_text_font_set(ep->object, font, size);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
}
size -= dif;
}
else if (th > sh)
{
int dif;
dif = (th - sh) / 4;
if (dif < 1) dif = 1;
while ((th < sh) && (sw >= 0.0))
{
size -= dif;
evas_object_text_font_set(ep->object, font, size);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
}
}
}
if (size < 1) size = 1;
if (!chosen_desc->text.fit_x)
{
double p;
int c1, c2;
int loop;
int orig_len;
evas_object_text_font_set(ep->object, font, size);
evas_object_text_text_set(ep->object, text);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
p = ((sw - tw) * chosen_desc->text.align.x);
c1 = -1;
c2 = -1;
/* chop chop */
if (tw > sw)
{
if (chosen_desc->text.align.x != 0.0)
c1 = evas_object_text_char_coords_get(ep->object,
-p, th / 2,
NULL, NULL, NULL, NULL);
if (chosen_desc->text.align.x != 1.0)
c2 = evas_object_text_char_coords_get(ep->object,
-p + sw, th / 2,
NULL, NULL, NULL, NULL);
if ((c1 < 0) && (c2 < 0))
{
c1 = 0;
c2 = 0;
}
}
loop = 0;
buf = malloc(strlen(text) + 1 + 3 + 3);
orig_len = strlen(text);
while (((c1 >= 0) || (c2 >= 0)) && (tw > sw))
{
loop++;
if (sw <= 0.0)
{
buf[0] = 0;
break;
}
if ((c1 >= 0) && (c2 >= 0))
{
if ((loop & 0x1))
{
if (c1 >= 0)
c1 = evas_string_char_next_get(text, c1, NULL);
}
else
{
if (c2 >= 0)
{
c2 = evas_string_char_prev_get(text, c2, NULL);
if (c2 < 0)
{
buf[0] = 0;
break;
}
}
}
}
else
{
if (c1 >= 0)
c1 = evas_string_char_next_get(text, c1, NULL);
else if (c2 >= 0)
{
c2 = evas_string_char_prev_get(text, c2, NULL);
if (c2 < 0)
{
buf[0] = 0;
break;
}
}
}
if ((c1 >= 0) && (c2 >= 0))
{
if (c1 >= c2)
{
buf[0] = 0;
break;
}
}
else
{
if (c1 >= orig_len)
{
buf[0] = 0;
break;
}
else if (c2 == 0)
{
buf[0] = 0;
break;
}
}
buf[0] = 0;
if (c1 >= 0)
{
strcpy(buf, "...");
if (c2 >= 0)
{
strncat(buf, text + c1, c2 - c1);
strcat(buf, "...");
}
else
strcat(buf, text + c1);
}
else
{
if (c2 >= 0)
{
strncpy(buf, text, c2);
buf[c2] = 0;
strcat(buf, "...");
}
else strcpy(buf, text);
}
evas_object_text_text_set(ep->object, buf);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
}
if (loop > 0) text = buf;
}
if (ep->text.cache.out_str) free(ep->text.cache.out_str);
ep->text.cache.out_str = strdup(text);
ep->text.cache.in_w = sw;
ep->text.cache.in_h = sh;
ep->text.cache.out_size = size;
arrange_text:
evas_object_text_font_set(ep->object, font, size);
evas_object_text_text_set(ep->object, text);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
ep->offset.x = ox + ((sw - tw) * chosen_desc->text.align.x);
ep->offset.y = oy + ((sh - th) * chosen_desc->text.align.y);
evas_object_move(ep->object,
ed->x + params->x + ep->offset.x,
ed->y + params->y + ep->offset.y);
evas_object_color_set(ep->object,
params->color.r,
params->color.g,
params->color.b,
(params->color.a * (_edje_text_styles[ep->part->effect].members[0].alpha + 1)) / 256);
if (params->visible) evas_object_show(ep->object);
else evas_object_hide(ep->object);
{
Evas_List *l;
int i;
for (i = 1, l = ep->extra_objects; l; l = l->next, i++)
{
Evas_Object *o;
o = l->data;
evas_object_text_font_set(o, font, size);
evas_object_text_text_set(o, text);
evas_object_move(o,
ed->x + params->x + ep->offset.x + _edje_text_styles[ep->part->effect].members[i].x,
ed->y + params->y + ep->offset.y + _edje_text_styles[ep->part->effect].members[i].y);
if (_edje_text_styles[ep->part->effect].members[i].color == 0)
evas_object_color_set(o,
params->color.r,
params->color.g,
params->color.b,
(params->color.a * (_edje_text_styles[ep->part->effect].members[i].alpha + 1)) / 256);
else if (_edje_text_styles[ep->part->effect].members[i].color == 1)
evas_object_color_set(o,
params->color2.r,
params->color2.g,
params->color2.b,
(params->color2.a * (_edje_text_styles[ep->part->effect].members[i].alpha + 1)) / 256);
else if (_edje_text_styles[ep->part->effect].members[i].color == 2)
evas_object_color_set(o,
params->color3.r,
params->color3.g,
params->color3.b,
(params->color3.a * (_edje_text_styles[ep->part->effect].members[i].alpha + 1)) / 256);
if (params->visible) evas_object_show(o);
else evas_object_hide(o);
}
}
if (buf) free(buf);
}

View File

@ -1,13 +1,31 @@
#include "Edje.h" #include "Edje.h"
#include "edje_private.h" #include "edje_private.h"
void int
edje_part_geometry_get(Evas_Object *o, char *part, double *x, double *y, double *w, double *h ) edje_part_exists(Evas_Object *obj, const char *part)
{ {
Evas_List *l; Evas_List *l;
Edje *ed; Edje *ed;
ed = _edje_fetch(o); ed = _edje_fetch(obj);
if ((!ed) || (!part)) return 0;
for (l = ed->parts; l; l = l->next)
{
Edje_Real_Part *rp;
rp = l->data;
if (!strcmp(rp->part->name, part)) return 1;
}
return 0;
}
void
edje_part_geometry_get(Evas_Object *obj, const char *part, double *x, double *y, double *w, double *h )
{
Evas_List *l;
Edje *ed;
ed = _edje_fetch(obj);
if ((!ed) || (!part)) if ((!ed) || (!part))
{ {
if (x) *x = 0; if (x) *x = 0;
@ -36,6 +54,64 @@ edje_part_geometry_get(Evas_Object *o, char *part, double *x, double *y, double
if (h) *h = 0; if (h) *h = 0;
} }
void
edje_part_text_set(Evas_Object *obj, const char *part, const char *text)
{
Evas_List *l;
Edje *ed;
ed = _edje_fetch(obj);
if ((!ed) || (!part)) return;
for (l = ed->parts; l; l = l->next)
{
Edje_Real_Part *rp;
rp = l->data;
if (!strcmp(rp->part->name, part))
{
if (rp->part->type == EDJE_PART_TYPE_TEXT)
{
if (((rp->text.text) && (text)) ||
((!rp->text.text) && (!text)))
return;
if ((rp->text.text) && (text) &&
(!strcmp(rp->text.text, text)))
return;
if (rp->text.text) free(rp->text.text);
rp->text.text = strdup(text);
ed->dirty = 1;
rp->dirty = 1;
_edje_recalc(ed);
}
return;
}
}
}
const char *
edje_part_text_get(Evas_Object *obj, const char *part)
{
Evas_List *l;
Edje *ed;
ed = _edje_fetch(obj);
if ((!ed) || (!part)) return NULL;
for (l = ed->parts; l; l = l->next)
{
Edje_Real_Part *rp;
rp = l->data;
if (!strcmp(rp->part->name, part))
{
if (rp->part->type == EDJE_PART_TYPE_TEXT)
return evas_object_text_text_get(rp->object);
else
return NULL;
}
}
return NULL;
}
Edje * Edje *
_edje_fetch(Evas_Object *obj) _edje_fetch(Evas_Object *obj)
{ {