* 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).
* 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.
switch (type)
{
+ case EDJE_PART_TYPE_VIRTUAL:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP:
@li TABLE
@li EXTERNAL
@li PROXY
+ @li VIRTUAL
@endproperty
*/
static 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 */
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:
{
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);
}
{
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);
}
{
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);
{
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);
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
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);
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);
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);
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 (cc)
+ if (ep->part->type != EDJE_PART_TYPE_VIRTUAL)
{
- 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;
+ /* 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;
+ }
}
/* visible */
break;
}
+ case EDJE_PART_TYPE_VIRTUAL:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_BOX:
case EDJE_PART_TYPE_TABLE:
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,
/* 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. */
/* 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)
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;
ep->invalidate = 0;
}
#endif
-
}
EMP(BOX, box);
EMP(TABLE, table);
EMP(EXTERNAL, external);
+EMP(VIRTUAL, virtual);
EMP(part, part);
#define FREED(eed) \
{ 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 *
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);
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);
_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);
_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)
{
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;
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);
TYPE GROUP; \
TYPE BOX; \
TYPE TABLE; \
+ TYPE VIRTUAL; \
TYPE EXTERNAL;
struct _Edje_Part_Collection_Directory_Entry
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);