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
remotes/origin/KDE/4.1
Pino Toscano 18 years ago
parent 2b971b07b2
commit 6b6a111099
  1. 3
      generators/chm/generator_chm.cpp
  2. 3
      generators/dvi/generator_dvi.cpp
  3. 13
      generators/poppler/generator_pdf.cpp
  4. 4
      generators/spectre/generator_ghostview.cpp

@ -28,6 +28,7 @@
#include <okular/core/observer.h> //for PAGEVIEW_ID #include <okular/core/observer.h> //for PAGEVIEW_ID
#include <okular/core/page.h> #include <okular/core/page.h>
#include <okular/core/textpage.h> #include <okular/core/textpage.h>
#include <okular/core/utils.h>
static KAboutData createAboutData() static KAboutData createAboutData()
{ {
@ -182,6 +183,8 @@ void CHMGenerator::slotCompleted()
Okular::PixmapRequest *req = m_request; Okular::PixmapRequest *req = m_request;
m_request = 0; 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 ) ) ); req->page()->setPixmap( req->id(), new QPixmap( QPixmap::fromImage( image ) ) );
signalPixmapRequestDone( req ); signalPixmapRequestDone( req );
} }

@ -203,6 +203,9 @@ void DviGenerator::generatePixmap( Okular::PixmapRequest *request )
{ {
kDebug(DviDebug) << "Image OK"; 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()->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( pageInfo->img ) ) );
request->page()->setObjectRects( generateDviLinks( pageInfo ) ); request->page()->setObjectRects( generateDviLinks( pageInfo ) );

@ -38,6 +38,7 @@
#include <okular/core/sourcereference.h> #include <okular/core/sourcereference.h>
#include <okular/core/textpage.h> #include <okular/core/textpage.h>
#include <okular/core/fileprinter.h> #include <okular/core/fileprinter.h>
#include <okular/core/utils.h>
#include <config-okular-poppler.h> #include <config-okular-poppler.h>
@ -736,8 +737,14 @@ void PDFGenerator::generatePixmap( Okular::PixmapRequest * request )
Poppler::Page *p = pdfdoc->page(page->number()); Poppler::Page *p = pdfdoc->page(page->number());
// 2. Take data from outputdev and attach it to the Page // 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 ) if ( genObjectRects )
{ {
// TODO previously we extracted Image type rects too, but that needed porting to poppler // TODO previously we extracted Image type rects too, but that needed porting to poppler
@ -1573,6 +1580,8 @@ void PDFGenerator::threadFinished()
QList<Poppler::TextBox*> outText = generatorThread->takeText(); QList<Poppler::TextBox*> outText = generatorThread->takeText();
QLinkedList< Okular::ObjectRect * > outRects = generatorThread->takeObjectRects(); 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 ) ) ); request->page()->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( *outImage ) ) );
delete outImage; delete outImage;
if ( !outText.isEmpty() ) if ( !outText.isEmpty() )

@ -26,6 +26,7 @@
#include <okular/core/document.h> #include <okular/core/document.h>
#include <okular/core/page.h> #include <okular/core/page.h>
#include <okular/core/fileprinter.h> #include <okular/core/fileprinter.h>
#include <okular/core/utils.h>
#include "ui_gssettingswidget.h" #include "ui_gssettingswidget.h"
#include "gssettings.h" #include "gssettings.h"
@ -180,6 +181,9 @@ void GSGenerator::slotImageGenerated(QImage *img, Okular::PixmapRequest *request
// of all the generators attached to it // of all the generators attached to it
if (request != m_request) return; if (request != m_request) return;
if ( !request->page()->isBoundingBoxKnown() )
updatePageBoundingBox( request->page()->number(), Okular::Utils::imageBoundingBox( img ) );
m_request = 0; m_request = 0;
QPixmap *pix = new QPixmap(QPixmap::fromImage(*img)); QPixmap *pix = new QPixmap(QPixmap::fromImage(*img));
delete img; delete img;

Loading…
Cancel
Save