From: Mira Grudzinska Date: Sun, 21 Mar 2021 16:19:56 +0000 (+0100) Subject: evas vg: gradient and fill required un/premultiplication of colors X-Git-Tag: accepted/tizen/unified/20210330.111316~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=28182078d498072d8ae0a8d198efa8472ad0b659;p=platform%2Fupstream%2Fefl.git evas vg: gradient and fill required un/premultiplication of colors ThorVG expects not premultiplied colors, Evas premultiplied. The compliance has been assured. Change-Id: Id645ae3220a94d1ee737bdd903648ea22c2448e2 --- diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient.c b/src/lib/evas/canvas/efl_canvas_vg_gradient.c index 2f93211..427656a 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_gradient.c +++ b/src/lib/evas/canvas/efl_canvas_vg_gradient.c @@ -24,10 +24,17 @@ _gradient_stop_set(Evas_Vg_Gradient *obj, const Efl_Gfx_Gradient_Stop *colors, u for (i = 0; i < length; ++i) { color_stops[i].offset = colors[i].offset; - color_stops[i].r = colors[i].r; - color_stops[i].g = colors[i].g; - color_stops[i].b = colors[i].b; - color_stops[i].a = colors[i].a; + + int r, g, b, a; + r = colors[i].r; + g = colors[i].g; + b = colors[i].b; + a = colors[i].a; + evas_color_argb_unpremul(a, &r, &g, &b); + color_stops[i].r = (uint8_t)r; + color_stops[i].g = (uint8_t)g; + color_stops[i].b = (uint8_t)b; + color_stops[i].a = (uint8_t)a; } tvg_gradient_set_color_stops(gd->gradient, color_stops, length); @@ -59,6 +66,7 @@ _gradient_stop_get(Evas_Vg_Gradient *obj, Efl_Gfx_Gradient_Stop **colors, unsign (*colors)[i].r = stop[i].r; (*colors)[i].g = stop[i].g; (*colors)[i].b = stop[i].b; + evas_color_argb_premul((*colors)[i].a, &(*colors)[i].r, &(*colors)[i].g, &(*colors)[i].b); } } #endif diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape.c b/src/lib/evas/canvas/efl_canvas_vg_shape.c index ff3b556..f314c83 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_shape.c +++ b/src/lib/evas/canvas/efl_canvas_vg_shape.c @@ -683,6 +683,7 @@ _efl_canvas_vg_shape_render_pre_tvg(EINA_UNUSED Evas_Object_Protected_Data *vg_p if (!sd->fill) { efl_gfx_color_get(obj, &r, &g, &b, &a); + evas_color_argb_unpremul(a, &r, &g, &b); tvg_shape_set_fill_color(sd->shape, r, g, b, a); } else if (efl_isa(sd->fill, EFL_CANVAS_VG_GRADIENT_CLASS))