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);
_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;
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;
}
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);
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);
}