vg_common: parse and store userSpaceOnUse (for gradient) when it is set
authorVitalii Vorobiov <vi.vorobiov@samsung.com>
Tue, 14 Feb 2017 15:37:27 +0000 (17:37 +0200)
committerJean-Philippe Andre <jp.andre@samsung.com>
Tue, 7 Nov 2017 02:54:09 +0000 (11:54 +0900)
So it can be calculated during the draw later on

src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
src/static_libs/vg_common/vg_common.c
src/static_libs/vg_common/vg_common.h

index 4b4913b..5f7b632 100644 (file)
@@ -1374,6 +1374,7 @@ _clone_gradient(Svg_Style_Gradient *from)
    grad->id = _copy_id(from->id);
    grad->ref = _copy_id(from->ref);
    grad->spread = from->spread;
+   grad->user_space = from->user_space;
    grad->stops = _clone_grad_stops(from->stops);
    if (grad->type == SVG_LINEAR_GRADIENT)
      {
@@ -1659,6 +1660,10 @@ _attr_parse_radial_gradient_node(void *data, const char *key, const char *value)
      {
         grad->ref = _id_from_href(value);
      }
+   else if (!strcmp(key, "gradientUnits") && !strcmp(value, "userSpaceOnUse"))
+     {
+        grad->user_space = EINA_TRUE;
+     }
 
    return EINA_TRUE;
 }
@@ -1777,6 +1782,10 @@ _attr_parse_linear_gradient_node(void *data, const char *key, const char *value)
      {
         grad->ref = _id_from_href(value);
      }
+   else if (!strcmp(key, "gradientUnits") && !strcmp(value, "userSpaceOnUse"))
+     {
+        grad->user_space = EINA_TRUE;
+     }
 
    return EINA_TRUE;
 }
@@ -2185,4 +2194,4 @@ EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_VG_LOADER, vg_loader, svg);
 
 #ifndef EVAS_STATIC_BUILD_VG_SVG
 EVAS_EINA_MODULE_DEFINE(vg_loader, svg);
-#endif
\ No newline at end of file
+#endif
index 4204c73..410588e 100644 (file)
@@ -554,6 +554,11 @@ _apply_gradient_property(Svg_Style_Gradient *g)
    int stop_count = 0, i = 0;
    Eina_List *l;
 
+   /*
+   if (!g->user_space)
+      //get bounding box
+   */
+
    if (g->type == SVG_LINEAR_GRADIENT)
      {
         grad_obj = evas_vg_gradient_linear_add(NULL);
index 70c7449..65c70a8 100644 (file)
@@ -182,6 +182,7 @@ struct _Svg_Style_Gradient
    Eina_Stringshare  *id;
    Eina_Stringshare  *ref;
    Efl_Gfx_Gradient_Spread spread;
+   Eina_Bool user_space;
    Eina_List   *stops; // Efl_Gfx_Gradient_Stop
    Svg_Radial_Gradient *radial;
    Svg_Linear_Gradient *linear;