evas vg: gradient and fill required un/premultiplication of colors 26/255626/1
authorMira Grudzinska <m.grudzinska@samsung.com>
Sun, 21 Mar 2021 16:19:56 +0000 (17:19 +0100)
committerMira Grudzinska <m.grudzinska@samsung.com>
Sun, 21 Mar 2021 16:19:56 +0000 (17:19 +0100)
ThorVG expects not premultiplied colors, Evas premultiplied.
The compliance has been assured.

Change-Id: Id645ae3220a94d1ee737bdd903648ea22c2448e2

src/lib/evas/canvas/efl_canvas_vg_gradient.c
src/lib/evas/canvas/efl_canvas_vg_shape.c

index 2f93211..427656a 100644 (file)
@@ -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
index ff3b556..f314c83 100644 (file)
@@ -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))