svg: backported from opensource 52/87452/2
authorSubhransu Mohanty <sub.mohanty@samsung.com>
Wed, 7 Sep 2016 11:47:01 +0000 (20:47 +0900)
committerSubhransu Mohanty <sub.mohanty@samsung.com>
Mon, 26 Sep 2016 00:52:37 +0000 (17:52 -0700)
fix for aspectratio
fix for updating vg object

Change-Id: Iaf96240626857a66d5ff6911e365bd7fc3d2beab

src/bin/edje/edje_svg_loader.c
src/lib/evas/canvas/evas_object_vg.c
src/lib/evas/vg/evas_vg_common.h
src/lib/evas/vg/evas_vg_eet_handler.c

index f556d7d..65e2558 100644 (file)
@@ -686,6 +686,11 @@ _attr_parse_svg_node(void *data, const char *key, const char *value)
             if (_parse_number(&value, &doc->vw))
               _parse_number(&value, &doc->vh);
      }
+   else if (!strcmp(key, "preserveAspectRatio"))
+     {
+        if (!strcmp(value, "none"))
+          doc->preserve_aspect = EINA_FALSE;
+     }
    else if (!strcmp(key, "style"))
      {
         _attr_style_node(node, value);
@@ -934,7 +939,9 @@ static Svg_Node *
 _create_svg_node(Svg_Node *parent, const char *buf, unsigned buflen)
 {
    Svg_Node *node = _create_node(parent, SVG_NODE_DOC);
+   Svg_Doc_Node *doc = &(node->node.doc);
 
+   doc->preserve_aspect = EINA_TRUE;
    eina_simple_xml_attributes_parse(buf, buflen,
                                     _attr_parse_svg_node, node);
    return node;
index 9c1d912..44880f0 100644 (file)
@@ -113,6 +113,7 @@ evas_object_vg_path_set(Eo *obj, const char *path, int src_vg,
           }
         pd->svg = entry;
      }
+   evas_object_change(obj, efl_data_scope_get(obj, EFL_CANVAS_OBJECT_CLASS));
 }
 
 Efl_VG *
index d9ddf0b..aa6bb70 100644 (file)
@@ -110,6 +110,7 @@ struct _Svg_Doc_Node
    double vy;
    double vw;
    double vh;
+   Eina_Bool preserve_aspect;
    Svg_Node *defs;
 };
 
index 30a8d6c..9132c2f 100644 (file)
@@ -243,6 +243,7 @@ _eet_for_doc_node(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(eet, Svg_Doc_Node, "vy", vy, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(eet, Svg_Doc_Node, "vw", vw, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(eet, Svg_Doc_Node, "vh", vh, EET_T_DOUBLE);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(eet, Svg_Doc_Node, "preserve_aspect", preserve_aspect, EET_T_INT);
    return eet;
 }
 
@@ -701,6 +702,7 @@ _evas_vg_load_vg_data(Eina_Stringshare *path, int svg_id)
         vector->y = node->node.doc.vy;
         vector->w = node->node.doc.vw;
         vector->h = node->node.doc.vh;
+        vector->preserve_aspect = node->node.doc.preserve_aspect;
      }
    vector->vg = root;
    _evas_vg_svg_node_free(node);
@@ -721,9 +723,17 @@ _apply_transformation(Efl_VG *root, double w, double h, Vg_Data *vg_data)
    eina_matrix3_identity(&m);
    // allign hcenter and vcenter
    //@TODO take care of the preserveaspectratio attribute
-   eina_matrix3_translate(&m, (w - vg_data->w * scale)/2.0, (h - vg_data->h * scale)/2.0);
-   eina_matrix3_scale(&m, scale, scale);
-   eina_matrix3_translate(&m, -vg_data->x, -vg_data->y);
+   if (vg_data->preserve_aspect)
+     {
+        eina_matrix3_translate(&m, (w - vg_data->w * scale)/2.0, (h - vg_data->h * scale)/2.0);
+        eina_matrix3_scale(&m, scale, scale);
+        eina_matrix3_translate(&m, -vg_data->x, -vg_data->y);
+     }
+   else
+     {
+        eina_matrix3_scale(&m, sx, sy);
+        eina_matrix3_translate(&m, -vg_data->x, -vg_data->y);
+     }
    evas_vg_node_transformation_set(root, &m);
    _apply_stroke_scale(root, scale);
 }