edje: morning speed of edje. Theme can now be a little bit lighter and faster.

NOTE: VIRTUAL part are almost like rectangle except they don't create any object
on the canvas. This part can't be visible, nor have any color, nor be used as a
clip, nor receive any event.


SVN revision: 71674
This commit is contained in:
Cedric BAIL 2012-06-04 02:57:15 +00:00
parent d7e9d661f0
commit b0e087b6bf
9 changed files with 100 additions and 24 deletions

View File

@ -467,7 +467,11 @@
* Use Eina_File instead of fopen when possible in edje_cc.
2012-05-21 Shilpa Onkar Singh
2012-05-21 Shilpa Onkar Singh
* Fix patch for edje draggable jump issue when external event
area is used for the dragable.
2012-06-04 Cedric Bail
* Add VIRTUAL part to reduce the load on the canvas (lighter and faster theme).

View File

@ -7,6 +7,8 @@ Additions:
* Add edje_watch to monitore change on edje source.
* Emit ['edje,change,file', 'edje'] when the file change on disk.
* edje_player will automatically reload the file when it change on disk.
* Add VIRTUAL part. This part are not putting anything into the canvas. So lighter and faster to
process (Use it to replace RECT part that are never visible and never catch any event).
Improvements:
* Allocate once and reuse Evas_Map.

View File

