summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-08-09 20:11:07 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-08-16 20:08:32 +0900
commitae3ac0cd2520469c700d43c81e33534ce0d8e92e (patch)
tree18fabbeb0d0d14a77623ad555f605d01e862f5fe
parent114c22f40961d0c7cfd4a61a60e494fea4da628b (diff)
downloadefl-ae3ac0cd2520469c700d43c81e33534ce0d8e92e.tar.gz
edje: Allow no_render in description
Previously, it was limited to the part block. It was a mistake and should have been put in the description instead, as this allows it to change during state transition (like visible, or proxy_src_visible). @feature
-rw-r--r--src/bin/edje/edje_cc_handlers.c33
-rw-r--r--src/lib/edje/edje_calc.c36
-rw-r--r--src/lib/edje/edje_data.c2
-rw-r--r--src/lib/edje/edje_private.h9
-rw-r--r--src/lib/evas/canvas/evas_clip.c3
5 files changed, 81 insertions, 2 deletions
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 0dc79118b3..615c851b53 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -340,6 +340,7 @@ static void st_collections_group_parts_part_description_link_base(void);
static void st_collections_group_parts_part_description_source(void);
static void st_collections_group_parts_part_description_state(void);
static void st_collections_group_parts_part_description_visible(void);
+static void st_collections_group_parts_part_description_no_render(void);
static void st_collections_group_parts_part_description_limit(void);
static void st_collections_group_parts_part_description_align(void);
static void st_collections_group_parts_part_description_fixed(void);
@@ -830,6 +831,7 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.description.state", st_collections_group_parts_part_description_state},
{"collections.group.parts.part.description.visible", st_collections_group_parts_part_description_visible},
{"collections.group.parts.part.description.limit", st_collections_group_parts_part_description_limit},
+ {"collections.group.parts.part.description.no_render", st_collections_group_parts_part_description_no_render},
{"collections.group.parts.part.description.align", st_collections_group_parts_part_description_align},
{"collections.group.parts.part.description.fixed", st_collections_group_parts_part_description_fixed},
{"collections.group.parts.part.description.min", st_collections_group_parts_part_description_min},
@@ -7862,6 +7864,7 @@ _copied_map_colors_get(Edje_Part_Description_Common *parent)
step: 0 0;
aspect: 1 1;
clip_to: "clip_override_part_name";
+ no_render: 0;
rel1 {
..
@@ -7917,6 +7920,7 @@ ob_collections_group_parts_part_description(void)
ed->visible = 1;
ed->limit = 0;
+ ed->no_render = 0;
ed->align.x = FROM_DOUBLE(0.5);
ed->align.y = FROM_DOUBLE(0.5);
ed->min.w = 0;
@@ -8477,6 +8481,35 @@ st_collections_group_parts_part_description_hid(void)
/**
@page edcref
@property
+ visible
+ @parameters
+ [0 or 1]
+ @effect
+ Takes a boolean value specifying whether part is visible (1) or not
+ (0). Non-visible parts do not emit signals. The default value is 1.
+
+ @since 1.19
+ @endproperty
+*/
+static void
+st_collections_group_parts_part_description_no_render(void)
+{
+ if (current_part->type == EDJE_PART_TYPE_SPACER)
+ {
+ ERR("parse error %s:%i. SPACER part can't be marked as no_render",
+ file_in, line - 1);
+ exit(-1);
+ }
+
+ if (check_range_arg_count(0, 1) == 1)
+ EDJE_DESC_NO_RENDER_SET(current_desc, parse_bool(0));
+ else /* lazEDC form */
+ EDJE_DESC_NO_RENDER_SET(current_desc, 1);
+}
+
+/**
+ @page edcref
+ @property
limit
@parameters
[mode]
diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 879bba7706..24a9c55ddd 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -2821,6 +2821,18 @@ _edje_part_recalc_single(Edje *ed,
/* visible */
params->visible = desc->visible;
+ /* no_render override */
+ if (EDJE_DESC_NO_RENDER_IS_SET(desc))
+ {
+ params->no_render = EDJE_DESC_NO_RENDER_VALUE(desc);
+ params->no_render_apply = 1;
+ }
+ else
+ {
+ params->no_render = ep->part->no_render;
+ params->no_render_apply = 0;
+ }
+
/* clip override */
if (clip_to)
{
@@ -4436,6 +4448,24 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
}
}
+ /* and no_render as well */
+ if ((p1->no_render) && (!p2->no_render))
+ {
+ p3->no_render = (pos == FROM_INT(1));
+ p3->no_render_apply = 1;
+ }
+ else if ((!p1->no_render) && (p2->no_render))
+ {
+ p3->no_render = (pos == ZERO);
+ p3->no_render_apply = 1;
+ }
+ else if (p1->no_render != ep->part->no_render)
+ {
+ p3->no_render = p1->no_render;
+ p3->no_render_apply = 1;
+ }
+ else p3->no_render = ep->part->no_render;
+
p3->smooth = (beginning_pos) ? p1->smooth : p2->smooth;
/* FIXME: do x and y separately base on flag */
@@ -4813,6 +4843,8 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
break;
}
evas_object_show(ep->object);
+ if (pf->no_render_apply)
+ efl_canvas_object_no_render_set(ep->object, pf->no_render);
}
else if (!pf->visible)
{
@@ -4830,8 +4862,10 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
break;
}
evas_object_show(ep->object);
-
+ if (pf->no_render_apply)
+ efl_canvas_object_no_render_set(ep->object, pf->no_render);
#endif
+
/* move and resize are needed for all previous object => no break here. */
case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP:
diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index 8470076e28..7754c9eba4 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -1128,6 +1128,7 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "state.name", state.name, EET_T_STRING); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "state.value", state.value, EET_T_DOUBLE); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "visible", visible, EET_T_CHAR); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "no_render", no_render, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "limit", limit, EET_T_CHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.x", align.x, EDJE_T_FLOAT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.y", align.y, EDJE_T_FLOAT); \
@@ -1253,6 +1254,7 @@ _edje_edd_init(void)
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "rel2.id_x", Dec.rel2.id_x, EET_T_INT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "rel2.id_y", Dec.rel2.id_y, EET_T_INT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "clip_to_id", Dec.clip_to_id, EET_T_INT); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "no_render", Dec.no_render, EET_T_UCHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "size_class", Dec.size_class, EET_T_STRING); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "color_class", Dec.color_class, EET_T_STRING); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "color.r", Dec.color.r, EET_T_UCHAR); \
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index afc6f7947f..9794736e9a 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -526,6 +526,10 @@ typedef struct _Edje_Signal_Callback_Custom Edje_Signal_Callback_Custom;
#define FLAG_Y 0x02
#define FLAG_XY (FLAG_X | FLAG_Y)
+#define EDJE_DESC_NO_RENDER_IS_SET(d) (((d)->no_render & 0x2) != 0)
+#define EDJE_DESC_NO_RENDER_SET(d, v) do { (d)->no_render = (!!v) | 0x2; } while (0)
+#define EDJE_DESC_NO_RENDER_VALUE(d) (((d)->no_render & 0x1) != 0)
+
/*----------*/
struct _AABB {
@@ -1309,6 +1313,7 @@ struct _Edje_Part_Description_Common
Edje_3D_Vec align_3d;
unsigned char visible; /* is it shown */
unsigned char limit; /* 0 == no, 1 = width, 2 = height, 3 = both */
+ unsigned char no_render; /* no_render override @since 1.19 */
};
struct _Edje_Part_Description_Spec_Fill
@@ -1845,7 +1850,7 @@ struct _Edje_Calc_Params
Edje_Calc_Params_Type_Common *common;
Edje_Calc_Params_Type_Text *text;
Edje_Calc_Params_Type_Node *node;
- } type; // 4/8
+ } type; // 4/8
Edje_Calc_Params_Ext *ext; // 4/8
struct {
FLOAT_T x, y, w, h; // 32
@@ -1858,6 +1863,8 @@ struct _Edje_Calc_Params
unsigned char mapped : 1;
unsigned char visible : 1;
unsigned char smooth : 1; // 1
+ unsigned char no_render : 1;
+ unsigned char no_render_apply : 1;
}; // 77/85(rounded up for alignment: 80/88)
struct _Edje_Real_Part_Set
diff --git a/src/lib/evas/canvas/evas_clip.c b/src/lib/evas/canvas/evas_clip.c
index cb79f32b66..500241545d 100644
--- a/src/lib/evas/canvas/evas_clip.c
+++ b/src/lib/evas/canvas/evas_clip.c
@@ -594,6 +594,9 @@ _efl_canvas_object_clipees_has(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Dat
EOLIAN void
_efl_canvas_object_no_render_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bool enable)
{
+ enable = !!enable;
+ if (obj->no_render == enable) return;
+
obj->no_render = enable;
if (obj->is_smart)
efl_canvas_group_no_render_set(eo_obj, enable);