diff options
| author | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-11-21 00:14:59 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-11-21 00:14:59 +0000 |
| commit | 76a1511675df9e1033f2c17115f3e47667d65f9b (patch) | |
| tree | b1d3c4604a0a4b19f849e856e46a594bcc0e9477 /src | |
| parent | Remove invisible bitmap image in Tango color management icon (diff) | |
| parent | Fix printing multiple copies of a document (diff) | |
| download | inkscape-76a1511675df9e1033f2c17115f3e47667d65f9b.tar.gz inkscape-76a1511675df9e1033f2c17115f3e47667d65f9b.zip | |
Merge branch 'print_copies' of gitlab.com:Ede123/inkscape
Diffstat (limited to 'src')
| -rw-r--r-- | src/extension/internal/cairo-render-context.cpp | 11 | ||||
| -rw-r--r-- | src/extension/internal/cairo-render-context.h | 2 | ||||
| -rw-r--r-- | src/ui/dialog/print.cpp | 6 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index 972081c0d..16100dc88 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -878,7 +878,7 @@ CairoRenderContext::_finishSurfaceSetup(cairo_surface_t *surface, cairo_matrix_t } bool -CairoRenderContext::finish(void) +CairoRenderContext::finish(bool finish_surface) { g_assert( _is_valid ); @@ -893,10 +893,13 @@ CairoRenderContext::finish(void) } cairo_destroy(_cr); - cairo_surface_finish(_surface); - cairo_status_t status = cairo_surface_status(_surface); - cairo_surface_destroy(_surface); _cr = NULL; + + if (finish_surface) + cairo_surface_finish(_surface); + cairo_status_t status = cairo_surface_status(_surface); + if (finish_surface) + cairo_surface_destroy(_surface); _surface = NULL; if (_layout) diff --git a/src/extension/internal/cairo-render-context.h b/src/extension/internal/cairo-render-context.h index be5169a74..a0ca2665b 100644 --- a/src/extension/internal/cairo-render-context.h +++ b/src/extension/internal/cairo-render-context.h @@ -72,7 +72,7 @@ class CairoRenderContext { public: CairoRenderContext *cloneMe(void) const; CairoRenderContext *cloneMe(double width, double height) const; - bool finish(void); + bool finish(bool finish_surface = true); CairoRenderer *getRenderer(void) const; cairo_t *getCairoContext(void) const; diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp index 532a8c364..ea99ffa19 100644 --- a/src/ui/dialog/print.cpp +++ b/src/ui/dialog/print.cpp @@ -35,6 +35,10 @@ static void draw_page(GtkPrintOperation *, gint /*page_nr*/, gpointer user_data) { + // TODO: If the user prints multiple copies we render the whole page for each copy + // It would be more efficient to render the page once (e.g. in "begin_print") + // and simply print this result as often as necessary + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); struct workaround_gtkmm *junk = (struct workaround_gtkmm*)user_data; //printf("%s %d\n",__FUNCTION__, page_nr); @@ -120,7 +124,7 @@ static void draw_page(GtkPrintOperation *, ret = renderer.setupDocument (ctx, junk->_doc, TRUE, 0., NULL); if (ret) { renderer.renderItem(ctx, junk->_base); - ctx->finish(); + ctx->finish(false); // do not finish the cairo_surface_t - it's owned by our GtkPrintContext! } else { g_warning("%s", _("Could not set up Document")); |
