From 9d1e82deb40ebee3a050428459590c027655f84d Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Wed, 17 Dec 2014 15:53:30 +0000 Subject: [PATCH] [Fix] Fixed preview window. --- src/pdf_factory.cpp | 2 ++ src/pdf_file_widget.cpp | 8 ++++++- src/pdf_file_widget.h | 1 + src/pdf_page_widget.cpp | 9 +++++++- src/pdf_page_widget.h | 13 ++++++++---- src/pdf_preview_widget.cpp | 43 +++++++++++++++++++++++++++++++------- src/pdf_preview_widget.h | 11 +++++++++- src/pdf_table_widget.cpp | 2 ++ src/pdf_table_widget.h | 1 + 9 files changed, 75 insertions(+), 15 deletions(-) diff --git a/src/pdf_factory.cpp b/src/pdf_factory.cpp index 21078d9..15ff75b 100644 --- a/src/pdf_factory.cpp +++ b/src/pdf_factory.cpp @@ -50,6 +50,8 @@ void PDFFactory::createWidgets(void) { connect(pdfTableView, SIGNAL(pageClicked(QMouseEvent*,QImage)), pdfPreview, SLOT(pageClicked(QMouseEvent*,QImage))); + connect(pdfTableView, SIGNAL(previewUpdate(Poppler::Page*)), pdfPreview, + SLOT(previewUpdate(Poppler::Page*))); setWindowIcon(QIcon(":/img/hpdf.png")); setWindowTitle(tr("HPDF")); diff --git a/src/pdf_file_widget.cpp b/src/pdf_file_widget.cpp index 385c360..624621d 100644 --- a/src/pdf_file_widget.cpp +++ b/src/pdf_file_widget.cpp @@ -131,16 +131,22 @@ void PDFFileWidget::pageClickedHandler(QMouseEvent*, QImage) { void PDFFileWidget::setDocument(Poppler::Document* document, QString fileName) { document->setRenderHint(Poppler::Document::TextAntialiasing); + Poppler::Document* doc = Poppler::Document::load(fileName); + doc->setRenderHint(Poppler::Document::TextAntialiasing); + int numPages = document->numPages(); for(int i = 0; i < numPages; i++) { Poppler::Page* pdfPage = document->page(i); PDFPageWidget* pageWidget = new PDFPageWidget(); - + + pageWidget->setPopplerPage(doc->page(i)); tgen.render(pageWidget, pdfPage); connect(pageWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this, SIGNAL(pageClicked(QMouseEvent*,QImage))); + connect(pageWidget, SIGNAL(previewUpdate(Poppler::Page*)), this, + SIGNAL(previewUpdate(Poppler::Page*))); pagesContainerWidget->addPageWidget(pageWidget); /* Process event. */ diff --git a/src/pdf_file_widget.h b/src/pdf_file_widget.h index 8ecd162..c151d55 100644 --- a/src/pdf_file_widget.h +++ b/src/pdf_file_widget.h @@ -75,5 +75,6 @@ private: signals: void pageClicked(QMouseEvent*, QImage); void pageClicked(QMouseEvent*, Poppler::Page*); + void previewUpdate(Poppler::Page*); }; diff --git a/src/pdf_page_widget.cpp b/src/pdf_page_widget.cpp index 2518c5c..7c4b5cd 100644 --- a/src/pdf_page_widget.cpp +++ b/src/pdf_page_widget.cpp @@ -44,6 +44,10 @@ void PDFPageWidget::setButton(QPushButton* btn) { update(); } +void PDFPageWidget::setPopplerPage(Poppler::Page* pp) { + pPage = pp; +} + void PDFPageWidget::setThumbnail(QImage pageImage) { image = pageImage; pixmap = QPixmap::fromImage(image); @@ -53,7 +57,10 @@ void PDFPageWidget::setThumbnail(QImage pageImage) { } void PDFPageWidget::mousePressEvent(QMouseEvent* event) { - emit pageClicked(event, image); + if(pPage != NULL) { + emit pageClicked(event, image); + emit previewUpdate(pPage); + } } void PDFPageWidget::leaveEvent(QEvent* event) { diff --git a/src/pdf_page_widget.h b/src/pdf_page_widget.h index 5667bc7..527dfc8 100644 --- a/src/pdf_page_widget.h +++ b/src/pdf_page_widget.h @@ -1,5 +1,6 @@ #pragma once #include +#include class QWidget; class QPushButton; @@ -15,6 +16,8 @@ class PDFPageWidget : public QFrame { public: PDFPageWidget(QWidget* parent = 0); void setThumbnail(QImage pageImage); + void setPopplerPage(Poppler::Page*); + void setButton(QPushButton* btn); QSize sizeHint() const; /*void setButtonImage(QImage* pageImage);*/ @@ -27,12 +30,14 @@ protected: private: /*QVector buttons;*/ - QPushButton* button; - QImage image; - QPixmap pixmap; - QPushButton* btn1, *btn2; + QPushButton* button; + QImage image; + Poppler::Page* pPage; + QPixmap pixmap; + QPushButton* btn1, *btn2; signals: void pageClicked(QMouseEvent* event, QImage pageImage); + void previewUpdate(Poppler::Page*); }; diff --git a/src/pdf_preview_widget.cpp b/src/pdf_preview_widget.cpp index 19ab864..5d8b1d7 100644 --- a/src/pdf_preview_widget.cpp +++ b/src/pdf_preview_widget.cpp @@ -1,8 +1,9 @@ #include #include "pdf_preview_widget.h" +int test; PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) { - + pPage = NULL; } void PDFPreviewWidget::setImage(QImage image) { @@ -10,17 +11,43 @@ void PDFPreviewWidget::setImage(QImage image) { update(); } +void PDFPreviewWidget::regenImage(void) { + if(pPage != NULL) { + double dpi; + double dpi2; + QSize targetSize = this->size(); + QSizeF oriSize = pPage->pageSizeF(); + double oriDpi = 72; + dpi = targetSize.height() / (float)oriSize.height()*72; + dpi2 = targetSize.width() / (float)oriSize.width()*72; + dpi = dpirenderToImage(dpi, dpi); + } +} + +void PDFPreviewWidget::previewUpdate(Poppler::Page* pp) { + pPage = pp; + regenImage(); + update(); +} + void PDFPreviewWidget::pageClicked(QMouseEvent* mouseEvent, QImage image) { - setImage(image); + /*setImage(image);*/ +} + +void PDFPreviewWidget::resizeEvent(QResizeEvent* event) { + regenImage(); } void PDFPreviewWidget::paintEvent(QPaintEvent* event) { - QPainter painter(this); + if(pPage != NULL) { - QPixmap pixmap = QPixmap::fromImage(previewImage); - pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio); - painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2, - (size().height() - pixmap.height()) / 2, - pixmap.width(), pixmap.height()), pixmap); + QPainter painter(this); + QPixmap pixmap = QPixmap::fromImage(previewImage); + pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio); + painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2, + (size().height() - pixmap.height()) / 2, + pixmap.width(), pixmap.height()), pixmap); + } } diff --git a/src/pdf_preview_widget.h b/src/pdf_preview_widget.h index f3512eb..9133003 100644 --- a/src/pdf_preview_widget.h +++ b/src/pdf_preview_widget.h @@ -1,5 +1,6 @@ #pragma once #include +#include class QImage; class QPaintEvent; @@ -9,15 +10,23 @@ class PDFPreviewWidget : public QWidget { Q_OBJECT public: explicit PDFPreviewWidget(QWidget* parent = 0); - void setImage(QImage image); public slots: + void setImage(QImage image); + void regenImage(void); void pageClicked(QMouseEvent* mouseEvent, QImage image); + void previewUpdate(Poppler::Page*); protected: void paintEvent(QPaintEvent* event); private: QImage previewImage; + void resizeEvent(QResizeEvent* event); + /*PreviewGen tgen;*/ + Poppler::Page* pPage; + +signals: + void updatePreview(QImage); }; diff --git a/src/pdf_table_widget.cpp b/src/pdf_table_widget.cpp index a6a687d..b8d349b 100644 --- a/src/pdf_table_widget.cpp +++ b/src/pdf_table_widget.cpp @@ -41,6 +41,8 @@ void PDFTableWidget::loadFile(QString fileName) { fileWidget->setDocument(doc, fileName); connect(fileWidget, SIGNAL(pageClicked(QMouseEvent*,QImage)), this, SIGNAL(pageClicked(QMouseEvent*,QImage))); + connect(fileWidget, SIGNAL(previewUpdate(Poppler::Page*)), this, + SIGNAL(previewUpdate(Poppler::Page*))); fileWidgets.append(fileWidget); diff --git a/src/pdf_table_widget.h b/src/pdf_table_widget.h index 741a270..fd254ea 100644 --- a/src/pdf_table_widget.h +++ b/src/pdf_table_widget.h @@ -30,5 +30,6 @@ private: signals: void pageClicked(QMouseEvent*, QImage); + void previewUpdate(Poppler::Page*); };