From 2eceacbf55b5796e4449fb3efc85cffdf5b6303c Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Thu, 12 Aug 2010 00:40:33 +0200 Subject: Fix rendering failures caused by markers with markerUnits="strokeWidth" on shapes with zero stroke width (bzr r9508.1.56) --- src/display/nr-arena-shape.cpp | 3 ++- src/marker.cpp | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 8a2b27f4f..550195c7c 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -370,6 +370,7 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock // to render svg:pattern has_fill = shape->nrstyle.prepareFill(ct, &shape->paintbox); has_stroke = shape->nrstyle.prepareStroke(ct, &shape->paintbox); + has_stroke &= (shape->nrstyle.stroke_width != 0); if (has_fill || has_stroke) { // TODO: remove segments outside of bbox when no dashes present @@ -387,7 +388,7 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock cairo_restore(ct); } - /* Render markers into parent buffer */ + // marker rendering for (NRArenaItem *child = shape->markers; child != NULL; child = child->next) { unsigned int ret = nr_arena_item_invoke_render(ct, child, area, pb, flags); if (ret & NR_ARENA_ITEM_STATE_INVALID) return ret; diff --git a/src/marker.cpp b/src/marker.cpp index 6917c0b71..f89dd2bc0 100644 --- a/src/marker.cpp +++ b/src/marker.cpp @@ -614,6 +614,13 @@ sp_marker_show_instance ( SPMarker *marker, NRArenaItem *parent, unsigned int key, unsigned int pos, Geom::Matrix const &base, float linewidth) { + // do not show marker if linewidth == 0 and markerUnits == strokeWidth + // otherwise Cairo will fail to render anything on the tile + // that contains the "degenerate" marker + if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH && linewidth == 0) { + return NULL; + } + for (SPMarkerView *v = marker->views; v != NULL; v = v->next) { if (v->key == key) { if (pos >= v->items.size()) { -- cgit v1.2.3