From 979d809bbbe2d3ed1fc5a296c8f99f5d8c395f4b Mon Sep 17 00:00:00 2001 From: John Smith Date: Tue, 18 Sep 2012 08:44:30 +0900 Subject: Fix for 165865 : Fix marker color on duplicate (bzr r11671) --- src/marker.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/marker.cpp') 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(doc->getObjectByRepr(mark_repr)); + Inkscape::GC::release(mark_repr); + return marker_new; +} + /* Local Variables: mode:c++ -- cgit v1.2.3 From f2907ae896ed8688e800519310b61754550f27f6 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sun, 11 Nov 2012 14:17:53 +0000 Subject: SPObject: drop sp_object_ prefix on class members (bzr r11869) --- src/marker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/marker.cpp') diff --git a/src/marker.cpp b/src/marker.cpp index 45582caa4..8acac805b 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -119,7 +119,7 @@ sp_marker_init (SPMarker *marker) * parent class' build routine to attach the object to its document and * repr. The result will be creation of the whole document tree. * - * \see sp_object_build() + * \see SPObject::build() */ static void sp_marker_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { @@ -147,7 +147,7 @@ static void sp_marker_build(SPObject *object, SPDocument *document, Inkscape::XM * and release its SPRepr bindings. The result will be the destruction * of the entire document tree. * - * \see sp_object_release() + * \see SPObject::release() */ static void sp_marker_release(SPObject *object) { -- cgit v1.2.3 From d5640b0cc2463ee3470d18891fbd8304ba3339ee Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 24 Jan 2013 11:43:26 +0000 Subject: More GObject boilerplate cleanup (bzr r12059) --- src/marker.cpp | 76 +++++++++++++++++++--------------------------------------- 1 file changed, 24 insertions(+), 52 deletions(-) (limited to 'src/marker.cpp') diff --git a/src/marker.cpp b/src/marker.cpp index 8acac805b..ba5cd4b05 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -35,9 +35,6 @@ struct SPMarkerView { std::vector items; }; -static void sp_marker_class_init (SPMarkerClass *klass); -static void sp_marker_init (SPMarker *marker); - static void sp_marker_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); static void sp_marker_release (SPObject *object); static void sp_marker_set (SPObject *object, unsigned int key, const gchar *value); @@ -51,30 +48,7 @@ static void sp_marker_print (SPItem *item, SPPrintContext *ctx); static void sp_marker_view_remove (SPMarker *marker, SPMarkerView *view, unsigned int destroyitems); -static SPGroupClass *parent_class = 0; - -/** - * Registers the SPMarker class with Gdk and returns its type number. - */ -GType -sp_marker_get_type (void) -{ - static GType type = 0; - if (!type) { - GTypeInfo info = { - sizeof (SPMarkerClass), - NULL, NULL, - (GClassInitFunc) sp_marker_class_init, - NULL, NULL, - sizeof (SPMarker), - 16, - (GInstanceInitFunc) sp_marker_init, - NULL, /* value_table */ - }; - type = g_type_register_static (SP_TYPE_GROUP, "SPMarker", &info, (GTypeFlags)0); - } - return type; -} +G_DEFINE_TYPE(SPMarker, sp_marker, SP_TYPE_GROUP); /** * Initializes a SPMarkerClass object. Establishes the function pointers to the class' @@ -85,18 +59,16 @@ static void sp_marker_class_init(SPMarkerClass *klass) SPObjectClass *sp_object_class = reinterpret_cast(klass); SPItemClass *sp_item_class = reinterpret_cast(klass); - parent_class = reinterpret_cast(g_type_class_ref(SP_TYPE_GROUP)); - - sp_object_class->build = sp_marker_build; - sp_object_class->release = sp_marker_release; - sp_object_class->set = sp_marker_set; - sp_object_class->update = sp_marker_update; - sp_object_class->write = sp_marker_write; + sp_object_class->build = sp_marker_build; + sp_object_class->release = sp_marker_release; + sp_object_class->set = sp_marker_set; + sp_object_class->update = sp_marker_update; + sp_object_class->write = sp_marker_write; - sp_item_class->show = sp_marker_private_show; - sp_item_class->hide = sp_marker_private_hide; - sp_item_class->bbox = sp_marker_bbox; - sp_item_class->print = sp_marker_print; + sp_item_class->show = sp_marker_private_show; + sp_item_class->hide = sp_marker_private_hide; + sp_item_class->bbox = sp_marker_bbox; + sp_item_class->print = sp_marker_print; } /** @@ -132,8 +104,8 @@ static void sp_marker_build(SPObject *object, SPDocument *document, Inkscape::XM object->readAttr( "viewBox" ); object->readAttr( "preserveAspectRatio" ); - if (reinterpret_cast(parent_class)->build) { - reinterpret_cast(parent_class)->build(object, document, repr); + if (reinterpret_cast(sp_marker_parent_class)->build) { + reinterpret_cast(sp_marker_parent_class)->build(object, document, repr); } } @@ -156,12 +128,12 @@ static void sp_marker_release(SPObject *object) while (marker->views) { // Destroy all DrawingItems etc. // Parent class ::hide method - reinterpret_cast(parent_class)->hide(marker, marker->views->key); + reinterpret_cast(sp_marker_parent_class)->hide(marker, marker->views->key); sp_marker_view_remove (marker, marker->views, TRUE); } - if (reinterpret_cast(parent_class)->release) { - reinterpret_cast(parent_class)->release(object); + if (reinterpret_cast(sp_marker_parent_class)->release) { + reinterpret_cast(sp_marker_parent_class)->release(object); } } @@ -311,8 +283,8 @@ static void sp_marker_set(SPObject *object, unsigned int key, const gchar *value } break; default: - if (((SPObjectClass *) parent_class)->set) - ((SPObjectClass *) parent_class)->set (object, key, value); + if (((SPObjectClass *) sp_marker_parent_class)->set) + ((SPObjectClass *) sp_marker_parent_class)->set (object, key, value); break; } } @@ -430,8 +402,8 @@ static void sp_marker_update(SPObject *object, SPCtx *ctx, guint flags) } // And invoke parent method - if (((SPObjectClass *) (parent_class))->update) { - ((SPObjectClass *) (parent_class))->update (object, (SPCtx *) &rctx, flags); + if (((SPObjectClass *) (sp_marker_parent_class))->update) { + ((SPObjectClass *) (sp_marker_parent_class))->update (object, (SPCtx *) &rctx, flags); } // As last step set additional transform of drawing group @@ -503,8 +475,8 @@ sp_marker_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::X //XML Tree being used directly here while it shouldn't be.... repr->setAttribute("preserveAspectRatio", object->getRepr()->attribute("preserveAspectRatio")); - if (((SPObjectClass *) (parent_class))->write) - ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags); + if (((SPObjectClass *) (sp_marker_parent_class))->write) + ((SPObjectClass *) (sp_marker_parent_class))->write (object, xml_doc, repr, flags); return repr; } @@ -572,7 +544,7 @@ sp_marker_show_dimension (SPMarker *marker, unsigned int key, unsigned int size) if (view && (view->items.size() != size)) { /* Free old view and allocate new */ /* Parent class ::hide method */ - ((SPItemClass *) parent_class)->hide ((SPItem *) marker, key); + ((SPItemClass *) sp_marker_parent_class)->hide ((SPItem *) marker, key); sp_marker_view_remove (marker, view, TRUE); view = NULL; } @@ -611,7 +583,7 @@ sp_marker_show_instance ( SPMarker *marker, Inkscape::DrawingItem *parent, } if (!v->items[pos]) { /* Parent class ::show method */ - v->items[pos] = ((SPItemClass *) parent_class)->show ((SPItem *) marker, + v->items[pos] = ((SPItemClass *) sp_marker_parent_class)->show ((SPItem *) marker, parent->drawing(), key, SP_ITEM_REFERENCE_FLAGS); if (v->items[pos]) { @@ -658,7 +630,7 @@ sp_marker_hide (SPMarker *marker, unsigned int key) next = v->next; if (v->key == key) { /* Parent class ::hide method */ - ((SPItemClass *) parent_class)->hide ((SPItem *) marker, key); + ((SPItemClass *) sp_marker_parent_class)->hide ((SPItem *) marker, key); sp_marker_view_remove (marker, v, TRUE); return; } -- cgit v1.2.3 From 27732efd761b727c736829b13492ef33fc41199d Mon Sep 17 00:00:00 2001 From: Kris De Gussem Date: Sat, 16 Mar 2013 18:17:57 +0100 Subject: fix/suppress build warnings (bzr r12215) --- src/marker.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/marker.cpp') diff --git a/src/marker.cpp b/src/marker.cpp index ba5cd4b05..9717160ed 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -324,13 +324,13 @@ static void sp_marker_update(SPObject *object, SPCtx *ctx, guint flags) // Now set up viewbox transformation // Determine actual viewbox in viewport coordinates - double x = 0; - double y = 0; + // double x = 0; + // double y = 0; double width = 0; double height = 0; if (marker->aspect_align == SP_ASPECT_NONE) { - x = 0.0; - y = 0.0; + // x = 0.0; + // y = 0.0; width = rctx.viewport.width(); height = rctx.viewport.height(); } else { @@ -343,7 +343,7 @@ static void sp_marker_update(SPObject *object, SPCtx *ctx, guint flags) height = (vb.height()) * scale; // Now place viewbox to requested position - switch (marker->aspect_align) { + /*switch (marker->aspect_align) { case SP_ASPECT_XMIN_YMIN: x = 0.0; y = 0.0; @@ -384,7 +384,7 @@ static void sp_marker_update(SPObject *object, SPCtx *ctx, guint flags) x = 0.0; y = 0.0; break; - } + }*/ } // TODO fixme: all that work is done to figure out x and y, which are just ignored. Check why. -- cgit v1.2.3 From 152c4d581e6dcb5185cbd9886a80cd7dc5e27c8e Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Mon, 18 Mar 2013 12:42:20 +0000 Subject: Fix -Wcast-align issues with SPItemCtx (bzr r12222) --- src/marker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/marker.cpp') diff --git a/src/marker.cpp b/src/marker.cpp index 9717160ed..b3b493b00 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -301,7 +301,7 @@ static void sp_marker_update(SPObject *object, SPCtx *ctx, guint flags) // fixme: We have to set up clip here too // Copy parent context - rctx.ctx = *ctx; + rctx.flags = ctx->flags; // Initialize tranformations rctx.i2doc = Geom::identity(); -- cgit v1.2.3