Exemplo n.º 1
0
svg_status_t
_svg_group_apply_use_attributes (svg_element_t		*group,
				 const char		**attributes)
{
    const char *href;
    svg_element_t *ref;
    svg_element_t *clone;
    svgint_status_t status = SVG_STATUS_SUCCESS;

    _svg_attribute_get_string (attributes, "xlink:href", &href, "");
    _svg_fetch_element_by_id (group->doc, href + 1, &ref);
    if (!ref) {
	/* XXX: Should we report an error here? */
	return SVG_STATUS_SUCCESS;
    }

    _svg_attribute_get_length (attributes, "width", &group->e.group.width, "100%");
    _svg_attribute_get_length (attributes, "height", &group->e.group.height, "100%");

    clone = ref;
    _svg_element_reference(ref);
    
    if (status)
	return status;
    if (clone)
    {
	_svg_group_add_element (&group->e.group, clone);
    }

    return SVG_STATUS_SUCCESS;
}
Exemplo n.º 2
0
static svg_status_t
_svg_parser_new_svg_group_element (svg_parser_t *parser, svg_element_t **group_element)
{
    svg_status_t status;
    svg_element_t *parent;

    parent = parser->state->group_element;

    status = _svg_element_create (group_element,
								  SVG_ELEMENT_TYPE_SVG_GROUP,
								  parent,
								  parser->svg);
    if (status)
	    return status;

    if (parent) {
		status = _svg_group_add_element (&parent->e.group, *group_element);
    } else {
		_svg_style_init_defaults (&(*group_element)->style, parser->svg);
		parser->svg->group_element = *group_element;
    }

    parser->state->group_element = *group_element;

    return status;
}
Exemplo n.º 3
0
svg_status_t _svg_group_init_copy (svg_group_t *group,
				   svg_group_t *other) {
	svg_status_t status;
	svg_element_t *clone;
	int i;
	group->element = NULL;
	group->num_elements = 0;
	group->element_size = 0;
	
	/* clone children */
	for (i=0; i < other->num_elements; i++) {
		status = _svg_element_clone (NULL, &clone, other->element[i]);
		if (status)
			return status;
		status = _svg_group_add_element (group, clone);
		if (status)
			return status;

		// point the parent correctly
		svg_element_t *group_e = container_of(group, svg_element_t, e.group);
		clone->parent = group_e;
	}
	
	group->width  = other->width;
	group->height = other->height;
	
	group->view_box = other->view_box;
	
	group->x = other->x;
	group->y = other->y;
	
	return SVG_STATUS_SUCCESS;
}
Exemplo n.º 4
0
static svg_status_t
_svg_parser_new_leaf_element (svg_parser_t *parser,
			      svg_element_t **child_element,
			      svg_element_type_t type)
{
    svg_status_t status;

    status = _svg_element_create (child_element, type,
				  parser->state->group_element,
				  parser->svg);
    if (status)
		return status;

    status = _svg_group_add_element (&parser->state->group_element->e.group,
				     *child_element);
    if (status)
		return status;

    return SVG_STATUS_SUCCESS;
}