jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=532557cabdd6fd24e62c7756c927230f24ab6b89

commit 532557cabdd6fd24e62c7756c927230f24ab6b89
Author: Vitalii Vorobiov <[email protected]>
Date:   Tue Feb 7 18:59:03 2017 +0200

    vg_loaders/svg: set up default focal values for radialGradient
    
    Since when not specified, focal values same as center points
    fx = cx, fy = cy by default
    
    @fix
---
 src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c | 31 ++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c 
b/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
index 7c19d75a47..4b4913b695 100644
--- a/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
+++ b/src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c
@@ -1560,28 +1560,52 @@ _parse_spread_value(const char *value)
    return spread;
 }
 
+
+/**
+ * Comment SVG_GRADIENT_FX_FY_PARSED
+ *
+ * if "fx" and "fy" is not specified then they are fx==cx and fy==cx
+ * but we should also be careful when during the parsing it would be
+ * something like <radialGradient fx="0" cx="100" cy="100">
+ * so then fx is 0, but fy is 100
+ *
+ * So we need to check if focal was parsed, if not then set up same as center
+ * point.
+ *
+ * It is required to set those public variables back to zero when parsing new
+ * gradient.
+ */
+static Eina_Bool fx_parsed;
+static Eina_Bool fy_parsed;
+
 static void
 _handle_radial_cx_attr(Svg_Radial_Gradient* radial, const char *value)
 {
    radial->cx = _to_double(value);
+   if (!fx_parsed)
+     radial->fx = radial->cx;
 }
 
 static void
 _handle_radial_cy_attr(Svg_Radial_Gradient* radial, const char *value)
 {
    radial->cy = _to_double(value);
+   if (!fy_parsed)
+     radial->fy = radial->cy;
 }
 
 static void
 _handle_radial_fx_attr(Svg_Radial_Gradient* radial, const char *value)
 {
    radial->fx = _to_double(value);
+   fx_parsed = EINA_TRUE;
 }
 
 static void
 _handle_radial_fy_attr(Svg_Radial_Gradient* radial, const char *value)
 {
    radial->fy = _to_double(value);
+   fy_parsed = EINA_TRUE;
 }
 
 static void
@@ -1646,8 +1670,15 @@ _create_radialGradient(const char *buf, unsigned buflen)
 
    grad->type = SVG_RADIAL_GRADIENT;
    grad->radial = calloc(1, sizeof(Svg_Radial_Gradient));
+
+   /**
+    * Please see SVG_GRADIENT_FX_FY_PARSED comment for more info
+    */
+   fx_parsed = EINA_FALSE;
+   fy_parsed = EINA_FALSE;
    eina_simple_xml_attributes_parse(buf, buflen,
                                     _attr_parse_radial_gradient_node, grad);
+
    return grad;
 
 }

-- 


Reply via email to