From 6b6a11109986d484aacbb9a19ca0aa076f6729f7 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Mon, 19 May 2008 07:05:20 +0000 Subject: [PATCH] Make the poppler(pdf), spectre(ps), dvi and chm backend calculate and set bounding box of pages. CCBUG: 161599 svn path=/trunk/KDE/kdegraphics/okular/; revision=809593 --- generators/chm/generator_chm.cpp | 3 +++ generators/dvi/generator_dvi.cpp | 3 +++ generators/poppler/generator_pdf.cpp | 13 +++++++++++-- generators/spectre/generator_ghostview.cpp | 4 ++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/generators/chm/generator_chm.cpp b/generators/chm/generator_chm.cpp index 357b5f991..4934e8263 100644 --- a/generators/chm/generator_chm.cpp +++ b/generators/chm/generator_chm.cpp @@ -28,6 +28,7 @@ #include //for PAGEVIEW_ID #include #include +#include static KAboutData createAboutData() { @@ -182,6 +183,8 @@ void CHMGenerator::slotCompleted() Okular::PixmapRequest *req = m_request; m_request = 0; + if ( !req->page()->isBoundingBoxKnown() ) + updatePageBoundingBox( req->page()->number(), Okular::Utils::imageBoundingBox( &image ) ); req->page()->setPixmap( req->id(), new QPixmap( QPixmap::fromImage( image ) ) ); signalPixmapRequestDone( req ); } diff --git a/generators/dvi/generator_dvi.cpp b/generators/dvi/generator_dvi.cpp index 801b31607..81a3fead5 100644 --- a/generators/dvi/generator_dvi.cpp +++ b/generators/dvi/generator_dvi.cpp @@ -203,6 +203,9 @@ void DviGenerator::generatePixmap( Okular::PixmapRequest *request ) { kDebug(DviDebug) << "Image OK"; + if ( !request->page()->isBoundingBoxKnown() ) + updatePageBoundingBox( request->page()->number(), Okular::Utils::imageBoundingBox( &(pageInfo->img) ) ); + request->page()->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( pageInfo->img ) ) ); request->page()->setObjectRects( generateDviLinks( pageInfo ) ); diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp index e2d60c078..f8dfee82f 100644 --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include @@ -736,8 +737,14 @@ void PDFGenerator::generatePixmap( Okular::PixmapRequest * request ) Poppler::Page *p = pdfdoc->page(page->number()); // 2. Take data from outputdev and attach it to the Page - page->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( p->renderToImage(fakeDpiX, fakeDpiY, -1, -1, -1, -1, Poppler::Page::Rotate0 ) ) ) ); - + { + QImage img( p->renderToImage(fakeDpiX, fakeDpiY, -1, -1, -1, -1, Poppler::Page::Rotate0 ) ); + if ( !page->isBoundingBoxKnown() ) + updatePageBoundingBox( page->number(), Okular::Utils::imageBoundingBox( &img ) ); + + page->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( img ) ) ); + } + if ( genObjectRects ) { // TODO previously we extracted Image type rects too, but that needed porting to poppler @@ -1573,6 +1580,8 @@ void PDFGenerator::threadFinished() QList outText = generatorThread->takeText(); QLinkedList< Okular::ObjectRect * > outRects = generatorThread->takeObjectRects(); + if ( !request->page()->isBoundingBoxKnown() ) + updatePageBoundingBox( request->page()->number(), Okular::Utils::imageBoundingBox( outImage ) ); request->page()->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( *outImage ) ) ); delete outImage; if ( !outText.isEmpty() ) diff --git a/generators/spectre/generator_ghostview.cpp b/generators/spectre/generator_ghostview.cpp index 079b7598b..b80910341 100644 --- a/generators/spectre/generator_ghostview.cpp +++ b/generators/spectre/generator_ghostview.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "ui_gssettingswidget.h" #include "gssettings.h" @@ -180,6 +181,9 @@ void GSGenerator::slotImageGenerated(QImage *img, Okular::PixmapRequest *request // of all the generators attached to it if (request != m_request) return; + if ( !request->page()->isBoundingBoxKnown() ) + updatePageBoundingBox( request->page()->number(), Okular::Utils::imageBoundingBox( img ) ); + m_request = 0; QPixmap *pix = new QPixmap(QPixmap::fromImage(*img)); delete img;