diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2007-10-09 18:05:31 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2007-10-09 18:05:31 +0000 |
| commit | 6d9e847d45c11a15f86e717e30604f7aa954cb5a (patch) | |
| tree | 699695b92c4059f88ef68bffca3a3979f928ae62 /src/marker.cpp | |
| parent | Removed some unnecessarry bounding box updates in sp-item.cpp (diff) | |
| download | inkscape-6d9e847d45c11a15f86e717e30604f7aa954cb5a.tar.gz inkscape-6d9e847d45c11a15f86e717e30604f7aa954cb5a.zip | |
apply John Cliff's patch [ 1743843 ] Create Marker from Selection Menu Item
(bzr r3864)
Diffstat (limited to 'src/marker.cpp')
| -rw-r--r-- | src/marker.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/marker.cpp b/src/marker.cpp index 1fb758462..5cc63d9d7 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -26,6 +26,7 @@ #include "attributes.h" #include "marker.h" #include "document.h" +#include "document-private.h" struct SPMarkerView { SPMarkerView *next; @@ -713,3 +714,37 @@ sp_marker_view_remove (SPMarker *marker, SPMarkerView *view, unsigned int destro } g_free (view); } + +const gchar * +generate_marker (GSList *reprs, NR::Rect bounds, SPDocument *document, NR::Matrix transform, NR::Matrix move) +{ + Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document); + Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document)); + + Inkscape::XML::Node *repr = xml_doc->createElement("svg:marker"); + repr->setAttribute("markerUnits", "userSpaceOnUse"); + sp_repr_set_svg_double(repr, "markerWidth", bounds.extent(NR::X)); + sp_repr_set_svg_double(repr, "markerHeight", bounds.extent(NR::Y)); + + repr->setAttribute("orient", "auto"); + + + defsrepr->appendChild(repr); + const gchar *mark_id = repr->attribute("id"); + SPObject *mark_object = document->getObjectById(mark_id); + + for (GSList *i = reprs; i != NULL; i = i->next) { + Inkscape::XML::Node *node = (Inkscape::XML::Node *)(i->data); + SPItem *copy = SP_ITEM(mark_object->appendChildRepr(node)); + + NR::Matrix dup_transform; + if (!sp_svg_transform_read (node->attribute("transform"), &dup_transform)) + dup_transform = NR::identity(); + dup_transform *= move; + + sp_item_write_transform(copy, SP_OBJECT_REPR(copy), dup_transform); + } + + Inkscape::GC::release(repr); + return mark_id; +} |
