[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;
|
selected = false;
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
|
|
||||||
/* Resize widget. */
|
|
||||||
this->resize(150, 150);
|
this->resize(150, 150);
|
||||||
this->setMinimumSize(150, 150);
|
this->setMinimumSize(150, 150);
|
||||||
this->setMaximumSize(150, 150);
|
this->setMaximumSize(150, 150);
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#include <QtWidgets>
|
#include <QtWidgets>
|
||||||
#include "pdf_preview_widget.h"
|
#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;
|
pPage = NULL;
|
||||||
currentPixmapSize = QSize(0,0);
|
currentPixmapSize = QSize(0,0);
|
||||||
}
|
}
|
||||||
@ -23,14 +25,35 @@ void PDFPreviewWidget::regenImage(void) {
|
|||||||
previewImage = pPage->renderToImage(dpi, dpi);
|
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) {
|
void PDFPreviewWidget::previewUpdate(Poppler::Page* pp) {
|
||||||
pPage = pp;
|
pPage = pp;
|
||||||
regenImage();
|
regenImage();
|
||||||
|
regenPixmap();
|
||||||
|
repositionPixmap();
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PDFPreviewWidget::resizeEvent(QResizeEvent* event) {
|
||||||
|
if(pPage != NULL) {
|
||||||
|
repositionPixmap();
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PDFPreviewWidget::wheelEvent(QWheelEvent* event) {
|
void PDFPreviewWidget::wheelEvent(QWheelEvent* event) {
|
||||||
if(pPage != NULL) {
|
if(pPage != NULL) {
|
||||||
|
qDebug() << currentPixmapSize;
|
||||||
if(event->delta() > 0)
|
if(event->delta() > 0)
|
||||||
currentPixmapSize += QSize(30, 30);
|
currentPixmapSize += QSize(30, 30);
|
||||||
else if(event->delta() < 0)
|
else if(event->delta() < 0)
|
||||||
@ -41,20 +64,59 @@ void PDFPreviewWidget::wheelEvent(QWheelEvent* event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
regenImage();
|
regenImage();
|
||||||
|
regenPixmap();
|
||||||
|
repositionPixmap();
|
||||||
update();
|
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) {
|
void PDFPreviewWidget::paintEvent(QPaintEvent* event) {
|
||||||
if(pPage != NULL) {
|
if(pPage != NULL) {
|
||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
QPixmap pixmap = QPixmap::fromImage(previewImage);
|
painter.drawPixmap(QRect(currentPixmapPos.x(), currentPixmapPos.y(),
|
||||||
pixmap = pixmap.scaled(currentPixmapSize, Qt::KeepAspectRatio);
|
pixmap.width(), pixmap.height()), pixmap);
|
||||||
currentPixmapSize = pixmap.size();
|
|
||||||
painter.drawPixmap(QRect((size().width() - pixmap.width()) / 2,
|
QFrame::paintEvent(event);
|
||||||
(size().height() - pixmap.height()) / 2,
|
|
||||||
pixmap.width(), pixmap.height()), pixmap);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,33 +1,44 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <QWidget>
|
#include <QFrame>
|
||||||
#include <poppler-qt5.h>
|
#include <poppler-qt5.h>
|
||||||
|
|
||||||
class QImage;
|
class QImage;
|
||||||
|
class QPixmap;
|
||||||
class QSize;
|
class QSize;
|
||||||
class QPoint;
|
class QPoint;
|
||||||
|
class QResizeEvent;
|
||||||
class QWheelEvent;
|
class QWheelEvent;
|
||||||
class QPaintEvent;
|
class QPaintEvent;
|
||||||
class QMouseEvent;
|
class QMouseEvent;
|
||||||
|
|
||||||
class PDFPreviewWidget : public QWidget {
|
class PDFPreviewWidget : public QFrame {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit PDFPreviewWidget(QWidget* parent = 0);
|
explicit PDFPreviewWidget(QWidget* parent = 0);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void regenImage(void);
|
void regenImage(void);
|
||||||
|
void regenPixmap(void);
|
||||||
|
void repositionPixmap(void);
|
||||||
void previewUpdate(Poppler::Page*);
|
void previewUpdate(Poppler::Page*);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void wheelEvent(QWheelEvent* event);
|
void wheelEvent(QWheelEvent* event);
|
||||||
void paintEvent(QPaintEvent* event);
|
void paintEvent(QPaintEvent* event);
|
||||||
|
void resizeEvent(QResizeEvent* event);
|
||||||
|
void mousePressEvent(QMouseEvent* event);
|
||||||
|
void mouseMoveEvent(QMouseEvent* event);
|
||||||
|
void mouseReleaseEvent(QMouseEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QImage previewImage;
|
QImage previewImage;
|
||||||
|
QPixmap pixmap;
|
||||||
Poppler::Page* pPage;
|
Poppler::Page* pPage;
|
||||||
|
|
||||||
QSize currentPixmapSize;
|
QSize currentPixmapSize;
|
||||||
QPoint currentPixmapPos;
|
QPoint currentPixmapPos;
|
||||||
|
QPoint lastPixmapPos;
|
||||||
|
QPoint dragStartPos;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updatePreview(QImage);
|
void updatePreview(QImage);
|
||||||
|
Loading…
Reference in New Issue
Block a user