diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2010-10-23 20:24:27 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2010-10-23 20:24:27 +0000 |
| commit | 685ca91c9f6142ddee5b5da0c0ab77cf64459c7f (patch) | |
| tree | 15a1cfcf621c9601e0eccf78797c256c1715436d | |
| parent | fix crash bug: PDF export: crash in 'CairoRenderContext::_showGlyphs' (diff) | |
| download | inkscape-685ca91c9f6142ddee5b5da0c0ab77cf64459c7f.tar.gz inkscape-685ca91c9f6142ddee5b5da0c0ab77cf64459c7f.zip | |
Don't try displaying markers for completely empty paths, fixes crash.
Fixed bugs:
- https://launchpad.net/bugs/511577
(bzr r9843)
| -rw-r--r-- | src/extension/internal/cairo-renderer.cpp | 1 | ||||
| -rw-r--r-- | src/sp-shape.cpp | 12 | ||||
| -rw-r--r-- | src/splivarot.cpp | 8 |
3 files changed, 17 insertions, 4 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index ebdb82a69..d429cbee3 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -191,6 +191,7 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx) SPStyle* style = SP_OBJECT_STYLE (item); Geom::PathVector const & pathv = shape->curve->get_pathvector(); + if (pathv.empty()) return; ctx->renderPathVector(pathv, style, &pbox); diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp index b64ad45e0..4d765af99 100644 --- a/src/sp-shape.cpp +++ b/src/sp-shape.cpp @@ -410,7 +410,9 @@ sp_shape_update_marker_view (SPShape *shape, NRArenaItem *ai) // position arguments to sp_marker_show_instance, basically counts the amount of markers. int counter[4] = {0}; + if (!shape->curve) return; Geom::PathVector const & pathv = shape->curve->get_pathvector(); + if (pathv.empty()) return; // the first vertex should get a start marker, the last an end marker, and all the others a mid marker // see bug 456148 @@ -585,7 +587,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const & } // Union with bboxes of the markers, if any - if (sp_shape_has_markers (shape)) { + if (sp_shape_has_markers (shape) && !shape->curve->get_pathvector().empty()) { /** \todo make code prettier! */ Geom::PathVector const & pathv = shape->curve->get_pathvector(); // START marker @@ -767,6 +769,9 @@ sp_shape_print (SPItem *item, SPPrintContext *ctx) if (!shape->curve) return; + Geom::PathVector const & pathv = shape->curve->get_pathvector(); + if (pathv.empty()) return; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gint add_comments = prefs->getBool("/printing/debug/add-label-comments"); if (add_comments) { @@ -788,15 +793,14 @@ sp_shape_print (SPItem *item, SPPrintContext *ctx) SPStyle* style = SP_OBJECT_STYLE (item); if (!style->fill.isNone()) { - sp_print_fill (ctx, shape->curve->get_pathvector(), &i2d, style, &pbox, &dbox, &bbox); + sp_print_fill (ctx, pathv, &i2d, style, &pbox, &dbox, &bbox); } if (!style->stroke.isNone()) { - sp_print_stroke (ctx, shape->curve->get_pathvector(), &i2d, style, &pbox, &dbox, &bbox); + sp_print_stroke (ctx, pathv, &i2d, style, &pbox, &dbox, &bbox); } /** \todo make code prettier */ - Geom::PathVector const & pathv = shape->curve->get_pathvector(); // START marker for (int i = 0; i < 2; i++) { // SP_MARKER_LOC and SP_MARKER_LOC_START if ( shape->marker[i] ) { diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 2b7da7f8a..e273ca82f 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -674,6 +674,10 @@ Geom::PathVector* item_outline(SPItem const *item) return ret_pathv; } + if (curve->get_pathvector().empty()) { + return ret_pathv; + } + // remember old stroke style, to be set on fill SPStyle *i_style = SP_OBJECT_STYLE(item); @@ -900,6 +904,10 @@ sp_selected_path_outline(SPDesktop *desktop) continue; } + if (curve->get_pathvector().empty()) { + continue; + } + // pas de stroke pas de chocolat if (!SP_OBJECT_STYLE(item) || SP_OBJECT_STYLE(item)->stroke.noneSet) { curve->unref(); |
