From d966a6c9caa055dfea09c59fc238bbf7316a2072 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Thu, 12 Jan 2012 18:19:16 +0300 Subject: [PATCH] Sankore-204 pdf loading doesn't scele scene any more --- src/adaptors/UBImportPDF.cpp | 4 +++- src/adaptors/UBImportPDF.h | 3 +++ src/pdf/PDFRenderer.cpp | 3 +++ src/pdf/PDFRenderer.h | 6 +++++ src/pdf/XPDFRenderer.cpp | 44 ++++++++++++------------------------ src/pdf/XPDFRenderer.h | 2 -- 6 files changed, 29 insertions(+), 33 deletions(-) diff --git a/src/adaptors/UBImportPDF.cpp b/src/adaptors/UBImportPDF.cpp index b178b154..e15e1541 100644 --- a/src/adaptors/UBImportPDF.cpp +++ b/src/adaptors/UBImportPDF.cpp @@ -31,7 +31,8 @@ UBImportPDF::UBImportPDF(QObject *parent) : UBImportAdaptor(parent) { - // NOOP + QDesktopWidget* desktop = UBApplication::desktop(); + this->dpi = (desktop->physicalDpiX() + desktop->physicalDpiY()) / 2; } @@ -68,6 +69,7 @@ bool UBImportPDF::addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFi UBApplication::showMessage(tr("PDF import failed.")); return false; } + pdfRenderer->setDPI(this->dpi); int documentPageCount = pDocument->pageCount(); diff --git a/src/adaptors/UBImportPDF.h b/src/adaptors/UBImportPDF.h index f8d5159c..0775027e 100644 --- a/src/adaptors/UBImportPDF.h +++ b/src/adaptors/UBImportPDF.h @@ -33,6 +33,9 @@ class UBImportPDF : public UBImportAdaptor virtual QString importFileFilter(); virtual bool addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile); + + private: + int dpi; }; #endif /* UBIMPORTPDF_H_ */ diff --git a/src/pdf/PDFRenderer.cpp b/src/pdf/PDFRenderer.cpp index 116755ec..95999410 100644 --- a/src/pdf/PDFRenderer.cpp +++ b/src/pdf/PDFRenderer.cpp @@ -23,6 +23,9 @@ QMap< QUuid, QPointer > PDFRenderer::sRenderers; +PDFRenderer::PDFRenderer() : dpiForRendering(96) +{ +} PDFRenderer::~PDFRenderer() { diff --git a/src/pdf/PDFRenderer.h b/src/pdf/PDFRenderer.h index 63945cd1..62fdfac9 100644 --- a/src/pdf/PDFRenderer.h +++ b/src/pdf/PDFRenderer.h @@ -50,6 +50,8 @@ class PDFRenderer : public QObject QUuid fileUuid() const { return mFileUuid; } QByteArray fileData() const { return mFileData; } + void setDPI(int desiredDPI) { this->dpiForRendering = desiredDPI; } + public slots: virtual void render(QPainter *p, int pageNumber, const QRectF &bounds = QRectF()) = 0; @@ -63,6 +65,10 @@ class PDFRenderer : public QObject void setFileUuid(const QUuid &fileUuid); static QMap< QUuid, QPointer > sRenderers; + + protected: + int dpiForRendering; + PDFRenderer(); }; #endif // PDFRENDERER_H diff --git a/src/pdf/XPDFRenderer.cpp b/src/pdf/XPDFRenderer.cpp index bc2ad7d4..f23f0264 100644 --- a/src/pdf/XPDFRenderer.cpp +++ b/src/pdf/XPDFRenderer.cpp @@ -39,8 +39,6 @@ XPDFRenderer::XPDFRenderer(const QString &filename, bool importingFile) mDocument = new PDFDoc(new GString(filename.toUtf8().data()), 0, 0, 0); // the filename GString is deleted on PDFDoc desctruction sInstancesCount.ref(); - mScaleX = 0.0; - mScaleY = 0.0; } XPDFRenderer::~XPDFRenderer() @@ -114,16 +112,17 @@ QSizeF XPDFRenderer::pageSizeF(int pageNumber) const { int rotate = mDocument->getPageRotate(pageNumber); - cropWidth = mDocument->getPageCropWidth(pageNumber); - cropHeight = mDocument->getPageCropHeight(pageNumber); + cropWidth = mDocument->getPageCropWidth(pageNumber) * this->dpiForRendering / 72.0; + cropHeight = mDocument->getPageCropHeight(pageNumber) * this->dpiForRendering / 72.0; - if ((rotate == 90) || (rotate == 270)) + if (rotate == 90 || rotate == 270) { - cropWidth = mDocument->getPageCropHeight(pageNumber); - cropHeight = mDocument->getPageCropWidth(pageNumber); + //switching width and height + qreal tmpVar = cropWidth; + cropWidth = cropHeight; + cropHeight = tmpVar; } } - return QSizeF(cropWidth, cropHeight); } @@ -142,14 +141,6 @@ void XPDFRenderer::render(QPainter *p, int pageNumber, const QRectF &bounds) { qreal xscale = p->worldTransform().m11(); qreal yscale = p->worldTransform().m22(); - bool bZoomChanged = false; - - if(fabs(mScaleX - xscale) > 0.1 || fabs(mScaleY - yscale) > 0.1) - { - mScaleX = xscale; - mScaleY = yscale; - bZoomChanged = true; - } QImage *pdfImage = createPDFImage(pageNumber, xscale, yscale, bounds); QTransform savedTransform = p->worldTransform(); @@ -162,7 +153,6 @@ void XPDFRenderer::render(QPainter *p, int pageNumber, const QRectF &bounds) QImage* XPDFRenderer::createPDFImage(int pageNumber, const qreal xscale, const qreal yscale, const QRectF &bounds) { - QImage* img = new QImage(); if (isValid()) { SplashColor paperColor = {0xFF, 0xFF, 0xFF}; // white @@ -170,36 +160,30 @@ QImage* XPDFRenderer::createPDFImage(int pageNumber, const qreal xscale, const q delete mSplash; mSplash = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); mSplash->startDoc(mDocument->getXRef()); - int hResolution = 72; - int vResolution = 72; int rotation = 0; // in degrees (get it from the worldTransform if we want to support rotation) GBool useMediaBox = gFalse; GBool crop = gTrue; GBool printing = gFalse; - const qreal xScale = xscale; - const qreal yScale = yscale; mSliceX = 0.; mSliceY = 0.; if (bounds.isNull()) { - mDocument->displayPage(mSplash, pageNumber, hResolution * xScale, vResolution * yScale, + mDocument->displayPage(mSplash, pageNumber, this->dpiForRendering, this->dpiForRendering, rotation, useMediaBox, crop, printing); } else { - mSliceX = bounds.x() * xScale; - mSliceY = bounds.y() * yScale; - qreal sliceW = bounds.width() * xScale; - qreal sliceH = bounds.height() * yScale; + mSliceX = bounds.x() * xscale; + mSliceY = bounds.y() * yscale; + qreal sliceW = bounds.width() * xscale; + qreal sliceH = bounds.height() * yscale; - mDocument->displayPageSlice(mSplash, pageNumber, hResolution * xScale, vResolution * yScale, + mDocument->displayPageSlice(mSplash, pageNumber, this->dpiForRendering, this->dpiForRendering, rotation, useMediaBox, crop, printing, mSliceX, mSliceY, sliceW, sliceH); } mpSplashBitmap = mSplash->getBitmap(); - delete img; - img = new QImage(mpSplashBitmap->getDataPtr(), mpSplashBitmap->getWidth(), mpSplashBitmap->getHeight(), mpSplashBitmap->getWidth() * 3, QImage::Format_RGB888); } - return img; + return new QImage(mpSplashBitmap->getDataPtr(), mpSplashBitmap->getWidth(), mpSplashBitmap->getHeight(), mpSplashBitmap->getWidth() * 3, QImage::Format_RGB888); } diff --git a/src/pdf/XPDFRenderer.h b/src/pdf/XPDFRenderer.h index f47e947a..264c9133 100644 --- a/src/pdf/XPDFRenderer.h +++ b/src/pdf/XPDFRenderer.h @@ -57,8 +57,6 @@ class XPDFRenderer : public PDFRenderer SplashBitmap* mpSplashBitmap; SplashOutputDev* mSplash; - qreal mScaleX; - qreal mScaleY; }; #endif // XPDFRENDERER_H