Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
Edje.h Makefile.am edje_calc.c edje_callbacks.c edje_data.c
edje_load.c edje_main.c edje_private.h edje_program.c
edje_smart.c edje_util.c
Added Files:
edje_text.c
Log Message:
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.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- Edje.h 26 Jun 2003 23:58:58 -0000 1.6
+++ Edje.h 7 Jul 2003 07:55:18 -0000 1.7
@@ -19,8 +19,14 @@
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_emit(Evas_Object *o, const char *emission, const char
*source);
-
- void edje_part_geometry_get(Evas_Object *o, char *part, double *x, double
*y, double *w, double *h);
+ void edje_play_set(Evas_Object *obj, int play);
+ 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
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Makefile.am,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- Makefile.am 24 Jun 2003 02:33:04 -0000 1.3
+++ Makefile.am 7 Jul 2003 07:55:18 -0000 1.4
@@ -23,6 +23,7 @@
edje_main.c \
edje_program.c \
edje_smart.c \
+edje_text.c \
edje_util.c \
edje_private.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- edje_calc.c 28 Jun 2003 03:08:25 -0000 1.2
+++ edje_calc.c 7 Jul 2003 07:55:18 -0000 1.3
@@ -337,26 +337,20 @@
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) size = ep->text.size;
+ if (ep->text.size > 0) size = ep->text.size;
evas_object_text_font_set(ep->object, font, size);
if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y))
{
evas_object_text_text_set(ep->object, text);
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
if (chosen_desc->text.min_x)
- {
- minw = tw;
- /* FIXME: account for effect */
- /* for now just add 2 */
- minw += 2;
- }
+ minw = tw +
+ _edje_text_styles[ep->part->effect].pad.l +
+ _edje_text_styles[ep->part->effect].pad.r;
if (chosen_desc->text.min_y)
- {
- minh = th;
- /* FIXME: account for effect */
- /* for now just add 2 */
- minw += 2;
- }
+ minw = th +
+ _edje_text_styles[ep->part->effect].pad.t +
+ _edje_text_styles[ep->part->effect].pad.b;
}
}
/* adjust for min size */
@@ -507,7 +501,6 @@
{
_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;
/* visible is special */
@@ -569,11 +562,13 @@
{
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
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)
{
- /* FIXME: if text object calculate text now */
- /* FIXME: set other colors */
+ _edje_text_recalc_apply(ed, ep, &p3, chosen_desc);
}
else if (ep->part->type == EDJE_PART_TYPE_IMAGE)
{
@@ -610,10 +605,10 @@
snprintf(buf, sizeof(buf), "images/%i", image_id);
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->y = p3.y;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_callbacks.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_callbacks.c 28 Jun 2003 04:20:41 -0000 1.4
+++ edje_callbacks.c 7 Jul 2003 07:55:18 -0000 1.5
@@ -41,7 +41,25 @@
ed = data;
rp = evas_object_data_get(obj, "real_part");
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)
{
rp->clicked_button = ev->button;
@@ -144,15 +162,18 @@
ed = animl->data;
_edje_freeze(ed);
animl = evas_list_remove(animl, animl->data);
- for (l = ed->actions; l; l = l->next)
- newl = evas_list_append(newl, l->data);
- while (newl)
+ if (!ed->paused)
{
- Edje_Running_Program *runp;
-
- runp = newl->data;
- newl = evas_list_remove(newl, newl->data);
- _edje_program_run_iterate(runp, t);
+ 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, t);
+ }
}
_edje_thaw(ed);
_edje_unref(ed);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_data.c 28 Jun 2003 04:20:41 -0000 1.4
+++ edje_data.c 7 Jul 2003 07:55:18 -0000 1.5
@@ -13,86 +13,61 @@
Eet_Data_Descriptor *_edje_edd_edje_part_description = 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
_edje_edd_setup(void)
{
/* image directory */
_edje_edd_edje_image_directory_entry =
- eet_data_descriptor_new("Edje_Image_Directory_Entry",
- sizeof(Edje_Image_Directory_Entry),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Image_Directory_Entry",
+ Edje_Image_Directory_Entry);
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_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);
_edje_edd_edje_image_directory =
- eet_data_descriptor_new("Edje_Image_Directory",
- sizeof(Edje_Image_Directory),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Image_Directory",
+ Edje_Image_Directory);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_image_directory, Edje_Image_Directory,
"entries", entries, _edje_edd_edje_image_directory_entry);
/* collection directory */
_edje_edd_edje_part_collection_directory_entry =
- eet_data_descriptor_new("Edje_Part_Collection_Directory_Entry",
- sizeof(Edje_Part_Collection_Directory_Entry),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Part_Collection_Directory_Entry",
+ Edje_Part_Collection_Directory_Entry);
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);
_edje_edd_edje_part_collection_directory =
- eet_data_descriptor_new("Edje_Part_Collection_Directory",
- sizeof(Edje_Part_Collection_Directory),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Part_Collection_Directory",
+ Edje_Part_Collection_Directory);
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 */
_edje_edd_edje_file =
- eet_data_descriptor_new("Edje_File",
- sizeof(Edje_File),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_File",
+ Edje_File);
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);
/* parts & programs - loaded induvidually */
_edje_edd_edje_program_target =
- eet_data_descriptor_new("Edje_Program_Target",
- sizeof(Edje_Program_Target),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Program_Target",
+ Edje_Program_Target);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target,
"id", id, EET_T_INT);
_edje_edd_edje_program =
- eet_data_descriptor_new("Edje_Program",
- sizeof(Edje_Program),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Program",
+ Edje_Program);
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, "signal",
signal, EET_T_STRING);
@@ -109,23 +84,13 @@
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "after",
after, EET_T_INT);
_edje_edd_edje_part_image_id =
- eet_data_descriptor_new("Edje_Part_Image_Id",
- sizeof(Edje_Part_Image_Id),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Part_Image_Id",
+ Edje_Part_Image_Id);
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 =
- eet_data_descriptor_new("Edje_Part_Description",
- sizeof(Edje_Part_Description),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Part_Description",
+ Edje_Part_Description);
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, "visible", visible, EET_T_CHAR);
@@ -186,7 +151,6 @@
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.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_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);
@@ -195,16 +159,12 @@
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 =
- eet_data_descriptor_new("Edje_Part",
- sizeof(Edje_Part),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Part",
+ Edje_Part);
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, "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, "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);
@@ -213,13 +173,8 @@
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 =
- eet_data_descriptor_new("Edje_Part_Collection",
- sizeof(Edje_Part_Collection),
- evas_list_next,
- evas_list_append,
- evas_list_data,
- evas_hash_foreach,
- evas_hash_add);
+ NEWD("Edje_Part_Collection",
+ Edje_Part_Collection);
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_BASIC(_edje_edd_edje_part_collection,
Edje_Part_Collection, "id", id, EET_T_INT);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_load.c 28 Jun 2003 04:20:41 -0000 1.4
+++ edje_load.c 7 Jul 2003 07:55:18 -0000 1.5
@@ -35,8 +35,10 @@
ep = l->data;
rp = calloc(1, sizeof(Edje_Real_Part));
if (!rp) return;
+ rp->part = ep;
ed->parts = evas_list_append(ed->parts, rp);
rp->param1.description = ep->default_desc;
+ _edje_text_part_on_add(ed, rp);
if (ep->type == EDJE_PART_TYPE_RECTANGLE)
rp->object = evas_object_rectangle_add(ed->evas);
else if (ep->type == EDJE_PART_TYPE_IMAGE)
@@ -76,7 +78,6 @@
evas_object_pass_events_set(rp->object, 1);
evas_object_clip_set(rp->object, ed->clipper);
evas_object_show(rp->object);
- rp->part = ep;
}
for (l = ed->parts; l; l = l->next)
{
@@ -87,6 +88,7 @@
rp->param1.rel1_to = evas_list_nth(ed->parts,
rp->param1.description->rel1.id);
if (rp->param1.description->rel2.id >= 0)
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)
{
rp->clip_to = evas_list_nth(ed->parts, rp->part->clip_to_id);
@@ -207,9 +209,12 @@
Edje_Real_Part *rp;
rp = ed->parts->data;
+ _edje_text_part_on_del(ed, rp);
evas_object_del(rp->object);
if (rp->text.text) free(rp->text.text);
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);
ed->parts = evas_list_remove(ed->parts, ed->parts->data);
}
@@ -245,7 +250,35 @@
void
_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
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_main.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- edje_main.c 26 Jun 2003 14:04:31 -0000 1.20
+++ edje_main.c 7 Jul 2003 07:55:18 -0000 1.21
@@ -9,6 +9,7 @@
if (initted) return;
initted = 1;
_edje_edd_setup();
+ _edje_text_init();
}
Edje *
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- edje_private.h 28 Jun 2003 04:20:41 -0000 1.23
+++ edje_private.h 7 Jul 2003 07:55:18 -0000 1.24
@@ -5,41 +5,47 @@
#include <Evas.h>
#include <Ecore.h>
+#include <Ecore_X.h>
#include <Eet.h>
#include <math.h>
#include <fnmatch.h>
/* FIXME:
+ *
* free stuff - no more leaks
+ *
* dragables have to work
* drag start/top signals etc.
* 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.
* query dragable for its relative pos value
- * text parts 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
* part replacement with object callbacks should be possible
+ *
* 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 list collections in an eet file
+ *
* 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 clip_to part loops
+ *
* 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 might need an option for limiting number of tween images
+ *
* 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)
- * ? somehow handle double click?
* ? add numeric params to conditions for progs (ranges etc.)
- * ? containering for multiple children? (hbox, vbox, table, wrapping list)
-*/
+ */
/* HOW THIS ALL WORKS:
@@ -103,12 +109,15 @@
#define EDJE_PART_TYPE_IMAGE 3
#define EDJE_PART_TYPE_LAST 4
-#define EDJE_TEXT_EFFECT_NONE 0
-#define EDJE_TEXT_EFFECT_PLAIN 1
-#define EDJE_TEXT_EFFECT_OUTLINE 2
-#define EDJE_TEXT_EFFECT_SHADOW 3
-#define EDJE_TEXT_EFFECT_OUTLINE_SHADOW 4
-#define EDJE_TEXT_EFFECT_LAST 5
+#define EDJE_TEXT_EFFECT_NONE 0
+#define EDJE_TEXT_EFFECT_PLAIN 1
+#define EDJE_TEXT_EFFECT_OUTLINE 2
+#define EDJE_TEXT_EFFECT_SOFT_OUTLINE 3
+#define EDJE_TEXT_EFFECT_SHADOW 4
+#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_STATE_SET 1
@@ -218,6 +227,7 @@
char *name; /* the name if any of the part */
int id; /* its id number */
unsigned char type; /* what type (image, rect, text) */
+ unsigned char effect; /* 0 = plain... */
unsigned char mouse_events; /* it will affect/respond to mouse events */
int clip_to_id; /* the part id to clip this one to */
char *color_class; /* how to modify the color */
@@ -307,7 +317,6 @@
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_y; /* resize font size down to fit in y dir */
unsigned char min_x; /* if text size should be part min size */
@@ -334,6 +343,7 @@
typedef struct _Edje_Calc_Params Edje_Calc_Params;
typedef struct _Edje_Emission Edje_Emission;
typedef struct _Edje_Pending_Program Edje_Pending_Program;
+typedef struct _Ejde_Text_Style Ejde_Text_Style;
struct _Edje
{
@@ -342,12 +352,15 @@
int layer;
double x, y, w, h;
- unsigned char dirty : 1;
- unsigned char recalc : 1;
- unsigned char walking_callbacks : 1;
- unsigned char delete_callbacks : 1;
- unsigned char just_added_callbacks : 1;
- unsigned char have_objects : 1;
+ unsigned short dirty : 1;
+ unsigned short recalc : 1;
+ unsigned short walking_callbacks : 1;
+ unsigned short delete_callbacks : 1;
+ unsigned short just_added_callbacks : 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_Object *obj; /* the smart object */
Evas_Object *clipper; /* a big rect to clip this edje to */
@@ -364,7 +377,11 @@
struct _Edje_Real_Part
{
int x, y, w, h;
+ struct {
+ int x, y;
+ } offset;
Evas_Object *object;
+ Evas_List *extra_objects;
unsigned char calculated : 1;
unsigned char dirty : 1;
unsigned char still_in : 1;
@@ -377,6 +394,13 @@
char *text;
char *font;
int size;
+ struct {
+ double in_w, in_h;
+ int in_size;
+ char *in_str;
+ char *out_str;
+ int out_size;
+ } cache;
} text;
double description_pos;
struct {
@@ -437,6 +461,22 @@
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_description_apply(Edje *ed, Edje_Real_Part *ep, char *d1, double
v1, char *d2, double v2);
void _edje_recalc(Edje *ed);
@@ -469,6 +509,12 @@
void _edje_program_run(Edje *ed, Edje_Program *pr, int force);
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);
int _edje_glob_match(char *str, char *glob);
int _edje_freeze(Edje *ed);
@@ -487,8 +533,9 @@
extern Eet_Data_Descriptor *_edje_edd_edje_part_description;
extern Eet_Data_Descriptor *_edje_edd_edje_part_image_id;
-extern int _edje_anim_count;
-extern Ecore_Timer *_edje_timer;
-extern Evas_List *_edje_animators;
+extern int _edje_anim_count;
+extern Ecore_Timer *_edje_timer;
+extern Evas_List *_edje_animators;
+extern Ejde_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- edje_program.c 28 Jun 2003 04:20:41 -0000 1.5
+++ edje_program.c 7 Jul 2003 07:55:18 -0000 1.6
@@ -98,6 +98,95 @@
_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 */
int
@@ -244,7 +333,7 @@
_edje_emit(ed, "program,start", pr->name);
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;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_smart.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- edje_smart.c 26 Jun 2003 14:04:31 -0000 1.2
+++ edje_smart.c 7 Jul 2003 07:55:18 -0000 1.3
@@ -85,6 +85,18 @@
Edje_Real_Part *ep;
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);
}
snprintf(buf, sizeof(buf), "layer,set,%i", layer);
@@ -104,6 +116,18 @@
Edje_Real_Part *ep;
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);
}
_edje_emit(ed, "raise", "");
@@ -123,6 +147,18 @@
ep = l->data;
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", "");
}
@@ -141,6 +177,18 @@
ep = l->data;
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", "");
}
@@ -158,6 +206,18 @@
Edje_Real_Part *ep;
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);
}
_edje_emit(ed, "stack_below", "");
@@ -180,9 +240,25 @@
for (l = ed->parts; l; l = l->next)
{
Edje_Real_Part *ep;
+ double ox, oy;
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", "");
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_util.c 26 Jun 2003 23:58:58 -0000 1.4
+++ edje_util.c 7 Jul 2003 07:55:18 -0000 1.5
@@ -1,13 +1,31 @@
#include "Edje.h"
#include "edje_private.h"
+int
+edje_part_exists(Evas_Object *obj, const char *part)
+{
+ Evas_List *l;
+ Edje *ed;
+
+ 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 *o, char *part, double *x, double *y, double *w,
double *h )
+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(o);
+ ed = _edje_fetch(obj);
if ((!ed) || (!part))
{
if (x) *x = 0;
@@ -34,6 +52,64 @@
if (y) *y = 0;
if (w) *w = 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 *
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100006ave/direct;at.asp_061203_01/01
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs