edje: cleanup and make limit per description work.

SVN revision: 73562
This commit is contained in:
Cedric BAIL 2012-07-11 10:50:30 +00:00
parent 88f091754a
commit f8f0a494c2
2 changed files with 29 additions and 24 deletions

View File

@ -676,66 +676,64 @@ _edje_recalc_do(Edje *ed)
unsigned char limit; unsigned char limit;
int part; int part;
name = ed->collection->parts[i]->name;
part = ed->collection->limits.parts[i].part; part = ed->collection->limits.parts[i].part;
name = ed->collection->parts[part]->name;
limit = ed->table_parts[part]->chosen_description->limit; limit = ed->table_parts[part]->chosen_description->limit;
switch (limit) switch (limit)
{ {
case 0: case 0:
ed->collection->limits.parts[i].width = 2; ed->collection->limits.parts[i].width = EDJE_PART_LIMIT_UNKNOWN;
ed->collection->limits.parts[i].height = 2; ed->collection->limits.parts[i].height = EDJE_PART_LIMIT_UNKNOWN;
break; break;
case 1: case 1:
ed->collection->limits.parts[i].height = 2; ed->collection->limits.parts[i].height = EDJE_PART_LIMIT_UNKNOWN;
break; break;
case 2: case 2:
ed->collection->limits.parts[i].width = 2; ed->collection->limits.parts[i].width = EDJE_PART_LIMIT_UNKNOWN;
break; break;
case 3: case 3:
break; break;
} }
if (limit | 1) if ((limit & 1) == 1)
{ {
if (ed->table_parts[part]->w > 0 && if (ed->table_parts[part]->w > 0 &&
(ed->collection->limits.parts[i].width <= 0 || (ed->collection->limits.parts[i].width != EDJE_PART_LIMIT_OVER))
ed->collection->limits.parts[i].width == 2))
{ {
ed->collection->limits.parts[i].width = 1; ed->collection->limits.parts[i].width = EDJE_PART_LIMIT_OVER;
_edje_emit(ed, "limit,width,over", name); _edje_emit(ed, "limit,width,over", name);
} }
else if (ed->table_parts[part]->w < 0 && else if (ed->table_parts[part]->w < 0 &&
ed->collection->limits.parts[i].width >= 0) ed->collection->limits.parts[i].width != EDJE_PART_LIMIT_BELOW)
{ {
ed->collection->limits.parts[i].width = -1; ed->collection->limits.parts[i].width = EDJE_PART_LIMIT_BELOW;
_edje_emit(ed, "limit,width,below", name); _edje_emit(ed, "limit,width,below", name);
} }
else if (ed->table_parts[part]->w == 0 && else if (ed->table_parts[part]->w == 0 &&
ed->collection->limits.parts[i].width != 0) ed->collection->limits.parts[i].width != EDJE_PART_LIMIT_ZERO)
{ {
ed->collection->limits.parts[i].width = 0; ed->collection->limits.parts[i].width = EDJE_PART_LIMIT_ZERO;
_edje_emit(ed, "limit,width,zero", name); _edje_emit(ed, "limit,width,zero", name);
} }
} }
if (limit | 2) if ((limit & 2) == 2)
{ {
if (ed->table_parts[part]->h > 0 && if (ed->table_parts[part]->h > 0 &&
(ed->collection->limits.parts[i].height <= 0 || (ed->collection->limits.parts[i].height != EDJE_PART_LIMIT_OVER))
ed->collection->limits.parts[i].height == 2))
{ {
ed->collection->limits.parts[i].height = 1; ed->collection->limits.parts[i].height = EDJE_PART_LIMIT_OVER;
_edje_emit(ed, "limit,height,over", name); _edje_emit(ed, "limit,height,over", name);
} }
else if (ed->table_parts[part]->h < 0 && else if (ed->table_parts[part]->h < 0 &&
ed->collection->limits.parts[i].height >= 0) ed->collection->limits.parts[i].height != EDJE_PART_LIMIT_BELOW)
{ {
ed->collection->limits.parts[i].height = -1; ed->collection->limits.parts[i].height = EDJE_PART_LIMIT_BELOW;
_edje_emit(ed, "limit,height,beloh", name); _edje_emit(ed, "limit,height,below", name);
} }
else if (ed->table_parts[part]->h == 0 && else if (ed->table_parts[part]->h == 0 &&
ed->collection->limits.parts[i].height != 0) ed->collection->limits.parts[i].height != EDJE_PART_LIMIT_ZERO)
{ {
ed->collection->limits.parts[i].height = 0; ed->collection->limits.parts[i].height = EDJE_PART_LIMIT_ZERO;
_edje_emit(ed, "limit,height,zero", name); _edje_emit(ed, "limit,height,zero", name);
} }
} }

View File

@ -727,12 +727,19 @@ struct _Edje_Pack_Element
unsigned short colspan, rowspan; unsigned short colspan, rowspan;
}; };
typedef enum {
EDJE_PART_LIMIT_UNKNOWN = 0,
EDJE_PART_LIMIT_BELOW,
EDJE_PART_LIMIT_ZERO,
EDJE_PART_LIMIT_OVER
} Edje_Part_Limit_State;
struct _Edje_Part_Limit struct _Edje_Part_Limit
{ {
int part; int part;
signed char width; /* -1, 0 or 1 */ Edje_Part_Limit_State width; /* -1, 0 or 1 */
signed char height; /* -1, 0, or 1 */ Edje_Part_Limit_State height; /* -1, 0, or 1 */
}; };
/*----------*/ /*----------*/