@ -875,6 +875,7 @@ _edje_part_description_alloc(unsigned char type, const char *collection, const c
switch (type)
{
case EDJE_PART_TYPE_VIRTUAL:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP:
@ -3023,6 +3024,7 @@ st_collections_group_parts_part_name(void)
@li TABLE
@li EXTERNAL
@li PROXY
@li VIRTUAL
@endproperty
*/
static void
@ -3044,6 +3046,7 @@ st_collections_group_parts_part_type(void)
"TABLE", EDJE_PART_TYPE_TABLE,
"EXTERNAL", EDJE_PART_TYPE_EXTERNAL,
"PROXY", EDJE_PART_TYPE_PROXY,
"VIRTUAL", EDJE_PART_TYPE_VIRTUAL,
NULL);
/* handle type change of inherited part */
@ -4379,6 +4382,7 @@ st_collections_group_parts_part_description_inherit(void)
ed->color_class = STRDUP(ed->color_class);
switch (ep->type)
{
case EDJE_PART_TYPE_VIRTUAL:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP:
@ -4611,6 +4615,14 @@ st_collections_group_parts_part_description_visible(void)
{
check_arg_count(1);
if (current_part->type == EDJE_PART_TYPE_VIRTUAL)
{
ERR("%s: Error. parse error %s:%i. "
"VIRTUAL part can't have a visibility defined",
progname, file_in, line - 1);
exit(-1);
}
current_desc->visible = parse_bool(0);
}
@ -4843,6 +4855,14 @@ st_collections_group_parts_part_description_color_class(void)
{
check_arg_count(1);
if (current_part->type == EDJE_PART_TYPE_VIRTUAL)
{
ERR("%s: Error. parse error %s:%i. "
"VIRTUAL part can't have a color defined",
progname, file_in, line - 1);
exit(-1);
}
current_desc->color_class = parse_str(0);
}
@ -4861,6 +4881,14 @@ st_collections_group_parts_part_description_color(void)
{
check_arg_count(4);
if (current_part->type == EDJE_PART_TYPE_VIRTUAL)
{
ERR("%s: Error. parse error %s:%i. "
"VIRTUAL part can't have a color defined",
progname, file_in, line - 1);
exit(-1);
}
current_desc->color.r = parse_int_range(0, 0, 255);
current_desc->color.g = parse_int_range(1, 0, 255);
current_desc->color.b = parse_int_range(2, 0, 255);
@ -4882,6 +4910,14 @@ st_collections_group_parts_part_description_color2(void)
{
check_arg_count(4);
if (current_part->type == EDJE_PART_TYPE_VIRTUAL)
{
ERR("%s: Error. parse error %s:%i. "
"VIRTUAL part can't have a color defined",
progname, file_in, line - 1);
exit(-1);
}
current_desc->color2.r = parse_int_range(0, 0, 255);
current_desc->color2.g = parse_int_range(1, 0, 255);
current_desc->color2.b = parse_int_range(2, 0, 255);

View File

@ -382,7 +382,8 @@ typedef enum _Edje_Part_Type
EDJE_PART_TYPE_TABLE = 9,
EDJE_PART_TYPE_EXTERNAL = 10,
EDJE_PART_TYPE_PROXY = 11,
EDJE_PART_TYPE_LAST = 12
EDJE_PART_TYPE_VIRTUAL = 12,
EDJE_PART_TYPE_LAST = 13
} Edje_Part_Type;
typedef enum _Edje_Text_Effect

View File

@ -63,6 +63,7 @@ _edje_file_coll_open(Edje_File *edf, const char *coll)
INIT_EMP_BOTH(BOX, Edje_Part_Description_Box, ce);
INIT_EMP_BOTH(TABLE, Edje_Part_Description_Table, ce);
INIT_EMP_BOTH(EXTERNAL, Edje_Part_Description_External, ce);
INIT_EMP_BOTH(VIRTUAL, Edje_Part_Description_Common, ce);
INIT_EMP(part, Edje_Part, ce);
snprintf(buf, sizeof(buf), "edje/collections/%i", id);

View File

@ -232,6 +232,12 @@ _edje_get_description_by_orientation(Edje *ed, Edje_Part_Description_Common *src
ce->count.GROUP++;
memsize = sizeof(Edje_Part_Description_Common);
break;
case EDJE_PART_TYPE_VIRTUAL:
desc_rtl = eina_mempool_malloc(ce->mp_rtl.VIRTUAL,
sizeof (Edje_Part_Description_Common));
ce->count.VIRTUAL++;
memsize = sizeof(Edje_Part_Description_Common);
break;
EDIT_ALLOC_POOL_RTL(TEXT, Text, text);
EDIT_ALLOC_POOL_RTL(TEXTBLOCK, Text, text);
EDIT_ALLOC_POOL_RTL(IMAGE, Image, image);
@ -241,7 +247,7 @@ _edje_get_description_by_orientation(Edje *ed, Edje_Part_Description_Common *src
EDIT_ALLOC_POOL_RTL(EXTERNAL, External, external_params);
}
if(desc_rtl)
if (desc_rtl)
memcpy(desc_rtl, src, memsize);
_edje_part_make_rtl(desc_rtl);
@ -2015,23 +2021,26 @@ _edje_part_recalc_single(Edje *ed,
else if (ep->part->type == EDJE_PART_TYPE_PROXY)
_edje_part_recalc_single_fill(ep, &((Edje_Part_Description_Proxy *)desc)->proxy.fill, params);
/* colors */
if ((desc->color_class) && (*desc->color_class))
cc = _edje_color_class_find(ed, desc->color_class);
if (ep->part->type != EDJE_PART_TYPE_VIRTUAL)
{
/* colors */
if ((desc->color_class) && (*desc->color_class))
cc = _edje_color_class_find(ed, desc->color_class);
if (cc)
{
params->color.r = (((int)cc->r + 1) * desc->color.r) >> 8;
params->color.g = (((int)cc->g + 1) * desc->color.g) >> 8;
params->color.b = (((int)cc->b + 1) * desc->color.b) >> 8;
params->color.a = (((int)cc->a + 1) * desc->color.a) >> 8;
}
else
{
params->color.r = desc->color.r;
params->color.g = desc->color.g;
params->color.b = desc->color.b;
params->color.a = desc->color.a;
if (cc)
{
params->color.r = (((int)cc->r + 1) * desc->color.r) >> 8;
params->color.g = (((int)cc->g + 1) * desc->color.g) >> 8;
params->color.b = (((int)cc->b + 1) * desc->color.b) >> 8;
params->color.a = (((int)cc->a + 1) * desc->color.a) >> 8;
}
else
{
params->color.r = desc->color.r;
params->color.g = desc->color.g;
params->color.b = desc->color.b;
params->color.a = desc->color.a;
}
}
/* visible */
@ -2087,6 +2096,7 @@ _edje_part_recalc_single(Edje *ed,
break;
}
case EDJE_PART_TYPE_VIRTUAL:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_BOX:
case EDJE_PART_TYPE_TABLE:
@ -2158,6 +2168,9 @@ _edje_proxy_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
case EDJE_PART_TYPE_EXTERNAL:
evas_object_image_source_set(ep->object, pp->swallowed_object);
break;
case EDJE_PART_TYPE_VIRTUAL:
/* FIXME: detect that at compile time and prevent it */
break;
}
evas_object_image_fill_set(ep->object, p3->type.common.fill.x, p3->type.common.fill.y,
@ -2785,6 +2798,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
/* FIXME: definitivly remove this code when we switch to new format. */
abort();
break;
case EDJE_PART_TYPE_VIRTUAL:
/* We really should do nothing on VIRTUAL part */
break;
}
/* Some object need special recalc. */
@ -2816,6 +2832,9 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
/* FIXME: definitivly remove this code when we switch to new format. */
abort();
break;
case EDJE_PART_TYPE_VIRTUAL:
/* We really should do nothing on VIRTUAL part */
break;
}
if (ep->swallowed_object)
@ -2839,7 +2858,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
mo = ep->swallowed_object;
}
else mo = ep->object;
if (chosen_desc->map.on)
if (chosen_desc->map.on && ep->part->type != EDJE_PART_TYPE_VIRTUAL)
{
static Evas_Map *map = NULL;
@ -2922,5 +2941,4 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
ep->invalidate = 0;
}
#endif
}

View File

@ -83,6 +83,7 @@ EMP(GROUP, group);
EMP(BOX, box);
EMP(TABLE, table);
EMP(EXTERNAL, external);
EMP(VIRTUAL, virtual);
EMP(part, part);
#define FREED(eed) \
@ -105,7 +106,8 @@ struct {
{ EDJE_PART_TYPE_BOX, "box" },
{ EDJE_PART_TYPE_TABLE, "table" },
{ EDJE_PART_TYPE_EXTERNAL, "external" },
{ EDJE_PART_TYPE_PROXY, "proxy" }
{ EDJE_PART_TYPE_PROXY, "proxy" },
{ EDJE_PART_TYPE_VIRTUAL, "virtual" }
};
static const char *
@ -329,6 +331,7 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.BOX", count.BOX, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.TABLE", count.TABLE, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.EXTERNAL", count.EXTERNAL, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.VIRTUAL", count.VIRTUAL, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, Edje_Part_Collection_Directory_Entry, "count.part", count.part, EET_T_INT);
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Style_Tag);
@ -742,6 +745,7 @@ _edje_edd_init(void)
eddc.func.type_set = _edje_description_variant_type_set;
_edje_edd_edje_part_description_variant = eet_data_descriptor_file_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "virtual", _edje_edd_edje_part_description_rectangle);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "rectangle", _edje_edd_edje_part_description_rectangle);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "swallow", _edje_edd_edje_part_description_swallow);
EET_DATA_DESCRIPTOR_ADD_MAPPING(_edje_edd_edje_part_description_variant, "group", _edje_edd_edje_part_description_group);
@ -767,6 +771,7 @@ _edje_edd_init(void)
_edje_edd_edje_part_description_variant_list = eet_data_descriptor_file_new(&eddc);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "rectangle", rectangle);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "virtual", rectangle);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "swallow", swallow);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "group", group);
EDJE_ADD_ARRAY_MAPPING(_edje_edd_edje_part_description_variant_list, "image", image);

