From be9651731c970491aa9aaa93a126203532231e7e Mon Sep 17 00:00:00 2001 From: miklosh Date: Sat, 28 Jul 2007 14:31:25 +0000 Subject: Set top-level groups as layers with the name of the PDF document (bzr r3330) --- src/extension/internal/pdfinput/svg-builder.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/extension/internal/pdfinput/svg-builder.cpp') diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp index f640ded35..b0c6c8fea 100644 --- a/src/extension/internal/pdfinput/svg-builder.cpp +++ b/src/extension/internal/pdfinput/svg-builder.cpp @@ -69,8 +69,9 @@ SvgBuilder::SvgBuilder() { _current_state = NULL; } -SvgBuilder::SvgBuilder(SPDocument *document, XRef *xref) { +SvgBuilder::SvgBuilder(SPDocument *document, gchar *docname, XRef *xref) { _doc = document; + _docname = docname; _xref = xref; _xml_doc = sp_document_repr_doc(_doc); _container = _root = _doc->rroot; @@ -80,6 +81,7 @@ SvgBuilder::SvgBuilder(SPDocument *document, XRef *xref) { SvgBuilder::SvgBuilder(SvgBuilder *parent, Inkscape::XML::Node *root) { _doc = parent->_doc; + _docname = parent->_docname; _xref = parent->_xref; _xml_doc = parent->_xml_doc; _container = this->_root = root; @@ -96,6 +98,16 @@ void SvgBuilder::setDocumentSize(double width, double height) { this->_height = height; } +/** + * \brief Sets groupmode of the current container to 'layer' and sets its label if given + */ +void SvgBuilder::setAsLayer(char *layer_name) { + _container->setAttribute("inkscape:groupmode", "layer"); + if (layer_name) { + _container->setAttribute("inkscape:label", layer_name); + } +} + void SvgBuilder::saveState() { _group_depth.push_back(0); pushGroup(); @@ -114,6 +126,17 @@ Inkscape::XML::Node *SvgBuilder::pushGroup() { _container = node; Inkscape::GC::release(node); _group_depth.back()++; + // Set as a layer if this is a top-level group + if ( _container->parent() == _root ) { + static int layer_count = 1; + if ( layer_count > 1 ) { + gchar *layer_name = g_strdup_printf("%s%d", _docname, layer_count); + setAsLayer(layer_name); + g_free(layer_name); + } else { + setAsLayer(_docname); + } + } return _container; } -- cgit v1.2.3