Revert "edje_calc: make INTP use TO_INT_ROUND"

Summary:
This reverts commit be00af9bc3 which has
incorrect calculation. For more information please refer to:

https://phab.enlightenment.org/D8665

Reviewers: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8666
This commit is contained in:
Shinwoo Kim 2019-04-19 17:18:26 +09:00
parent 29b65ccf88
commit e9b2e3c6c3
2 changed files with 11 additions and 30 deletions

View File

@ -2397,29 +2397,12 @@ _edje_filter_get(Edje *ed, Edje_Part_Description_Spec_Filter *filter)
static void static void
_edje_part_pixel_adjust(Edje *ed, _edje_part_pixel_adjust(Edje *ed,
Edje_Real_Part *ep, Edje_Real_Part *ep,
Edje_Calc_Params *params, Edje_Calc_Params *params)
Eina_Bool round)
{ {
int xw, yh, fxw, fyh;
xw = ABS(params->final.x) + params->final.w;
yh = ABS(params->final.y) + params->final.h;
if (round)
{
fxw = TO_INT_ROUND(ADD(ABS(params->eval.x), params->eval.w));
fyh = TO_INT_ROUND(ADD(ABS(params->eval.y), params->eval.h));
}
else
{
fxw = TO_INT(ADD(ABS(params->eval.x), params->eval.w));
fyh = TO_INT(ADD(ABS(params->eval.y), params->eval.h));
}
/* Adjust rounding to not loose one pixels compared to float /* Adjust rounding to not loose one pixels compared to float
information only when rendering to avoid infinite adjustement information only when rendering to avoid infinite adjustement
when doing min restricted calc */ when doing min restricted calc */
if (xw < fxw) if (ABS(params->final.x) + params->final.w < TO_INT(ADD(ABS(params->eval.x), params->eval.w)))
{ {
if (!ed->calc_only) if (!ed->calc_only)
{ {
@ -2430,7 +2413,7 @@ _edje_part_pixel_adjust(Edje *ed,
ep->invalidate = EINA_TRUE; ep->invalidate = EINA_TRUE;
} }
} }
else if (xw > fxw) else if (ABS(params->final.x) + params->final.w > TO_INT(ADD(ABS(params->eval.x), params->eval.w)))
{ {
if (!ed->calc_only) if (!ed->calc_only)
{ {
@ -2441,8 +2424,7 @@ _edje_part_pixel_adjust(Edje *ed,
ep->invalidate = EINA_TRUE; ep->invalidate = EINA_TRUE;
} }
} }
if (ABS(params->final.y) + params->final.h < TO_INT(ADD(ABS(params->eval.y), params->eval.h)))
if (yh < fyh)
{ {
if (!ed->calc_only) if (!ed->calc_only)
{ {
@ -2453,7 +2435,7 @@ _edje_part_pixel_adjust(Edje *ed,
ep->invalidate = EINA_TRUE; ep->invalidate = EINA_TRUE;
} }
} }
else if (yh > fyh) else if (ABS(params->final.y) + params->final.h > TO_INT(ADD(ABS(params->eval.y), params->eval.h)))
{ {
if (!ed->calc_only) if (!ed->calc_only)
{ {
@ -2467,6 +2449,7 @@ _edje_part_pixel_adjust(Edje *ed,
if (params->final.w < 0 || params->final.h < 0) if (params->final.w < 0 || params->final.h < 0)
ERR("The params final size became negative"); ERR("The params final size became negative");
} }
static void static void
@ -3011,7 +2994,7 @@ _edje_part_recalc_single(Edje *ed,
params->final.w = TO_INT(params->eval.w); params->final.w = TO_INT(params->eval.w);
params->final.h = TO_INT(params->eval.h); params->final.h = TO_INT(params->eval.h);
_edje_part_pixel_adjust(ed, ep, params, EINA_FALSE); _edje_part_pixel_adjust(ed, ep, params);
/* fill */ /* fill */
if (ep->part->type == EDJE_PART_TYPE_IMAGE) if (ep->part->type == EDJE_PART_TYPE_IMAGE)
_edje_part_recalc_single_fill(ep, &((Edje_Part_Description_Image *)desc)->image.fill, params); _edje_part_recalc_single_fill(ep, &((Edje_Part_Description_Image *)desc)->image.fill, params);
@ -3473,7 +3456,7 @@ _edje_physics_body_add(Edje *ed, Edje_Real_Part *rp, EPhysics_World *world)
? (_x1) \ ? (_x1) \
: ADD(_x1, MUL(_p, SUB(_x2, _x1)))); : ADD(_x1, MUL(_p, SUB(_x2, _x1))));
#define INTP(_x1, _x2, _p) TO_INT_ROUND(FINTP(_x1, _x2, _p)) #define INTP(_x1, _x2, _p) TO_INT(FINTP(_x1, _x2, _p))
static void static void
_map_colors_free(Edje_Calc_Params *pf) _map_colors_free(Edje_Calc_Params *pf)
@ -4360,7 +4343,7 @@ _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.w = INTP(p1->req.w, p2->req.w, pos);
p3->req.h = INTP(p1->req.h, p2->req.h, pos); p3->req.h = INTP(p1->req.h, p2->req.h, pos);
_edje_part_pixel_adjust(ed, ep, p3, EINA_TRUE); _edje_part_pixel_adjust(ed, ep, p3);
if (ep->part->dragable.x) if (ep->part->dragable.x)
{ {

View File

@ -155,9 +155,7 @@ EAPI extern int _edje_default_log_dom ;
#define FROM_DOUBLE(a) eina_f32p32_double_from(a) #define FROM_DOUBLE(a) eina_f32p32_double_from(a)
#define FROM_INT(a) eina_f32p32_int_from(a) #define FROM_INT(a) eina_f32p32_int_from(a)
#define TO_INT(a) eina_f32p32_int_to(a) #define TO_INT(a) eina_f32p32_int_to(a)
#define TO_INT_ROUND(a) (((a) >= 0.0) \ #define TO_INT_ROUND(a) eina_f32p32_int_to(ADD(a, FROM_DOUBLE(0.5)))
? eina_f32p32_int_to(ADD(a, FROM_DOUBLE(0.5)) \
: eina_f32p32_int_to(ADD(a, FROM_DOUBLE(-0.5))
#define ZERO 0 #define ZERO 0
#define COS(a) eina_f32p32_cos(a) #define COS(a) eina_f32p32_cos(a)
#define SIN(a) eina_f32p32_sin(a) #define SIN(a) eina_f32p32_sin(a)
@ -180,7 +178,7 @@ EAPI extern int _edje_default_log_dom ;
#define FROM_DOUBLE(a) (a) #define FROM_DOUBLE(a) (a)
#define FROM_INT(a) (double)(a) #define FROM_INT(a) (double)(a)
#define TO_INT(a) (int)(a) #define TO_INT(a) (int)(a)
#define TO_INT_ROUND(a) (((a) >= 0.0) ? (int)(a + 0.5) : (int)(a - 0.5)) #define TO_INT_ROUND(a) (int)(a + 0.5)
#define ZERO 0.0 #define ZERO 0.0
#define COS(a) cos(a) #define COS(a) cos(a)
#define SIN(a) sin(a) #define SIN(a) sin(a)