View File

@ -443,7 +443,8 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
_edje_part_description_find(ed, rp, "default", 0.0);
rp->chosen_description = rp->param1.description;
if (!rp->param1.description)
ERR("no default part description!");
ERR("no default part description for '%s'!",
rp->part->name);
switch (ep->type)
{
@ -487,6 +488,10 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
case EDJE_PART_TYPE_GRADIENT:
ERR("SPANK ! SPANK ! SPANK ! YOU ARE USING GRADIENT IN PART %s FROM GROUP %s INSIDE FILE %s !! THEY ARE NOW REMOVED !",
ep->name, group, file);
break;
case EDJE_PART_TYPE_VIRTUAL:
rp->object = NULL;
break;
default:
ERR("wrong part type %i!", ep->type);
break;
@ -551,7 +556,9 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
if (rp->part->clip_to_id >= 0)
{
rp->clip_to = ed->table_parts[rp->part->clip_to_id % ed->table_parts_size];
if (rp->clip_to)
if (rp->clip_to &&
rp->clip_to->object &&
rp->object)
{
evas_object_pass_events_set(rp->clip_to->object, 1);
evas_object_pointer_mode_set(rp->clip_to->object, EVAS_OBJECT_POINTER_MODE_NOGRAB);

View File

@ -675,6 +675,7 @@ struct _Edje_Limit
TYPE GROUP; \
TYPE BOX; \
TYPE TABLE; \
TYPE VIRTUAL; \
TYPE EXTERNAL;
struct _Edje_Part_Collection_Directory_Entry
@ -1667,6 +1668,7 @@ extern Eina_Mempool *_emp_GROUP;
extern Eina_Mempool *_emp_BOX;
extern Eina_Mempool *_emp_TABLE;
extern Eina_Mempool *_emp_EXTERNAL;
extern Eina_Mempool *_emp_VIRTUAL;
extern Eina_Mempool *_emp_part;
void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos, FLOAT_T v1, FLOAT_T v2);