[Add] Added zoom and pan for preview widget.
This commit is contained in:
parent
66a81ca6e7
commit
af5b34aba6
@ -9,7 +9,6 @@ PDFPageWidget::PDFPageWidget(QWidget* parent) :
|
||||
selected = false;
|
||||
setAcceptDrops(true);
|
||||
|
||||
/* Resize widget. */
|
||||
this->resize(150, 150);
|
||||
this->setMinimumSize(150, 150);
|
||||
this->setMaximumSize(150, 150);
|
||||
|
@ -1,7 +1,9 @@
|
||||
#include <QtWidgets>
|
||||
#include "pdf_preview_widget.h"
|
||||
|
||||
PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QWidget(parent) {
|
||||
PDFPreviewWidget::PDFPreviewWidget(QWidget* parent) : QFrame(parent) {
|
||||
setCursor(Qt::OpenHandCursor);
|
||||
setFrameStyle(QFrame::StyledPanel | QFrame::Plain);
|
||||
pPage = NULL;
|
||||
currentPixmapSize = QSize(0,0);
|
||||
}
|
||||
@ -23,14 +25,35 @@ void PDFPreviewWidget::regenImage(void) {
|
||||
previewImage = pPage->renderToImage(dpi, dpi);
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::regenPixmap(void) {
|
||||
pixmap = QPixmap::fromImage(previewImage);
|
||||
pixmap = pixmap.scaled(currentPixmapSize, Qt::KeepAspectRatioByExpanding);
|
||||
currentPixmapSize = pixmap.size();
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::repositionPixmap(void) {
|
||||
currentPixmapPos = QPoint((size().width() - pixmap.width()) / 2,
|
||||
(size().height() - pixmap.height()) / 2);
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::previewUpdate(Poppler::Page* pp) {
|
||||
pPage = pp;
|
||||
regenImage();
|
||||
regenPixmap();
|
||||
repositionPixmap();
|
||||
update();
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::resizeEvent(QResizeEvent* event) {
|
||||
if(pPage != NULL) {
|
||||
repositionPixmap();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::wheelEvent(QWheelEvent* event) {
|
||||
if(pPage != NULL) {
|
||||
qDebug() << currentPixmapSize;
|
||||
if(event->delta() > 0)
|
||||
currentPixmapSize += QSize(30, 30);
|
||||
else if(event->delta() < 0)
|
||||
@ -41,20 +64,59 @@ void PDFPreviewWidget::wheelEvent(QWheelEvent* event) {
|
||||
}
|
||||
|
||||
regenImage();
|
||||
regenPixmap();
|
||||
repositionPixmap();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::mousePressEvent(QMouseEvent* event) {
|
||||
if(pPage != NULL) {
|
||||
setCursor(Qt::ClosedHandCursor);
|
||||
|
||||
if(event->button() == Qt::LeftButton) {
|
||||
dragStartPos = event->pos();
|
||||
lastPixmapPos = currentPixmapPos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::mouseMoveEvent(QMouseEvent* event) {
|
||||
if(pPage != NULL) {
|
||||
if(!(event->buttons() & Qt::LeftButton)) {
|
||||
return;
|
||||
}
|
||||
|
||||
QPoint currentPos = event->pos();
|
||||
QPoint vector = currentPos - dragStartPos;
|
||||
QPoint newPos = lastPixmapPos + vector;
|
||||
|
||||
if(pixmap.width() > size().width()) {
|
||||
if(newPos.x() <= 0 && newPos.x() >= size().width() - pixmap.width())
|
||||
currentPixmapPos.setX(newPos.x());
|
||||
}
|
||||
|
||||
if(pixmap.height() > size().height()) {
|
||||
if(newPos.y() <= 0 && newPos.y() >= size().height() - pixmap.height())
|
||||
currentPixmapPos.setY(newPos.y());
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::mouseReleaseEvent(QMouseEvent* event) {
|
||||
setCursor(Qt::OpenHandCursor);
|
||||
}
|
||||
|
||||
void PDFPreviewWidget::paintEvent(QPaintEvent* event) {
|
||||
if(pPage != NULL) {
|
||||
|
||||
QPainter painter(this);
|
||||
QPixmap pixmap = QPixmap::fromImage(previewImage);
|
||||
pixmap = pixmap.scaled(currentPixmapSize, Qt::KeepAspectRatio);
|
||||
currentPixmapSize = pixmap.size();
|
||||
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
|
||||
(size().height() - pixmap.height()) / 2,
|
||||
painter.drawPixmap(QRect(currentPixmapPos.x(), currentPixmapPos.y(),
|
||||
pixmap.width(), pixmap.height()), pixmap);
|
||||
|
||||
QFrame::paintEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,33 +1,44 @@
|
||||
#pragma once
|
||||
#include <QWidget>
|
||||
#include <QFrame>
|
||||
#include <poppler-qt5.h>
|
||||
|
||||
class QImage;
|
||||
class QPixmap;
|
||||
class QSize;
|
||||
class QPoint;
|
||||
class QResizeEvent;
|
||||
class QWheelEvent;
|
||||
class QPaintEvent;
|
||||
class QMouseEvent;
|
||||
|
||||
class PDFPreviewWidget : public QWidget {
|
||||
class PDFPreviewWidget : public QFrame {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PDFPreviewWidget(QWidget* parent = 0);
|
||||
|
||||
public slots:
|
||||
void regenImage(void);
|
||||
void regenPixmap(void);
|
||||
void repositionPixmap(void);
|
||||
void previewUpdate(Poppler::Page*);
|
||||
|
||||
protected:
|
||||
void wheelEvent(QWheelEvent* event);
|
||||
void paintEvent(QPaintEvent* event);
|
||||
void resizeEvent(QResizeEvent* event);
|
||||
void mousePressEvent(QMouseEvent* event);
|
||||
void mouseMoveEvent(QMouseEvent* event);
|
||||
void mouseReleaseEvent(QMouseEvent* event);
|
||||
|
||||
private:
|
||||
QImage previewImage;
|
||||
QPixmap pixmap;
|
||||
Poppler::Page* pPage;
|
||||
|
||||
QSize currentPixmapSize;
|
||||
QPoint currentPixmapPos;
|
||||
QPoint lastPixmapPos;
|
||||
QPoint dragStartPos;
|
||||
|
||||
signals:
|
||||
void updatePreview(QImage);
|
||||
|
Loading…
Reference in New Issue
Block a user