[Add] Wheel event for scaling. (forgot to commit this while at work).

This commit is contained in:
Rtch90 2014-12-18 20:59:09 +00:00
parent 60b34f9beb
commit 66a81ca6e7
2 changed files with 29 additions and 14 deletions

View File

@ -3,21 +3,22 @@
PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) { PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) {
pPage = NULL; pPage = NULL;
} currentPixmapSize = QSize(0,0);
void PDFPreviewWidget::setImage(QImage image) {
previewImage = image;
update();
} }
void PDFPreviewWidget::regenImage(void) { void PDFPreviewWidget::regenImage(void) {
double dpi; double dpi;
double dpi2; double dpi2;
QSize targetSize = this->size(); QSize targetSize;
if(currentPixmapSize == QSize(0,0))
currentPixmapSize = this->size();
targetSize = currentPixmapSize;
QSizeF oriSize = pPage->pageSizeF(); QSizeF oriSize = pPage->pageSizeF();
double oriDpi = 72; double oriDpi = 72;
dpi = targetSize.height() / (float)oriSize.height()*72; dpi = targetSize.height() / (float)oriSize.height()*oriDpi;
dpi2 = targetSize.width() / (float)oriSize.width()*72; dpi2 = targetSize.width() / (float)oriSize.width()*oriDpi;
dpi = dpi<dpi2?dpi:dpi2; dpi = dpi<dpi2?dpi:dpi2;
previewImage = pPage->renderToImage(dpi, dpi); previewImage = pPage->renderToImage(dpi, dpi);
} }
@ -28,8 +29,20 @@ void PDFPreviewWidget::previewUpdate(Poppler::Page* pp) {
update(); update();
} }
void PDFPreviewWidget::resizeEvent(QResizeEvent* event) { void PDFPreviewWidget::wheelEvent(QWheelEvent* event) {
if(pPage != NULL) regenImage(); if(pPage != NULL) {
if(event->delta() > 0)
currentPixmapSize += QSize(30, 30);
else if(event->delta() < 0)
currentPixmapSize -= QSize(30, 30);
if(currentPixmapSize.width() < 150 || currentPixmapSize.height() < 150) {
currentPixmapSize = QSize(150, 150);
}
regenImage();
update();
}
} }
void PDFPreviewWidget::paintEvent(QPaintEvent* event) { void PDFPreviewWidget::paintEvent(QPaintEvent* event) {
@ -37,7 +50,8 @@ void PDFPreviewWidget::paintEvent(QPaintEvent* event) {
QPainter painter(this); QPainter painter(this);
QPixmap pixmap = QPixmap::fromImage(previewImage); QPixmap pixmap = QPixmap::fromImage(previewImage);
pixmap = pixmap.scaled(size(), Qt::KeepAspectRatio); pixmap = pixmap.scaled(currentPixmapSize, Qt::KeepAspectRatio);
currentPixmapSize = pixmap.size();
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2, painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
(size().height() - pixmap.height()) / 2, (size().height() - pixmap.height()) / 2,
pixmap.width(), pixmap.height()), pixmap); pixmap.width(), pixmap.height()), pixmap);

View File

@ -4,7 +4,8 @@
class QImage; class QImage;
class QSize; class QSize;
class QResizeEvent; class QPoint;
class QWheelEvent;
class QPaintEvent; class QPaintEvent;
class QMouseEvent; class QMouseEvent;
@ -14,12 +15,11 @@ public:
explicit PDFPreviewWidget(QWidget* parent = 0); explicit PDFPreviewWidget(QWidget* parent = 0);
public slots: public slots:
void setImage(QImage image);
void regenImage(void); void regenImage(void);
void previewUpdate(Poppler::Page*); void previewUpdate(Poppler::Page*);
protected: protected:
void resizeEvent(QResizeEvent* event); void wheelEvent(QWheelEvent* event);
void paintEvent(QPaintEvent* event); void paintEvent(QPaintEvent* event);
private: private:
@ -27,6 +27,7 @@ private:
Poppler::Page* pPage; Poppler::Page* pPage;
QSize currentPixmapSize; QSize currentPixmapSize;
QPoint currentPixmapPos;
signals: signals:
void updatePreview(QImage); void updatePreview(QImage);