From f6c70f583f69e7364056b67f92f756ab540e0fb5 Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Mon, 1 Jun 2020 19:11:33 +0100 Subject: [PATCH] Panning now only works if the viewier is zoomed --- app/widget/viewer/viewer.cpp | 1 + app/widget/viewer/viewerdisplay.cpp | 17 ++++++++++++++--- app/widget/viewer/viewerdisplay.h | 4 ++++ app/widget/viewer/viewersizer.cpp | 3 ++- app/widget/viewer/viewersizer.h | 1 + 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 17b5ac8c7..a90c7242d 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -79,6 +79,7 @@ ViewerWidget::ViewerWidget(QWidget *parent) : connect(display_widget_, &ViewerDisplayWidget::ColorProcessorChanged, this, &ViewerWidget::ColorProcessorChanged); connect(display_widget_, &ViewerDisplayWidget::ColorManagerChanged, this, &ViewerWidget::ColorManagerChanged); connect(sizer_, &ViewerSizer::RequestMatrix, display_widget_, &ViewerDisplayWidget::SetMatrixZoom); + connect(sizer_, &ViewerSizer::SetZoomFlag, display_widget_, &ViewerDisplayWidget::SetZoomFlag); sizer_->SetWidget(display_widget_); // Create waveform view when audio is connected and video isn't diff --git a/app/widget/viewer/viewerdisplay.cpp b/app/widget/viewer/viewerdisplay.cpp index b438a4414..1228530de 100644 --- a/app/widget/viewer/viewerdisplay.cpp +++ b/app/widget/viewer/viewerdisplay.cpp @@ -47,7 +47,8 @@ ViewerDisplayWidget::ViewerDisplayWidget(QWidget *parent) : signal_cursor_color_(false), gizmos_(nullptr), gizmo_click_(false), - last_loaded_buffer_(nullptr) + last_loaded_buffer_(nullptr), + zoomed_(false) { } @@ -68,6 +69,16 @@ void ViewerDisplayWidget::SetMatrixZoom(const QMatrix4x4 &mat) update(); } +void ViewerDisplayWidget::SetZoomFlag(bool flag) +{ + zoomed_ = flag; + // If not scaled reset translation matrix to identity + if (!flag) { + QMatrix4x4 mat; + SetMatrixTranslate(mat); + } +} + QMatrix4x4 ViewerDisplayWidget::GetCompleteMatrix() { QMatrix4x4 mat; @@ -164,7 +175,7 @@ void ViewerDisplayWidget::mousePressEvent(QMouseEvent *event) } // get current position in preperation for move event - if (event->button() == Qt::MiddleButton) { + if (event->button() == Qt::MiddleButton && zoomed_) { position_ = event->pos(); return; } @@ -178,7 +189,7 @@ void ViewerDisplayWidget::mousePressEvent(QMouseEvent *event) void ViewerDisplayWidget::mouseMoveEvent(QMouseEvent *event) { - if (event->buttons() & Qt::MiddleButton) { + if (event->buttons() & Qt::MiddleButton && zoomed_) { QPointF delta = event->pos() - position_; // scale delta to widget size delta.setX(delta.x() / width()); diff --git a/app/widget/viewer/viewerdisplay.h b/app/widget/viewer/viewerdisplay.h index a1f8cec66..4d98af1ce 100644 --- a/app/widget/viewer/viewerdisplay.h +++ b/app/widget/viewer/viewerdisplay.h @@ -116,6 +116,8 @@ public slots: */ void SetImage(FramePtr in_buffer); + void SetZoomFlag(bool flag); + signals: /** * @brief Signal emitted when the user starts dragging from the viewer @@ -179,6 +181,8 @@ private: */ QMatrix4x4 scale_matrix_; + bool zoomed_; + #ifdef Q_OS_LINUX static bool nouveau_check_done_; #endif diff --git a/app/widget/viewer/viewersizer.cpp b/app/widget/viewer/viewersizer.cpp index 8f492d488..0780f3c58 100644 --- a/app/widget/viewer/viewersizer.cpp +++ b/app/widget/viewer/viewersizer.cpp @@ -105,6 +105,7 @@ void ViewerSizer::UpdateSize() // This container is taller than the image, scale by width child_size = QSize(width(), qRound(child_size.width() / aspect_ratio_)); } + emit SetZoomFlag(false); } else { @@ -128,7 +129,7 @@ void ViewerSizer::UpdateSize() child_matrix.scale(x_scale, y_scale, 1.0F); child_size = QSize(zoomed_width, zoomed_height); - + emit SetZoomFlag(true); } widget_->resize(child_size); diff --git a/app/widget/viewer/viewersizer.h b/app/widget/viewer/viewersizer.h index 2363f28cf..6728018a6 100644 --- a/app/widget/viewer/viewersizer.h +++ b/app/widget/viewer/viewersizer.h @@ -65,6 +65,7 @@ public: signals: void RequestMatrix(const QMatrix4x4& matrix); + void SetZoomFlag(bool flag); protected: /**