[gtkmm-documentation] More update of the printing/advanced example
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm-documentation] More update of the printing/advanced example
- Date: Sun, 27 Nov 2016 12:36:53 +0000 (UTC)
commit 562566287539d85d4adc70c99b8293f0764a5e5b
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date: Sun Nov 27 13:33:22 2016 +0100
More update of the printing/advanced example
* examples/book/printing/advanced/previewdialog.[cc|h]:
Call Gdk::Window::end_draw_frame() shortly after the call to begin_draw_frame()
or else it will clash with GtkDrawingArea's calls to those methods.
PreviewDialog calls begin_draw_frame() just to get a suitable Cairo::Context.
examples/book/printing/advanced/previewdialog.cc | 24 ++++++++++-----------
examples/book/printing/advanced/previewdialog.h | 2 +-
2 files changed, 12 insertions(+), 14 deletions(-)
---
diff --git a/examples/book/printing/advanced/previewdialog.cc
b/examples/book/printing/advanced/previewdialog.cc
index 98836e6..80dd6e7 100644
--- a/examples/book/printing/advanced/previewdialog.cc
+++ b/examples/book/printing/advanced/previewdialog.cc
@@ -77,13 +77,14 @@ PreviewDialog::~PreviewDialog()
void PreviewDialog::on_drawing_area_realized()
{
auto gdk_window = m_DrawingArea.get_window();
- if(gdk_window)
+ if (gdk_window)
{
- m_refDrawingContext = gdk_window->begin_draw_frame(gdk_window->get_clip_region());
- auto cairo_ctx = m_refDrawingContext->get_cairo_context();
+ auto drawing_context = gdk_window->begin_draw_frame(gdk_window->get_clip_region());
+ m_refCairoContext = drawing_context->get_cairo_context();
+ gdk_window->end_draw_frame(drawing_context);
- if(m_refPrintContext)
- m_refPrintContext->set_cairo_context(cairo_ctx, 72, 72);
+ if (m_refPrintContext)
+ m_refPrintContext->set_cairo_context(m_refCairoContext, 72, 72);
}
}
@@ -95,6 +96,8 @@ void PreviewDialog::on_page_number_changed()
void PreviewDialog::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int, int)
{
+ m_refCairoContext = cr; // Can be used in on_popreview_got_page_size()
+
Cairo::RefPtr<Cairo::Context> prev_cairo_ctx;
double dpi_x = 72.0;
double dpi_y = 72.0;
@@ -137,12 +140,11 @@ void PreviewDialog::on_popreview_got_page_size(
// We get a cairo context for the DrawingArea and then give that cairo
// context to the PrintOperation's pango layout so that render_page() will
// render into the drawing area.
- auto cairo_ctx = m_refDrawingContext->get_cairo_context();
if (fabs(dpi_x - m_DpiX) > 0.001 ||
fabs(dpi_y - m_DpiY) > 0.001)
{
- print_ctx->set_cairo_context(cairo_ctx, dpi_x, dpi_y);
+ print_ctx->set_cairo_context(m_refCairoContext, dpi_x, dpi_y);
m_DpiX = dpi_x;
m_DpiY = dpi_y;
m_DrawingArea.queue_draw();
@@ -152,23 +154,19 @@ void PreviewDialog::on_popreview_got_page_size(
{
auto layout = m_pOperation->get_pango_layout();
if(layout)
- layout->update_from_cairo_context(cairo_ctx);
+ layout->update_from_cairo_context(m_refCairoContext);
}
}
}
void PreviewDialog::on_hide()
{
- auto gdk_window = m_DrawingArea.get_window();
- if(gdk_window)
- gdk_window->end_draw_frame(m_refDrawingContext);
-
m_refPreview->end_preview();
//We will not be using these anymore, so null the RefPtrs:
m_refPreview.reset();
m_refPrintContext.reset();
- m_refDrawingContext.reset();
+ m_refCairoContext.clear();
}
void PreviewDialog::on_close_clicked()
diff --git a/examples/book/printing/advanced/previewdialog.h b/examples/book/printing/advanced/previewdialog.h
index f89da4e..ad12aa9 100644
--- a/examples/book/printing/advanced/previewdialog.h
+++ b/examples/book/printing/advanced/previewdialog.h
@@ -47,7 +47,7 @@ protected:
Glib::RefPtr<Gtk::PrintOperationPreview> m_refPreview;
Glib::RefPtr<Gtk::PrintContext> m_refPrintContext;
Glib::RefPtr<Pango::Layout> m_refLayout;
- Glib::RefPtr<Gdk::DrawingContext> m_refDrawingContext;
+ Cairo::RefPtr<Cairo::Context> m_refCairoContext;
Gtk::Box m_VBox;
Gtk::Box m_HBox;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]