summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-renderer.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-08-08 21:26:52 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-08-08 21:26:52 +0000
commitbf26bf75f19dce927a76cb9f1a0fdb3b4e350d14 (patch)
tree95ad5cbe1ded91e738778e13aa2002a29b510757 /src/extension/internal/cairo-renderer.cpp
parentupdate 2geom to rev1516 (diff)
downloadinkscape-bf26bf75f19dce927a76cb9f1a0fdb3b4e350d14.tar.gz
inkscape-bf26bf75f19dce927a76cb9f1a0fdb3b4e350d14.zip
fix marker behavior for moveto-only paths
(bzr r6596)
Diffstat (limited to 'src/extension/internal/cairo-renderer.cpp')
-rw-r--r--src/extension/internal/cairo-renderer.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index 3a4748b8a..914a543f2 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -204,7 +204,7 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
marker_item->transform = old_tr;
}
- if ( shape->marker[SP_MARKER_LOC_MID] ) {
+ if ( shape->marker[SP_MARKER_LOC_MID] && (path_it->size_default() > 1) ) {
Geom::Path::const_iterator curve_it1 = path_it->begin(); // incoming curve
Geom::Path::const_iterator curve_it2 = ++(path_it->begin()); // outgoing curve
while (curve_it2 != path_it->end_default())
@@ -238,7 +238,15 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_END]);
SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_END]));
- NR::Matrix tr(sp_shape_marker_get_transform_at_end(path_it->back_default()));
+ /* Get reference to last curve in the path.
+ * For moveto-only path, this returns the "closing line segment". */
+ unsigned int index = path_it->size_default();
+ if (index > 0) {
+ index--;
+ }
+ Geom::Curve const &lastcurve = (*path_it)[index];
+
+ NR::Matrix tr = sp_shape_marker_get_transform_at_end(lastcurve);
if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
tr = NR::scale(style->stroke_width.computed) * tr;