summaryrefslogtreecommitdiffstats
path: root/src/sp-shape.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-shape.cpp')
-rw-r--r--src/sp-shape.cpp47
1 files changed, 42 insertions, 5 deletions
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index 6d240fbf5..16f9ec13b 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -126,6 +126,7 @@ Inkscape::XML::Node* SPShape::write(Inkscape::XML::Document *xml_doc, Inkscape::
}
void SPShape::update(SPCtx* ctx, guint flags) {
+ // std::cout << "SPShape::update(): " << (getId()?getId():"null") << std::endl;
SPLPEItem::update(ctx, flags);
/* This stanza checks that an object's marker style agrees with
@@ -145,7 +146,15 @@ void SPShape::update(SPCtx* ctx, guint flags) {
for (SPItemView *v = ((SPItem *) (this))->display; v != NULL; v = v->next) {
Inkscape::DrawingShape *sh = dynamic_cast<Inkscape::DrawingShape *>(v->arenaitem);
- sh->setStyle(this->style);
+ if (hasMarkers()) {
+ this->context_style = this->style;
+ sh->setStyle(this->style, this->context_style);
+ // Done at end:
+ // sh->setChildrenStyle(this->context_style); //Resolve 'context-xxx' in children.
+ } else if (this->parent) {
+ this->context_style = this->parent->context_style;
+ sh->setStyle(this->style, this->context_style);
+ }
}
}
}
@@ -163,6 +172,7 @@ void SPShape::update(SPCtx* ctx, guint flags) {
}
if (this->hasMarkers ()) {
+
/* Dimension marker views */
for (SPItemView *v = this->display; v != NULL; v = v->next) {
if (!v->arenaitem->key()) {
@@ -182,6 +192,13 @@ void SPShape::update(SPCtx* ctx, guint flags) {
for (SPItemView *v = this->display; v != NULL; v = v->next) {
sp_shape_update_marker_view (this, v->arenaitem);
}
+
+ // Marker selector needs this here or marker previews are not rendered.
+ for (SPItemView *v = this->display; v != NULL; v = v->next) {
+ Inkscape::DrawingShape *sh = dynamic_cast<Inkscape::DrawingShape *>(v->arenaitem);
+
+ sh->setChildrenStyle(this->context_style); // Resolve 'context-xxx' in children.
+ }
}
}
@@ -382,12 +399,23 @@ sp_shape_update_marker_view(SPShape *shape, Inkscape::DrawingItem *ai)
}
void SPShape::modified(unsigned int flags) {
+ // std::cout << "SPShape::modified(): " << (getId()?getId():"null") << std::endl;
SPLPEItem::modified(flags);
if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) {
for (SPItemView *v = this->display; v != NULL; v = v->next) {
Inkscape::DrawingShape *sh = dynamic_cast<Inkscape::DrawingShape *>(v->arenaitem);
- sh->setStyle(this->style);
+ if (hasMarkers()) {
+ this->context_style = this->style;
+ sh->setStyle(this->style, this->context_style);
+ // Note: marker selector preview does not trigger SP_OBJECT_STYLE_MODIFIED_FLAG so
+ // this is not called when marker previews are generated, however there is code in
+ // SPShape::update() that calls this routine so we don't worry about it here.
+ sh->setChildrenStyle(this->context_style); // Resolve 'context-xxx' in children.
+ } else if (this->parent) {
+ this->context_style = this->parent->context_style;
+ sh->setStyle(this->style, this->context_style);
+ }
}
}
}
@@ -718,8 +746,11 @@ void SPShape::print(SPPrintContext* ctx) {
}
Inkscape::DrawingItem* SPShape::show(Inkscape::Drawing &drawing, unsigned int /*key*/, unsigned int /*flags*/) {
+ // std::cout << "SPShape::show(): " << (getId()?getId():"null") << std::endl;
Inkscape::DrawingShape *s = new Inkscape::DrawingShape(drawing);
- s->setStyle(this->style);
+
+ bool has_markers = this->hasMarkers();
+
s->setPath(this->_curve);
/* This stanza checks that an object's marker style agrees with
@@ -731,7 +762,7 @@ Inkscape::DrawingItem* SPShape::show(Inkscape::Drawing &drawing, unsigned int /*
sp_shape_set_marker (this, i, this->style->marker_ptrs[i]->value);
}
- if (this->hasMarkers ()) {
+ if (has_markers) {
/* provide key and dimension the marker views */
if (!s->key()) {
s->setKey(SPItem::display_key_new (SP_MARKER_LOC_QTY));
@@ -747,8 +778,14 @@ Inkscape::DrawingItem* SPShape::show(Inkscape::Drawing &drawing, unsigned int /*
/* Update marker views */
sp_shape_update_marker_view (this, s);
- }
+ this->context_style = this->style;
+ s->setStyle(this->style, this->context_style);
+ s->setChildrenStyle(this->context_style); // Resolve 'context-xxx' in children.
+ } else if (this->parent) {
+ this->context_style = this->parent->context_style;
+ s->setStyle(this->style, this->context_style);
+ }
return s;
}