summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/pdfinput/pdf-input.cpp
diff options
context:
space:
mode:
authormiklosh <miklosh@users.sourceforge.net>2007-11-18 12:45:23 +0000
committermiklosh <miklosh@users.sourceforge.net>2007-11-18 12:45:23 +0000
commit518d41fd5685494053b70cb12baaea16afd8c9ba (patch)
treec2562b420622da71d76d9d01e8cb0733de76a30c /src/extension/internal/pdfinput/pdf-input.cpp
parentRequire poppler-glib and poppler-cairo for PDF preview (diff)
downloadinkscape-518d41fd5685494053b70cb12baaea16afd8c9ba.tar.gz
inkscape-518d41fd5685494053b70cb12baaea16afd8c9ba.zip
Switched from directly using CairoOutputDev to using the poppler-glib API
(bzr r4105)
Diffstat (limited to 'src/extension/internal/pdfinput/pdf-input.cpp')
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp41
1 files changed, 22 insertions, 19 deletions
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index a2b4fba48..2d6a8ea4b 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -23,6 +23,12 @@
#include "Page.h"
#include "Catalog.h"
+#ifdef HAVE_POPPLER_CAIRO
+#include <poppler/glib/poppler.h>
+#include <poppler/glib/poppler-document.h>
+#include <poppler/glib/poppler-page.h>
+#endif
+
#include "pdf-input.h"
#include "extension/system.h"
#include "extension/input.h"
@@ -51,7 +57,7 @@ static Glib::ustring crop_setting_choices[] = {
Glib::ustring(_("art box"))
};
-PdfImportDialog::PdfImportDialog(PDFDoc *doc)
+PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar *uri)
{
_pdf_doc = doc;
@@ -275,11 +281,14 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc)
_render_thumb = false;
#ifdef HAVE_POPPLER_CAIRO
- // Create an OutputDev
- _preview_output_dev = new CairoOutputDev();
- _preview_output_dev->startDoc(_pdf_doc->getXRef());
_cairo_surface = NULL;
_render_thumb = true;
+ // Create PopplerDocument
+ gchar *doc_uri = g_filename_to_uri(uri, NULL, NULL);
+ if (doc_uri) {
+ _poppler_doc = poppler_document_new_from_file(doc_uri, NULL, NULL);
+ g_free(doc_uri);
+ }
#endif
// Set default preview size
@@ -298,12 +307,12 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc)
PdfImportDialog::~PdfImportDialog() {
#ifdef HAVE_POPPLER_CAIRO
- if (_preview_output_dev) {
- delete _preview_output_dev;
- }
if (_cairo_surface) {
cairo_surface_destroy(_cairo_surface);
}
+ if (_poppler_doc) {
+ g_object_unref(G_OBJECT(_poppler_doc));
+ }
#endif
if (_thumb_data) {
if (_render_thumb) {
@@ -541,19 +550,13 @@ void PdfImportDialog::_setPreviewPage(int page) {
cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0); // Set fill color to white
cairo_paint(cr); // Clear it
cairo_scale(cr, scale_factor, scale_factor); // Use Cairo for resizing the image
- _preview_output_dev->setCairo(cr);
// Render page
- _previewed_page->displaySlice(_preview_output_dev,
- 72.0, 72.0, 0,
- FALSE, /* useMediaBox */
- TRUE, /* crop */
- 0, 0,
- (int)ceil(_previewed_page->getCropWidth()),
- (int)ceil(_previewed_page->getCropHeight()),
- FALSE, /* printing */
- _pdf_doc->getCatalog());
+ if (_poppler_doc != NULL) {
+ PopplerPage *poppler_page = poppler_document_get_page(_poppler_doc, page-1);
+ poppler_page_render(poppler_page, cr);
+ g_object_unref(G_OBJECT(poppler_page));
+ }
// Clean up
- _preview_output_dev->setCairo(NULL);
cairo_destroy(cr);
// Redraw preview area
_previewArea->set_size_request(_preview_width, _preview_height);
@@ -586,7 +589,7 @@ PdfInput::open(::Inkscape::Extension::Input * mod, const gchar * uri) {
return NULL;
}
- PdfImportDialog *dlg = new PdfImportDialog(pdf_doc);
+ PdfImportDialog *dlg = new PdfImportDialog(pdf_doc, uri);
if (!dlg->showDialog()) {
delete dlg;
delete pdf_doc;