hermet pushed a commit to branch master.

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

commit e850e3e5dcbd1080a6e879f67ede1533632dade1
Author: JunsuChoi <jsuya.c...@samsung.com>
Date:   Tue Aug 20 20:32:15 2019 +0900

    evas_vg_load_svg: Support "display" attribute.
    
    Summary:
    If the display attribute is "none", VG object is not show.
    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
    
    Test Plan:
    [SVG]
    <svg viewBox="0 0 220 100" xmlns="http://www.w3.org/2000/svg";>
      <!-- Here the yellow rectangle is displayed -->
      <g display="none">
        <rect x="0" y="0" width="100" height="100" fill="skyblue"></rect>
      </g>
      <rect x="20" y="20" width="60" height="60" fill="yellow"></rect>
    
      <!-- Here the yellow rectangle is not displayed -->
      <rect x="120" y="0" width="100" height="100" fill="skyblue"></rect>
      <rect x="140" y="20" width="60" height="60" fill="yellow" 
display="none"></rect>
    </svg>
    
    [C CODE]
    int main(int argc, char **argv)
    {
       setenv("ECTOR_BACKEND", "default", 1);
       elm_init(argc, argv);
    
       Evas_Object *win = elm_win_util_standard_add(NULL, "test");
       evas_object_smart_callback_add(win, "delete,request", win_del, 0);
       elm_win_autodel_set(win, 1);
    
       Evas *evas = evas_object_evas_get(win);
    
       Evas_Object *vg = evas_object_vg_add(evas);
       evas_object_show(vg);
       Evas_Object *container = evas_vg_container_add(vg);
       evas_object_vg_root_node_set(vg, container);
    
       Evas_Object *svg = efl_add(EFL_CANVAS_VG_OBJECT_CLASS, container);
       efl_file_simple_load(svg, "./test.svg", NULL);
       efl_gfx_entity_size_set(svg, EINA_SIZE2D(600, 600));
       efl_gfx_entity_visible_set(svg, EINA_TRUE);
       evas_object_size_hint_weight_set(svg, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
       evas_object_size_hint_align_set(svg, EVAS_HINT_FILL, EVAS_HINT_FILL);
    
       elm_win_resize_object_add(win, vg);
       evas_object_resize(win, WIDTH, HEIGHT);
       evas_object_show(win);
       elm_run();
       elm_shutdown();
       return 0;
    }
    
    Reviewers: Hermet, smohanty, kimcinoo
    
    Reviewed By: Hermet
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D9640
---
 src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c | 16 +++++++++++++++-
 src/static_libs/vg_common/vg_common.h              |  1 +
 src/static_libs/vg_common/vg_common_svg.c          |  3 +++
 3 files changed, 19 insertions(+), 1 deletion(-)

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

-- 


Reply via email to