From: Youngbok Shin Date: Tue, 2 Jan 2018 07:40:19 +0000 (+0900) Subject: edje: add part_valign property for internal usage X-Git-Tag: accepted/tizen/unified/20180111.074145~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F46%2F166146%2F1;p=platform%2Fupstream%2Fefl.git edje: add part_valign property for internal usage @tizen_feature Change-Id: I4e9f19fc68e2d43e19a733791a3c22b14ecc240f (cherry picked from commit 9d52a3f37c2c09d994da5f9d2d985798acc95dbf) --- diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index 7395970..a6c2c73 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -1368,15 +1368,29 @@ _edje_part_recalc_single_aspect(Edje *ed, params->eval.x = ADD(want_x, MUL(SUB(want_w, params->eval.w), desc->align.x)); + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + if (ep->valign != -1.0) + params->eval.y = ADD(want_y, + MUL(SUB(want_h, params->eval.h), + ep->valign)); + else + /* END */ params->eval.y = ADD(want_y, MUL(SUB(want_h, params->eval.h), desc->align.y)); return apref; } +/* TIZEN_ONLY(20180102): add part_valign property for internal usage static void _edje_part_recalc_single_step(Edje_Part_Description_Common *desc, Edje_Calc_Params *params) + */ +static void +_edje_part_recalc_single_step(Edje_Real_Part *ep, + Edje_Part_Description_Common *desc, + Edje_Calc_Params *params) +/* END */ { if (desc->step.x > 0) { @@ -1401,6 +1415,11 @@ _edje_part_recalc_single_step(Edje_Part_Description_Common *desc, new_h = desc->step.y * steps; if (params->eval.h > FROM_INT(new_h)) { + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + if (ep->valign != -1.0) + params->eval.y = ADD(params->eval.y, SCALE(ep->valign, SUB(params->eval.h, FROM_INT(new_h)))); + else + /* END */ params->eval.y = ADD(params->eval.y, SCALE(desc->align.y, SUB(params->eval.h, FROM_INT(new_h)))); params->eval.h = FROM_INT(new_h); } @@ -2295,11 +2314,20 @@ _edje_part_recalc_single_min_length(FLOAT_T align, FLOAT_T *start, FLOAT_T *leng } } +/* TIZEN_ONLY(20180102): add part_valign property for internal usage static void _edje_part_recalc_single_min(Edje_Part_Description_Common *desc, Edje_Calc_Params *params, int minw, int minh, Edje_Internal_Aspect aspect) + */ +static void +_edje_part_recalc_single_min(Edje_Real_Part *ep, + Edje_Part_Description_Common *desc, + Edje_Calc_Params *params, + int minw, int minh, + Edje_Internal_Aspect aspect) +/* END */ { FLOAT_T tmp; FLOAT_T w; @@ -2349,6 +2377,11 @@ _edje_part_recalc_single_min(Edje_Part_Description_Common *desc, } _edje_part_recalc_single_min_length(desc->align.x, ¶ms->eval.x, ¶ms->eval.w, minw); + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + if (ep->valign != -1.0) + _edje_part_recalc_single_min_length(ep->valign, ¶ms->eval.y, ¶ms->eval.h, minh); + else + /* END */ _edje_part_recalc_single_min_length(desc->align.y, ¶ms->eval.y, ¶ms->eval.h, minh); } @@ -2365,11 +2398,20 @@ _edje_part_recalc_single_max_length(FLOAT_T align, FLOAT_T *start, FLOAT_T *leng } } +/* TIZEN_ONLY(20180102): add part_valign property for internal usage static void _edje_part_recalc_single_max(Edje_Part_Description_Common *desc, Edje_Calc_Params *params, int maxw, int maxh, Edje_Internal_Aspect aspect) + */ +static void +_edje_part_recalc_single_max(Edje_Real_Part *ep, + Edje_Part_Description_Common *desc, + Edje_Calc_Params *params, + int maxw, int maxh, + Edje_Internal_Aspect aspect) +/* END */ { FLOAT_T tmp; FLOAT_T w; @@ -2419,6 +2461,11 @@ _edje_part_recalc_single_max(Edje_Part_Description_Common *desc, } _edje_part_recalc_single_max_length(desc->align.x, ¶ms->eval.x, ¶ms->eval.w, maxw); + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + if (ep->valign != -1.0) + _edje_part_recalc_single_max_length(ep->valign, ¶ms->eval.y, ¶ms->eval.h, maxh); + else + /* END */ _edje_part_recalc_single_max_length(desc->align.y, ¶ms->eval.y, ¶ms->eval.h, maxh); } @@ -3188,7 +3235,11 @@ _edje_part_recalc_single(Edje *ed, apref = _edje_part_recalc_single_aspect(ed, ep, desc, params, &minw, &minh, &maxw, &maxh, pos); /* size step */ + /* TIZEN_ONLY(20180102): add part_valign property for internal usage _edje_part_recalc_single_step(desc, params); + */ + _edje_part_recalc_single_step(ep, desc, params); + /* END */ /* colors */ if (ep->part->type != EDJE_PART_TYPE_SPACER) @@ -3403,10 +3454,18 @@ _edje_part_recalc_single(Edje *ed, params->req.h = TO_INT(params->eval.h); /* adjust for min size */ + /* TIZEN_ONLY(20180102): add part_valign property for internal usage _edje_part_recalc_single_min(desc, params, minw, minh, apref); + */ + _edje_part_recalc_single_min(ep, desc, params, minw, minh, apref); + /* END */ /* adjust for max size */ + /* TIZEN_ONLY(20180102): add part_valign property for internal usage _edje_part_recalc_single_max(desc, params, maxw, maxh, apref); + */ + _edje_part_recalc_single_max(ep, desc, params, maxw, maxh, apref); + /* END */ /* take care of dragable part */ if (ep->drag) diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c index 738e63e..6be5c43 100644 --- a/src/lib/edje/edje_edit.c +++ b/src/lib/edje/edje_edit.c @@ -3146,6 +3146,9 @@ _edje_edit_real_part_add(Evas_Object *obj, const char *name, Edje_Part_Type type return EINA_FALSE; } memset(rp, 0, sizeof(Edje_Real_Part)); + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + rp->valign = -1.0; + /* END */ /* Init Edje_Part */ pc = ed->collection; diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c index 098af96..867503e 100644 --- a/src/lib/edje/edje_load.c +++ b/src/lib/edje/edje_load.c @@ -668,6 +668,9 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch } memset(rp, 0, sizeof (Edje_Real_Part)); + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + rp->valign = -1.0; + /* END */ rp->param1.p.map = eina_cow_alloc(_edje_calc_params_map_cow); #ifdef HAVE_EPHYSICS diff --git a/src/lib/edje/edje_object.eo b/src/lib/edje/edje_object.eo index 1556610..0765da9 100644 --- a/src/lib/edje/edje_object.eo +++ b/src/lib/edje/edje_object.eo @@ -3081,6 +3081,30 @@ class Edje.Object (Evas.Smart_Clipped, Efl.File) } } /* END */ + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + @property part_valign @internal { + set { + [[Sets the valign for a common description. + + Do not use this API without understanding whats going on. + It is made for internal usage. + ]] + return: bool; [[$true, on success or $false, on error]] + } + get { + [[Gets the valign for a common description. + + Do not use this API without understanding whats going on. + It is made for internal usage. + ]] + } + keys { + part: const(char)*; [[The part name]] + } + values { + valign: double; [[The valign 0.0~1.0. -1.0 for respect EDC's align value.]] + } + } /* TIZEN_ONLY(20170801): add text marquee duration set/get APIs for internal usages */ @property part_text_marquee_duration @internal { set { diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 5d8c965..376d0b3 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -2058,6 +2058,9 @@ struct _Edje_Real_Part Edje_Real_Part_Vector *vector; } typedata; // 4 FLOAT_T description_pos; // 8 + /* TIZEN_ONLY(20180102): add part_valign property for internal usage */ + FLOAT_T valign; // 8 + /* END */ Edje_Rectangle req; // 16 int x, y, w, h; // 16 int clicked_button; // 4 diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index d720ea7..ecbebd7 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -6987,6 +6987,50 @@ _edje_object_part_text_valign_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char * } /* END */ +/* TIZEN_ONLY(20180102): add part_valign property for internal usage */ +EOLIAN Eina_Bool +_edje_object_part_valign_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double valign) +{ + Edje_Real_Part *rp; + FLOAT_T va; + + if (!part) return EINA_FALSE; + rp = _edje_real_part_recursive_get(&ed, part); + if (!rp) return EINA_FALSE; + + va = FROM_DOUBLE(valign); + + if (rp->valign != va) + { + rp->valign = va; + + ed->dirty = EINA_TRUE; + ed->recalc_call = EINA_TRUE; +#ifdef EDJE_CALC_CACHE + ed->all_part_change = EINA_TRUE; +#endif + _edje_recalc(ed); + } + + return EINA_TRUE; +} + +EOLIAN double +_edje_object_part_valign_get(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part) +{ + Edje_Real_Part *rp; + + if (!part) return -1.0; + rp = _edje_real_part_recursive_get(&ed, part); + if (!rp) return -1.0; + + if (rp->valign == -1.0) + return TO_DOUBLE(rp->chosen_description->align.y); + + return TO_DOUBLE(rp->valign); +} +/* END */ + /* TIZEN_ONLY(20170801): add text marquee duration set/get APIs for internal usages */ EOLIAN Eina_Bool _edje_object_part_text_marquee_duration_set(Eo *eo_obj EINA_UNUSED, Edje *ed, const char *part, double duration)