diff options
| author | John Smith <john.smith7545@yahoo.com> | 2012-09-17 23:44:30 +0000 |
|---|---|---|
| committer | John Smith <john.smith7545@yahoo.com> | 2012-09-17 23:44:30 +0000 |
| commit | 979d809bbbe2d3ed1fc5a296c8f99f5d8c395f4b (patch) | |
| tree | 23aacc7cf2cfbbca969ecc36207a9c73cbea6d58 /src/marker.cpp | |
| parent | fix typo in marker bbox calculation (Bug 1051131) (diff) | |
| download | inkscape-979d809bbbe2d3ed1fc5a296c8f99f5d8c395f4b.tar.gz inkscape-979d809bbbe2d3ed1fc5a296c8f99f5d8c395f4b.zip | |
Fix for 165865 : Fix marker color on duplicate
(bzr r11671)
Diffstat (limited to 'src/marker.cpp')
| -rw-r--r-- | src/marker.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/marker.cpp b/src/marker.cpp index a5681e180..45582caa4 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -27,6 +27,7 @@ #include "marker.h" #include "document.h" #include "document-private.h" +#include "preferences.h" struct SPMarkerView { SPMarkerView *next; @@ -727,6 +728,38 @@ const gchar *generate_marker(GSList *reprs, Geom::Rect bounds, SPDocument *docum return mark_id; } +SPObject *sp_marker_fork_if_necessary(SPObject *marker) +{ + if (marker->hrefcount < 2) { + return marker; + } + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + gboolean colorStock = prefs->getBool("/options/markers/colorStockMarkers", true); + gboolean colorCustom = prefs->getBool("/options/markers/colorCustomMarkers", false); + const gchar *stock = marker->getRepr()->attribute("inkscape:isstock"); + gboolean isStock = (!stock || !strcmp(stock,"true")); + + if (isStock ? !colorStock : !colorCustom) { + return marker; + } + + SPDocument *doc = marker->document; + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); + // Turn off garbage-collectable or it might be collected before we can use it + marker->getRepr()->setAttribute("inkscape:collect", NULL); + Inkscape::XML::Node *mark_repr = marker->getRepr()->duplicate(xml_doc); + doc->getDefs()->getRepr()->addChild(mark_repr, NULL); + if (!mark_repr->attribute("inkscape:stockid")) { + mark_repr->setAttribute("inkscape:stockid", mark_repr->attribute("id")); + } + marker->getRepr()->setAttribute("inkscape:collect", "always"); + + SPObject *marker_new = static_cast<SPObject *>(doc->getObjectByRepr(mark_repr)); + Inkscape::GC::release(mark_repr); + return marker_new; +} + /* Local Variables: mode:c++ |
