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 82e6fc9df0..c277ee9d26 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 @@ -911,6 +911,16 @@ _handle_transform_attr(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node* node, cons node->transform = _parse_transformation_matrix(value); } +static void +_handle_display_attr(Evas_SVG_Loader *loader EINA_UNUSED, Svg_Node* node, const char *value) +{ + //TODO : The display attribute can have various values as well as "none". + // The default is "inline" which means visible and "none" means invisible. + // Depending on the type of node, additional functionality may be required. + // refer to https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/display + if (!strcmp(value, "none")) node->display = EINA_FALSE; + else node->display = EINA_TRUE; +} typedef void (*Style_Method)(Evas_SVG_Loader *loader, Svg_Node *node, const char *value); @@ -932,7 +942,8 @@ static const struct { STYLE_DEF(stroke-linejoin, stroke_linejoin), STYLE_DEF(stroke-linecap, stroke_linecap), STYLE_DEF(stroke-opacity, stroke_opacity), - STYLE_DEF(transform, transform) + STYLE_DEF(transform, transform), + STYLE_DEF(display, display) }; static Eina_Bool @@ -1030,6 +1041,9 @@ _create_node(Svg_Node *parent, Svg_Node_Type type) node->style->stroke.join = EFL_GFX_JOIN_MITER; node->style->stroke.scale = 1.0; + // default display is true("inline"). + node->display = EINA_TRUE; + node->parent = parent; node->type = type; node->child = NULL; diff --git a/src/static_libs/vg_common/vg_common.h b/src/static_libs/vg_common/vg_common.h index 731a8d2796..520fcdbfd6 100644 --- a/src/static_libs/vg_common/vg_common.h +++ b/src/static_libs/vg_common/vg_common.h @@ -283,6 +283,7 @@ struct _Svg_Node Eina_Stringshare *id; Svg_Style_Property *style; Eina_Matrix3 *transform; + Eina_Bool display; union { Svg_G_Node g; diff --git a/src/static_libs/vg_common/vg_common_svg.c b/src/static_libs/vg_common/vg_common_svg.c index d15e753cc0..4f96bec9aa 100644 --- a/src/static_libs/vg_common/vg_common_svg.c +++ b/src/static_libs/vg_common/vg_common_svg.c @@ -441,6 +441,7 @@ vg_common_svg_node_eet(void) EET_DATA_DESCRIPTOR_ADD_BASIC(_eet_vg_node, Svg_Node, "id", id, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_SUB(_eet_vg_node, Svg_Node, "style", style, _eet_style_property_node); EET_DATA_DESCRIPTOR_ADD_SUB(_eet_vg_node, Svg_Node, "transform", transform, _eet_matrix3_node); + EET_DATA_DESCRIPTOR_ADD_BASIC(_eet_vg_node, Svg_Node, "display", display, EET_T_INT); return _eet_vg_node; } @@ -715,6 +716,8 @@ _apply_vg_property(Svg_Node *node, Efl_VG *vg, Efl_VG *parent, Vg_File_Data *vg_ // apply the transformation if (node->transform) efl_canvas_vg_node_transformation_set(vg, node->transform); + if (!node->display) efl_gfx_entity_visible_set(vg, EINA_FALSE); + if ((node->type == SVG_NODE_G) || (node->type == SVG_NODE_DOC)) return; // apply the fill style property