forked from enlightenment/efl
edje: add spread.{w,h}.
This is particularly useful when using table and replicating the same group all over the place. At least for many games I have in mind this will save a lot of lines !
This commit is contained in:
parent
d1112534a1
commit
8222bf4650
|
@ -1,3 +1,7 @@
|
|||
2013-03-22 Cedric Bail
|
||||
|
||||
* Edje: Add spread width and height in TABLE part.
|
||||
|
||||
2013-03-20 Jérémy Zurcher (jeyzu)
|
||||
|
||||
* Eina: Add eina_list_shuffle
|
||||
|
@ -67,7 +71,6 @@
|
|||
* Evas Evas_GL: removed resource surface/context pool in favor of
|
||||
creating on-demand. resource surface/contexts are used for creating
|
||||
GL resources for Evas_GL.
|
||||
|
||||
|
||||
2013-02-28 Tom Hacohen (TAsn)
|
||||
|
||||
|
@ -76,7 +79,7 @@
|
|||
|
||||
2013-02-28 Mike Blumenkrantz
|
||||
|
||||
* fix custom states for edje SPACER parts
|
||||
* fix custom states for edje SPACER parts
|
||||
* fix edje program filters
|
||||
|
||||
2013-02-28 Cedric Bail
|
||||
|
|
6
NEWS
6
NEWS
|
@ -72,8 +72,10 @@ Additions:
|
|||
* Add eio_eet_sync symbols.
|
||||
* Add infrastructure to handle buggy touchscreen in Ecore_Input_Evas.
|
||||
* Add infrastructure to handle message between ecore and parent ecore in Ecore_Evas.
|
||||
* Edje textblock: Added support for size_range.
|
||||
* Ecore_x: Add atom related with indicator type.
|
||||
* Edje:
|
||||
- textblock: Added support for size_range.
|
||||
- table: Added spread.{w,h} to repeat and automatically name an item in a TABLE part.
|
||||
* Ecore_x: Add atom related with indicator type.
|
||||
* Ecore_x: Add manual render code before deiconify
|
||||
* Eeze: Add a dummy libmount replacement for when libmount is not there.
|
||||
* Ecore_Con: Add systemd socket activation support (ECORE_CON_SOCKET_ACTIVATE).
|
||||
|
|
|
@ -239,6 +239,7 @@ static void st_collections_group_parts_part_box_items_item_type(void);
|
|||
static void st_collections_group_parts_part_box_items_item_name(void);
|
||||
static void st_collections_group_parts_part_box_items_item_source(void);
|
||||
static void st_collections_group_parts_part_box_items_item_min(void);
|
||||
static void st_collections_group_parts_part_box_items_item_spread(void);
|
||||
static void st_collections_group_parts_part_box_items_item_prefer(void);
|
||||
static void st_collections_group_parts_part_box_items_item_max(void);
|
||||
static void st_collections_group_parts_part_box_items_item_padding(void);
|
||||
|
@ -528,6 +529,7 @@ New_Statement_Handler statement_handlers[] =
|
|||
{"collections.group.parts.part.box.items.item.name", st_collections_group_parts_part_box_items_item_name},
|
||||
{"collections.group.parts.part.box.items.item.source", st_collections_group_parts_part_box_items_item_source},
|
||||
{"collections.group.parts.part.box.items.item.min", st_collections_group_parts_part_box_items_item_min},
|
||||
{"collections.group.parts.part.box.items.item.spread", st_collections_group_parts_part_box_items_item_spread},
|
||||
{"collections.group.parts.part.box.items.item.prefer", st_collections_group_parts_part_box_items_item_prefer},
|
||||
{"collections.group.parts.part.box.items.item.max", st_collections_group_parts_part_box_items_item_max},
|
||||
{"collections.group.parts.part.box.items.item.padding", st_collections_group_parts_part_box_items_item_padding},
|
||||
|
@ -540,6 +542,7 @@ New_Statement_Handler statement_handlers[] =
|
|||
{"collections.group.parts.part.table.items.item.name", st_collections_group_parts_part_box_items_item_name}, /* dup */
|
||||
{"collections.group.parts.part.table.items.item.source", st_collections_group_parts_part_box_items_item_source}, /* dup */
|
||||
{"collections.group.parts.part.table.items.item.min", st_collections_group_parts_part_box_items_item_min}, /* dup */
|
||||
{"collections.group.parts.part.table.items.item.spread", st_collections_group_parts_part_box_items_item_spread}, /* dup */
|
||||
{"collections.group.parts.part.table.items.item.prefer", st_collections_group_parts_part_box_items_item_prefer}, /* dup */
|
||||
{"collections.group.parts.part.table.items.item.max", st_collections_group_parts_part_box_items_item_max}, /* dup */
|
||||
{"collections.group.parts.part.table.items.item.padding", st_collections_group_parts_part_box_items_item_padding}, /* dup */
|
||||
|
@ -4309,6 +4312,8 @@ static void ob_collections_group_parts_part_box_items_item(void)
|
|||
item->row = -1;
|
||||
item->colspan = 1;
|
||||
item->rowspan = 1;
|
||||
item->spread.w = 1;
|
||||
item->spread.h = 1;
|
||||
pitem = (Edje_Pack_Element_Parser *)item;
|
||||
pitem->can_override = EINA_FALSE;
|
||||
}
|
||||
|
@ -4428,6 +4433,27 @@ static void st_collections_group_parts_part_box_items_item_min(void)
|
|||
current_item->min.h = parse_int_range(1, 0, 0x7ffffff);
|
||||
}
|
||||
|
||||
/**
|
||||
@page edcref
|
||||
@property
|
||||
spread
|
||||
@parameters
|
||||
[width] [height]
|
||||
@effect
|
||||
Will replicate the item in a rectangle of size width x height
|
||||
box starting from the defined position of this item.
|
||||
|
||||
default value will be 1 1;
|
||||
@endproperty
|
||||
*/
|
||||
static void st_collections_group_parts_part_box_items_item_spread(void)
|
||||
{
|
||||
check_arg_count(2);
|
||||
|
||||
current_item->spread.w = parse_int_range(0, 0, 0x7ffffff);
|
||||
current_item->spread.h = parse_int_range(1, 0, 0x7ffffff);
|
||||
}
|
||||
|
||||
/**
|
||||
@page edcref
|
||||
@property
|
||||
|
|
|
@ -883,6 +883,8 @@ _edje_edd_init(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "source", source, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "min.w", min.w, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "min.h", min.h, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "spread.w", spread.w, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "spread.h", spread.h, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "prefer.w", prefer.w, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "prefer.h", prefer.h, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_pack_element, Edje_Pack_Element, "max.w", max.w, EET_T_INT);
|
||||
|
|
|
@ -827,6 +827,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
|||
{
|
||||
Eina_List *l;
|
||||
Evas_Object *child_obj;
|
||||
Edje_Pack_Element pack_it_copy;
|
||||
const char *group_path_entry = eina_stringshare_add(source);
|
||||
const char *data;
|
||||
|
||||
|
@ -848,80 +849,124 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
|||
}
|
||||
}
|
||||
|
||||
child_obj = edje_object_add(ed->base->evas);
|
||||
group_path = eina_list_append(group_path, group_path_entry);
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP)
|
||||
{
|
||||
_edje_real_part_swallow(rp, child_obj, EINA_FALSE);
|
||||
}
|
||||
if (pack_it)
|
||||
{
|
||||
pack_it_copy = *pack_it;
|
||||
}
|
||||
else
|
||||
{
|
||||
pack_it_copy.spread.w = 0;
|
||||
pack_it_copy.spread.h = 0;
|
||||
}
|
||||
|
||||
if (!_edje_object_file_set_internal(child_obj, file, source, rp->part->name, group_path, nested))
|
||||
do
|
||||
{
|
||||
ERR("impossible to set part '%s' of group '%s' from file '%s' to '%s'",
|
||||
rp->part->name, group_path_entry, file, source);
|
||||
ed->load_error = edje_object_load_error_get(child_obj);
|
||||
evas_object_del(child_obj);
|
||||
eina_stringshare_del(group_path_entry);
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
group_path = eina_list_remove(group_path, group_path_entry);
|
||||
eina_stringshare_del(group_path_entry);
|
||||
|
||||
edje_object_propagate_callback_add(child_obj,
|
||||
_cb_signal_repeat,
|
||||
obj);
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP)
|
||||
{
|
||||
ed->groups = eina_list_append(ed->groups, _edje_fetch(child_obj));
|
||||
_edje_real_part_swallow(rp, child_obj, EINA_TRUE);
|
||||
_edje_subobj_register(ed, child_obj);
|
||||
source = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((rp->type == EDJE_RP_TYPE_CONTAINER) &&
|
||||
(rp->typedata.container))
|
||||
child_obj = edje_object_add(ed->base->evas);
|
||||
group_path = eina_list_append(group_path, group_path_entry);
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP)
|
||||
{
|
||||
pack_it->parent = rp;
|
||||
|
||||
_edje_object_pack_item_hints_set(child_obj, pack_it);
|
||||
if (pack_it->name)
|
||||
evas_object_name_set(child_obj, pack_it->name);
|
||||
|
||||
if (rp->part->type == EDJE_PART_TYPE_BOX)
|
||||
{
|
||||
_edje_real_part_box_append(rp, child_obj);
|
||||
evas_object_data_set(child_obj, "\377 edje.box_item", pack_it);
|
||||
}
|
||||
else if (rp->part->type == EDJE_PART_TYPE_TABLE)
|
||||
{
|
||||
_edje_real_part_table_pack(rp, child_obj, pack_it->col, pack_it->row, pack_it->colspan, pack_it->rowspan);
|
||||
evas_object_data_set(child_obj, "\377 edje.table_item", pack_it);
|
||||
}
|
||||
_edje_real_part_swallow(rp, child_obj, EINA_FALSE);
|
||||
}
|
||||
|
||||
if (!_edje_object_file_set_internal(child_obj, file, source, rp->part->name, group_path, nested))
|
||||
{
|
||||
ERR("impossible to set part '%s' of group '%s' from file '%s' to '%s'",
|
||||
rp->part->name, group_path_entry, file, source);
|
||||
ed->load_error = edje_object_load_error_get(child_obj);
|
||||
evas_object_del(child_obj);
|
||||
eina_stringshare_del(group_path_entry);
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
group_path = eina_list_remove(group_path, group_path_entry);
|
||||
|
||||
edje_object_propagate_callback_add(child_obj,
|
||||
_cb_signal_repeat,
|
||||
obj);
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP)
|
||||
{
|
||||
ed->groups = eina_list_append(ed->groups, _edje_fetch(child_obj));
|
||||
_edje_real_part_swallow(rp, child_obj, EINA_TRUE);
|
||||
_edje_subobj_register(ed, child_obj);
|
||||
evas_object_show(child_obj);
|
||||
rp->typedata.container->items = eina_list_append(rp->typedata.container->items, child_obj);
|
||||
|
||||
if (item_count > 0)
|
||||
source = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((rp->type == EDJE_RP_TYPE_CONTAINER) &&
|
||||
(rp->typedata.container))
|
||||
{
|
||||
pack_it = *curr_item;
|
||||
source = pack_it->source;
|
||||
curr_item++;
|
||||
item_count--;
|
||||
}
|
||||
else
|
||||
{
|
||||
source = NULL;
|
||||
curr_item = NULL;
|
||||
pack_it = NULL;
|
||||
Eina_Strbuf *buf = NULL;
|
||||
const char *name = pack_it_copy.name;
|
||||
|
||||
pack_it->parent = rp;
|
||||
|
||||
_edje_object_pack_item_hints_set(child_obj, &pack_it_copy);
|
||||
|
||||
if (pack_it_copy.spread.h >= 1 && pack_it_copy.spread.w > 1)
|
||||
{
|
||||
buf = eina_strbuf_new();
|
||||
if (name)
|
||||
eina_strbuf_append_printf(buf, "%s{%i,%i}", name, pack_it_copy.col, pack_it_copy.row);
|
||||
else
|
||||
eina_strbuf_append_printf(buf, "%i,%i", pack_it_copy.col, pack_it_copy.row);
|
||||
name = eina_strbuf_string_get(buf);
|
||||
}
|
||||
if (name) evas_object_name_set(child_obj, name);
|
||||
if (buf) eina_strbuf_free(buf);
|
||||
|
||||
if (rp->part->type == EDJE_PART_TYPE_BOX)
|
||||
{
|
||||
_edje_real_part_box_append(rp, child_obj);
|
||||
evas_object_data_set(child_obj, "\377 edje.box_item", pack_it);
|
||||
}
|
||||
else if (rp->part->type == EDJE_PART_TYPE_TABLE)
|
||||
{
|
||||
_edje_real_part_table_pack(rp, child_obj,
|
||||
pack_it_copy.col, pack_it_copy.row,
|
||||
pack_it_copy.colspan, pack_it_copy.rowspan);
|
||||
evas_object_data_set(child_obj, "\377 edje.table_item", pack_it);
|
||||
}
|
||||
_edje_subobj_register(ed, child_obj);
|
||||
evas_object_show(child_obj);
|
||||
rp->typedata.container->items = eina_list_append(rp->typedata.container->items, child_obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (group_path_started)
|
||||
pack_it_copy.spread.w--;
|
||||
pack_it_copy.col++;
|
||||
if (pack_it_copy.spread.w < 1 && pack_it)
|
||||
{
|
||||
pack_it_copy.col = pack_it->col;
|
||||
pack_it_copy.row++;
|
||||
pack_it_copy.spread.h--;
|
||||
pack_it_copy.spread.w = pack_it->spread.w;
|
||||
}
|
||||
}
|
||||
while (pack_it_copy.spread.h > 0);
|
||||
|
||||
eina_stringshare_del(group_path_entry);
|
||||
|
||||
if ((rp->type == EDJE_RP_TYPE_CONTAINER) &&
|
||||
(rp->typedata.container))
|
||||
{
|
||||
if (item_count > 0)
|
||||
{
|
||||
pack_it = *curr_item;
|
||||
source = pack_it->source;
|
||||
curr_item++;
|
||||
item_count--;
|
||||
}
|
||||
else
|
||||
{
|
||||
source = NULL;
|
||||
curr_item = NULL;
|
||||
pack_it = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (group_path_started)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
|
@ -1746,6 +1791,7 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *sig, const char *sou
|
|||
size_t length_source;
|
||||
int i = 0;
|
||||
const char *alias = NULL;
|
||||
const char *name = NULL;
|
||||
Edje_Message_Signal emsg;
|
||||
|
||||
parent = data;
|
||||
|
@ -1754,9 +1800,12 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *sig, const char *sou
|
|||
|
||||
pack_it = evas_object_data_get(obj, "\377 edje.box_item");
|
||||
if (!pack_it) pack_it = evas_object_data_get(obj, "\377 edje.table_item");
|
||||
name = evas_object_name_get(obj);
|
||||
|
||||
if (pack_it)
|
||||
{
|
||||
if (!pack_it->name)
|
||||
if (!name) name = pack_it->name;
|
||||
if (!name)
|
||||
{
|
||||
Eina_List *child = NULL;
|
||||
Evas_Object *o;
|
||||
|
@ -1782,7 +1831,7 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *sig, const char *sou
|
|||
}
|
||||
else
|
||||
{
|
||||
length_index = strlen(pack_it->name) + 2;
|
||||
length_index = strlen(name) + 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1802,7 +1851,7 @@ _cb_signal_repeat(void *data, Evas_Object *obj, const char *sig, const char *sou
|
|||
length_parent += eina_convert_itoa(i, new_src + length_parent);
|
||||
else
|
||||
{
|
||||
memcpy(new_src + length_parent, pack_it->name, length_index);
|
||||
memcpy(new_src + length_parent, name, length_index);
|
||||
length_parent += length_index - 2;
|
||||
}
|
||||
new_src[length_parent++] = EDJE_PART_PATH_SEPARATOR_INDEXR;
|
||||
|
|
|
@ -164,7 +164,7 @@ EAPI extern int _edje_default_log_dom ;
|
|||
/* increment this when you add new feature to edje file format without
|
||||
* breaking backward compatibility.
|
||||
*/
|
||||
#define EDJE_FILE_MINOR 4
|
||||
#define EDJE_FILE_MINOR 5
|
||||
|
||||
/* FIXME:
|
||||
*
|
||||
|
@ -723,8 +723,11 @@ struct _Edje_Pack_Element
|
|||
const char *source; /* group name to use as source for this element */
|
||||
Edje_Size min, prefer, max;
|
||||
struct {
|
||||
int l, r, t, b;
|
||||
int l, r, t, b;
|
||||
} padding;
|
||||
struct {
|
||||
int w, h;
|
||||
} spread;
|
||||
Edje_Alignment align;
|
||||
Edje_Alignment weight;
|
||||
Edje_Aspect aspect;
|
||||
|
|
Loading…
Reference in New Issue