From 532557cabdd6fd24e62c7756c927230f24ab6b89 Mon Sep 17 00:00:00 2001 From: Vitalii Vorobiov Date: Tue, 7 Feb 2017 18:59:03 +0200 Subject: [PATCH] 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 7c19d75..4b4913b 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 + * 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; } -- 2.7.4