From 26c3534048226bcb9e2d4b7e72b3e00c3548fc8f Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 18 Dec 2018 11:38:13 +1100 Subject: [PATCH] implemented middle click drag on zoomed viewer --- ui/viewercontainer.cpp | 19 +++++++++++++++++++ ui/viewercontainer.h | 7 +++++++ ui/viewerwidget.cpp | 7 ++++++- ui/viewerwidget.h | 2 ++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/ui/viewercontainer.cpp b/ui/viewercontainer.cpp index 39f9fa66f..be24c84bf 100644 --- a/ui/viewercontainer.cpp +++ b/ui/viewercontainer.cpp @@ -24,12 +24,31 @@ ViewerContainer::ViewerContainer(QWidget *parent) : setWidget(area); child = new ViewerWidget(area); + child->container = this; } ViewerContainer::~ViewerContainer() { delete area; } +void ViewerContainer::dragScrollPress(const QPoint &p) { + drag_start_x = p.x(); + drag_start_y = p.y(); + horiz_start = horizontalScrollBar()->value(); + vert_start = verticalScrollBar()->value(); +} + +void ViewerContainer::dragScrollMove(const QPoint &p) { + int true_x = p.x() + (horiz_start - horizontalScrollBar()->value()); + int true_y = p.y() + (vert_start - verticalScrollBar()->value()); + + horizontalScrollBar()->setValue(horizontalScrollBar()->value() + (drag_start_x - true_x)); + verticalScrollBar()->setValue(verticalScrollBar()->value() + (drag_start_y - true_y)); + + drag_start_x = true_x; + drag_start_y = true_y; +} + void ViewerContainer::adjust() { if (viewer->seq != NULL) { if (child->waveform) { diff --git a/ui/viewercontainer.h b/ui/viewercontainer.h index 6b07b9365..921e2b9aa 100644 --- a/ui/viewercontainer.h +++ b/ui/viewercontainer.h @@ -15,6 +15,9 @@ public: bool fit; double zoom; + void dragScrollPress(const QPoint&); + void dragScrollMove(const QPoint&); + Viewer* viewer; ViewerWidget* child; void adjust(); @@ -28,6 +31,10 @@ public slots: private: QWidget* area; + int drag_start_x; + int drag_start_y; + int horiz_start; + int vert_start; }; #endif // VIEWERCONTAINER_H diff --git a/ui/viewerwidget.cpp b/ui/viewerwidget.cpp index 5f51c3811..071c428e3 100644 --- a/ui/viewerwidget.cpp +++ b/ui/viewerwidget.cpp @@ -19,6 +19,7 @@ #include "ui/collapsiblewidget.h" #include "project/undo.h" #include "project/media.h" +#include "ui/viewercontainer.h" #include #include @@ -215,6 +216,8 @@ void ViewerWidget::move_gizmos(QMouseEvent *event, bool done) { void ViewerWidget::mousePressEvent(QMouseEvent* event) { if (waveform) { seek_from_click(event->x()); + } else if (event->buttons() & Qt::MiddleButton) { + container->dragScrollPress(event->pos()); } else { drag_start_x = event->pos().x(); drag_start_y = event->pos().y(); @@ -232,9 +235,11 @@ void ViewerWidget::mousePressEvent(QMouseEvent* event) { } void ViewerWidget::mouseMoveEvent(QMouseEvent* event) { - if (dragging) { + if (dragging) { if (waveform) { seek_from_click(event->x()); + } else if (event->buttons() & Qt::MiddleButton) { + container->dragScrollMove(event->pos()); } else if (gizmos == NULL) { QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData; diff --git a/ui/viewerwidget.h b/ui/viewerwidget.h index 965e86f3d..8d9899151 100644 --- a/ui/viewerwidget.h +++ b/ui/viewerwidget.h @@ -16,6 +16,7 @@ struct FootageStream; class QOpenGLFramebufferObject; class Effect; class EffectGizmo; +class ViewerContainer; struct GLTextureCoords; class ViewerWidget : public QOpenGLWidget, QOpenGLFunctions @@ -27,6 +28,7 @@ public: void paintGL(); void initializeGL(); Viewer* viewer; + ViewerContainer* container; QOpenGLFramebufferObject* default_fbo;