From: Hosang Kim Date: Tue, 11 Oct 2016 12:11:14 +0000 (+0900) Subject: edje_calc: add rounding pixel calculation for transition. X-Git-Tag: upstream/1.20.0~4107 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=304ca158be0706802407ec1c5a0d2d7634226c64;p=platform%2Fupstream%2Fefl.git edje_calc: add rounding pixel calculation for transition. Summary: when transition animation is working, sometimes one pixels loss occurs. Reviewers: cedric, woohyun, jpeg, raster Subscribers: jpeg Differential Revision: https://phab.enlightenment.org/D4341 --- diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index a465559..1d97be9 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -2541,6 +2541,61 @@ _edje_filter_get(Edje *ed, Edje_Part_Description_Spec_Filter *filter) } static void +_edje_part_pixel_adjust(Edje *ed, + Edje_Real_Part *ep, + Edje_Calc_Params *params) +{ + /* Adjust rounding to not loose one pixels compared to float + information only when rendering to avoid infinite adjustement + when doing min restricted calc */ + if (ABS(params->final.x) + params->final.w < TO_INT(ADD(ABS(params->eval.x), params->eval.w))) + { + if (!ed->calc_only) + { + params->final.w += 1; + } + else + { + ep->invalidate = EINA_TRUE; + } + } + else if (ABS(params->final.x) + params->final.w > TO_INT(ADD(ABS(params->eval.x), params->eval.w))) + { + if (!ed->calc_only) + { + params->final.w -= 1; + } + else + { + ep->invalidate = EINA_TRUE; + } + } + if (ABS(params->final.y) + params->final.h < TO_INT(ADD(ABS(params->eval.y), params->eval.h))) + { + if (!ed->calc_only) + { + params->final.h += 1; + } + else + { + ep->invalidate = EINA_TRUE; + } + } + else if (ABS(params->final.y) + params->final.h > TO_INT(ADD(ABS(params->eval.y), params->eval.h))) + { + if (!ed->calc_only) + { + params->final.h -= 1; + } + else + { + ep->invalidate = EINA_TRUE; + } + } + +} + +static void _edje_part_recalc_single_filter(Edje *ed, Edje_Real_Part *ep, Edje_Part_Description_Common *desc, @@ -3079,54 +3134,7 @@ _edje_part_recalc_single(Edje *ed, params->final.w = TO_INT(params->eval.w); params->final.h = TO_INT(params->eval.h); - /* Adjust rounding to not loose one pixels compared to float - information only when rendering to avoid infinite adjustement - when doing min restricted calc */ - if (ABS(params->final.x) + params->final.w < TO_INT(ADD(ABS(params->eval.x), params->eval.w))) - { - if (!ed->calc_only) - { - params->final.w += 1; - } - else - { - ep->invalidate = EINA_TRUE; - } - } - else if (ABS(params->final.x) + params->final.w > TO_INT(ADD(ABS(params->eval.x), params->eval.w))) - { - if (!ed->calc_only) - { - params->final.w -= 1; - } - else - { - ep->invalidate = EINA_TRUE; - } - } - if (ABS(params->final.y) + params->final.h < TO_INT(ADD(ABS(params->eval.y), params->eval.h))) - { - if (!ed->calc_only) - { - params->final.h += 1; - } - else - { - ep->invalidate = EINA_TRUE; - } - } - else if (ABS(params->final.y) + params->final.h > TO_INT(ADD(ABS(params->eval.y), params->eval.h))) - { - if (!ed->calc_only) - { - params->final.h -= 1; - } - else - { - ep->invalidate = EINA_TRUE; - } - } - + _edje_part_pixel_adjust(ed, ep, params); /* fill */ if (ep->part->type == EDJE_PART_TYPE_IMAGE) _edje_part_recalc_single_fill(ep, &((Edje_Part_Description_Image *)desc)->image.fill, params); @@ -4475,6 +4483,8 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta p3->req.w = INTP(p1->req.w, p2->req.w, pos); p3->req.h = INTP(p1->req.h, p2->req.h, pos); + _edje_part_pixel_adjust(ed, ep, p3); + if (ep->part->dragable.x) { _edje_calc_params_need_ext(p3);