From 2d34d624626414957cd4e0dfb920ee88f3cc4226 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Sat, 9 Jun 2012 22:39:23 +0100 Subject: Gtk+ 3 drawing fixes for PDF input dialogs (bzr r11481) --- src/extension/internal/pdfinput/pdf-input.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/extension/internal/pdfinput/pdf-input.cpp') diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp index d4fc6a8a2..6b6107444 100644 --- a/src/extension/internal/pdfinput/pdf-input.cpp +++ b/src/extension/internal/pdfinput/pdf-input.cpp @@ -287,7 +287,12 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) hbox1->show(); // Connect signals +#if WITH_GTKMM_3_0 + _previewArea->signal_draw().connect(sigc::mem_fun(*this, &PdfImportDialog::_onDraw)); +#else _previewArea->signal_expose_event().connect(sigc::mem_fun(*this, &PdfImportDialog::_onExposePreview)); +#endif + _pageNumberSpin_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPageNumberChanged)); _cropCheck->signal_toggled().connect(sigc::mem_fun(*this, &PdfImportDialog::_onToggleCropping)); _fallbackPrecisionSlider_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPrecisionChanged)); @@ -469,8 +474,14 @@ static void copy_cairo_surface_to_pixbuf (cairo_surface_t *surface, /** * \brief Updates the preview area with the previously rendered thumbnail */ -bool PdfImportDialog::_onExposePreview(GdkEventExpose */*event*/) { +#if !WITH_GTKMM_3_0 +bool PdfImportDialog::_onExposePreview(GdkEventExpose * /*event*/) { + Cairo::RefPtr cr = _previewArea->get_window()->create_cairo_context(); + return _onDraw(cr); +} +#endif +bool PdfImportDialog::_onDraw(const Cairo::RefPtr& cr) { // Check if we have a thumbnail at all if (!_thumb_data) { return true; @@ -478,6 +489,7 @@ bool PdfImportDialog::_onExposePreview(GdkEventExpose */*event*/) { // Create the pixbuf for the thumbnail Glib::RefPtr thumb; + if (_render_thumb) { thumb = Gdk::Pixbuf::create(Gdk::COLORSPACE_RGB, true, 8, _thumb_width, _thumb_height); @@ -492,17 +504,8 @@ bool PdfImportDialog::_onExposePreview(GdkEventExpose */*event*/) { // Set background to white if (_render_thumb) { thumb->fill(0xffffffff); - Glib::RefPtr back_pixmap = Gdk::Pixmap::create( - _previewArea->get_window(), _thumb_width, _thumb_height, -1); - if (!back_pixmap) { - return true; - } - - Cairo::RefPtr cr = back_pixmap->create_cairo_context(); Gdk::Cairo::set_source_pixbuf(cr, thumb, 0, 0); cr->paint(); - _previewArea->get_window()->set_back_pixmap(back_pixmap, false); - _previewArea->get_window()->clear(); } #ifdef HAVE_POPPLER_CAIRO // Copy the thumbnail image from the Cairo surface @@ -511,7 +514,6 @@ bool PdfImportDialog::_onExposePreview(GdkEventExpose */*event*/) { } #endif - Cairo::RefPtr cr = _previewArea->get_window()->create_cairo_context(); Gdk::Cairo::set_source_pixbuf(cr, thumb, 0, _render_thumb ? 0 : 20); cr->paint(); return true; -- cgit v1.2.3