diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index 467a33b40a3..1aac7a17cd8 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -134,7 +134,6 @@ extend_qtc_plugin(QmlDesigner modelnodeoperations.cpp modelnodeoperations.h formatoperation.cpp formatoperation.h navigation2d.cpp navigation2d.h - gestures.cpp gestures.h qmldesignericonprovider.cpp qmldesignericonprovider.h selectioncontext.cpp selectioncontext.h theme.cpp theme.h diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore.pri b/src/plugins/qmldesigner/components/componentcore/componentcore.pri index a64f61ab466..49d646d4627 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore.pri +++ b/src/plugins/qmldesigner/components/componentcore/componentcore.pri @@ -5,7 +5,6 @@ SOURCES += addimagesdialog.cpp SOURCES += changestyleaction.cpp SOURCES += theme.cpp SOURCES += findimplementation.cpp -SOURCES += gestures.cpp SOURCES += addsignalhandlerdialog.cpp SOURCES += layoutingridlayout.cpp SOURCES += abstractactiongroup.cpp @@ -27,7 +26,6 @@ HEADERS += addimagesdialog.h HEADERS += changestyleaction.h HEADERS += theme.h HEADERS += findimplementation.h -HEADERS += gestures.h HEADERS += addsignalhandlerdialog.h HEADERS += layoutingridlayout.h HEADERS += abstractactiongroup.h diff --git a/src/plugins/qmldesigner/components/componentcore/gestures.cpp b/src/plugins/qmldesigner/components/componentcore/gestures.cpp deleted file mode 100644 index 29ff23c2435..00000000000 --- a/src/plugins/qmldesigner/components/componentcore/gestures.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Design Tooling -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "gestures.h" - -#include - -namespace QmlDesigner { - -Qt::GestureType TwoFingerSwipe::m_type = static_cast(0); - -TwoFingerSwipe::TwoFingerSwipe() {} - -Qt::GestureType TwoFingerSwipe::type() -{ - return m_type; -} - -void TwoFingerSwipe::registerRecognizer() -{ - m_type = QGestureRecognizer::registerRecognizer(new TwoFingerSwipeRecognizer()); -} - -QPointF TwoFingerSwipe::direction() const -{ - return m_current.center() - m_last.center(); -} - -void TwoFingerSwipe::reset() -{ - m_start = QLineF(); - m_current = QLineF(); - m_last = QLineF(); -} - -QGestureRecognizer::Result TwoFingerSwipe::begin(QTouchEvent *event) -{ - Q_UNUSED(event); - return QGestureRecognizer::MayBeGesture; -} - -QGestureRecognizer::Result TwoFingerSwipe::update(QTouchEvent *event) -{ - if (event->touchPoints().size() != 2) { - if (state() == Qt::NoGesture) - return QGestureRecognizer::Ignore; - else - return QGestureRecognizer::FinishGesture; - } - - QTouchEvent::TouchPoint p0 = event->touchPoints().at(0); - QTouchEvent::TouchPoint p1 = event->touchPoints().at(1); - - QLineF line(p0.scenePos(), p1.screenPos()); - - if (m_start.isNull()) { - m_start = line; - m_current = line; - m_last = line; - } else { - auto deltaLength = line.length() - m_current.length(); - auto deltaCenter = QLineF(line.center(), m_current.center()).length(); - if (deltaLength > deltaCenter) - return QGestureRecognizer::CancelGesture; - - m_last = m_current; - m_current = line; - } - - setHotSpot(m_current.center()); - - return QGestureRecognizer::TriggerGesture; -} - -QGestureRecognizer::Result TwoFingerSwipe::end(QTouchEvent *event) -{ - Q_UNUSED(event); - bool finish = state() != Qt::NoGesture; - - reset(); - - if (finish) - return QGestureRecognizer::FinishGesture; - else - return QGestureRecognizer::CancelGesture; -} - -TwoFingerSwipeRecognizer::TwoFingerSwipeRecognizer() - : QGestureRecognizer() -{} - -QGesture *TwoFingerSwipeRecognizer::create(QObject *target) -{ - if (target && target->isWidgetType()) - qobject_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); - - return new TwoFingerSwipe; -} - -QGestureRecognizer::Result TwoFingerSwipeRecognizer::recognize(QGesture *gesture, - QObject *, - QEvent *event) -{ - if (gesture->gestureType() != TwoFingerSwipe::type()) - return QGestureRecognizer::Ignore; - - TwoFingerSwipe *swipe = static_cast(gesture); - QTouchEvent *touch = static_cast(event); - - switch (event->type()) { - case QEvent::TouchBegin: - return swipe->begin(touch); - - case QEvent::TouchUpdate: - return swipe->update(touch); - - case QEvent::TouchEnd: - return swipe->end(touch); - - default: - return QGestureRecognizer::Ignore; - } -} - -void TwoFingerSwipeRecognizer::reset(QGesture *gesture) -{ - if (gesture->gestureType() == TwoFingerSwipe::type()) { - TwoFingerSwipe *swipe = static_cast(gesture); - swipe->reset(); - } - QGestureRecognizer::reset(gesture); -} - -} // End namespace QmlDesigner. diff --git a/src/plugins/qmldesigner/components/componentcore/gestures.h b/src/plugins/qmldesigner/components/componentcore/gestures.h deleted file mode 100644 index 3100560904b..00000000000 --- a/src/plugins/qmldesigner/components/componentcore/gestures.h +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Design Tooling -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ -#pragma once - -#include -#include -#include - -QT_FORWARD_DECLARE_CLASS(QTouchEvent) - -namespace QmlDesigner { - -class TwoFingerSwipe : public QGesture -{ - Q_OBJECT - -public: - TwoFingerSwipe(); - - static Qt::GestureType type(); - static void registerRecognizer(); - - QPointF direction() const; - - void reset(); - QGestureRecognizer::Result begin(QTouchEvent *event); - QGestureRecognizer::Result update(QTouchEvent *event); - QGestureRecognizer::Result end(QTouchEvent *event); - -private: - static Qt::GestureType m_type; - - QLineF m_start; - QLineF m_current; - QLineF m_last; -}; - -class TwoFingerSwipeRecognizer : public QGestureRecognizer -{ -public: - TwoFingerSwipeRecognizer(); - - QGesture *create(QObject *target) override; - - QGestureRecognizer::Result recognize(QGesture *gesture, QObject *watched, QEvent *event) override; - - void reset(QGesture *gesture) override; -}; - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/navigation2d.cpp b/src/plugins/qmldesigner/components/componentcore/navigation2d.cpp index eccd8a517ed..3399c2a8914 100644 --- a/src/plugins/qmldesigner/components/componentcore/navigation2d.cpp +++ b/src/plugins/qmldesigner/components/componentcore/navigation2d.cpp @@ -23,44 +23,38 @@ ** ****************************************************************************/ #include "navigation2d.h" -#include "gestures.h" #include +#include #include +#include #include namespace QmlDesigner { -Navigation2dScrollBar::Navigation2dScrollBar(QWidget *parent) - : QScrollBar(parent) -{} - -bool Navigation2dScrollBar::postEvent(QEvent *event) +void Navigation2dFilter::scroll(const QPointF &direction, QScrollBar *sbx, QScrollBar *sby) { - if (event->type() == QEvent::Wheel) { - wheelEvent(static_cast(event)); - return true; - } - return false; + auto doScroll = [](QScrollBar *sb, float distance) { + if (sb) { + // max - min + pageStep = sceneRect.size * scale + float d1 = sb->maximum() - sb->minimum(); + float d2 = d1 + sb->pageStep(); + + float val = (distance / d2) * d1; + sb->setValue(sb->value() - val); + } + }; + + doScroll(sbx, direction.x()); + doScroll(sby, direction.y()); } -void Navigation2dScrollBar::wheelEvent(QWheelEvent *event) -{ - if (!event->angleDelta().isNull()) - QScrollBar::wheelEvent(event); -} - - -Navigation2dFilter::Navigation2dFilter(QWidget *parent, Navigation2dScrollBar *scrollbar) +Navigation2dFilter::Navigation2dFilter(QWidget *parent) : QObject(parent) - , m_scrollbar(scrollbar) { - if (parent) { + if (parent) parent->grabGesture(Qt::PinchGesture); - if (!scrollbar) - parent->grabGesture(TwoFingerSwipe::type()); - } } bool Navigation2dFilter::eventFilter(QObject *object, QEvent *event) @@ -82,34 +76,39 @@ bool Navigation2dFilter::gestureEvent(QGestureEvent *event) event->accept(); return true; } - } else if (TwoFingerSwipe *swipe = static_cast( - event->gesture(TwoFingerSwipe::type()))) { - emit panChanged(swipe->direction()); - event->accept(); - return true; } return false; } bool Navigation2dFilter::wheelEvent(QWheelEvent *event) { - if (m_scrollbar) { - if (m_scrollbar->postEvent(event)) - event->ignore(); + if (event->source() == Qt::MouseEventSynthesizedBySystem) { + emit panChanged(QPointF(event->pixelDelta())); + event->accept(); + return true; } else if (event->source() == Qt::MouseEventNotSynthesized) { - if (event->modifiers().testFlag(Qt::ControlModifier)) { - if (QPointF angle = event->angleDelta(); !angle.isNull()) { - double delta = std::abs(angle.x()) > std::abs(angle.y()) ? angle.x() : angle.y(); - if (delta > 0) - emit zoomIn(); - else - emit zoomOut(); - event->accept(); - return true; + + auto zoomInSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomIn); + bool zoomInConnected = QObject::isSignalConnected(zoomInSignal); + + auto zoomOutSignal = QMetaMethod::fromSignal(&Navigation2dFilter::zoomOut); + bool zoomOutConnected = QObject::isSignalConnected(zoomOutSignal); + + if (zoomInConnected && zoomOutConnected) { + if (event->modifiers().testFlag(Qt::ControlModifier)) { + if (QPointF angle = event->angleDelta(); !angle.isNull()) { + double delta = std::abs(angle.x()) > std::abs(angle.y()) ? angle.x() : angle.y(); + if (delta > 0) + emit zoomIn(); + else + emit zoomOut(); + event->accept(); + return true; + } } } } - return true; + return false; } } // End namespace QmlDesigner. diff --git a/src/plugins/qmldesigner/components/componentcore/navigation2d.h b/src/plugins/qmldesigner/components/componentcore/navigation2d.h index fe432b4a6b4..8a4513ed821 100644 --- a/src/plugins/qmldesigner/components/componentcore/navigation2d.h +++ b/src/plugins/qmldesigner/components/componentcore/navigation2d.h @@ -24,27 +24,14 @@ ****************************************************************************/ #pragma once -#include +#include QT_FORWARD_DECLARE_CLASS(QGestureEvent) +QT_FORWARD_DECLARE_CLASS(QScrollBar) QT_FORWARD_DECLARE_CLASS(QWheelEvent) namespace QmlDesigner { -class Navigation2dScrollBar : public QScrollBar -{ - Q_OBJECT - -public: - Navigation2dScrollBar(QWidget *parent = nullptr); - - bool postEvent(QEvent *event); - -protected: - void wheelEvent(QWheelEvent *event) override; -}; - - class Navigation2dFilter : public QObject { Q_OBJECT @@ -57,7 +44,9 @@ signals: void zoomOut(); public: - Navigation2dFilter(QWidget *parent = nullptr, Navigation2dScrollBar *scrollbar = nullptr); + static void scroll(const QPointF &direction, QScrollBar *sbx, QScrollBar *sby); + + Navigation2dFilter(QWidget *parent); protected: bool eventFilter(QObject *obj, QEvent *event) override; @@ -65,7 +54,6 @@ protected: private: bool gestureEvent(QGestureEvent *event); bool wheelEvent(QWheelEvent *event); - Navigation2dScrollBar *m_scrollbar = nullptr; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp index acc77acf0a5..534799efcd9 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -40,16 +41,20 @@ namespace QmlDesigner { CurveEditor::CurveEditor(CurveEditorModel *model, QWidget *parent) : QWidget(parent) , m_tree(new TreeView(model, this)) - , m_view(new GraphicsView(model)) + , m_view(new GraphicsView(model, this)) { auto *splitter = new QSplitter; splitter->addWidget(m_tree); splitter->addWidget(m_view); splitter->setStretchFactor(1, 2); + QScrollArea* area = new QScrollArea; + area->setWidget(splitter); + area->setWidgetResizable(true); + auto *box = new QVBoxLayout; box->addWidget(createToolBar(model)); - box->addWidget(splitter); + box->addWidget(area); setLayout(box); connect(m_tree, &TreeView::treeItemLocked, model, &CurveEditorModel::setLocked); diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp index 23daabba66e..02a8dcd3a76 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp @@ -45,6 +45,18 @@ namespace QmlDesigner { +template< typename T > +T* nextParentOfType(QWidget* widget) +{ + auto* p = widget->parent(); + while (p) { + if (T* w = qobject_cast(p)) + return w; + p = p->parent(); + } + return nullptr; +} + GraphicsView::GraphicsView(CurveEditorModel *model, QWidget *parent) : QGraphicsView(parent) , m_dragging(false) @@ -65,7 +77,7 @@ GraphicsView::GraphicsView(CurveEditorModel *model, QWidget *parent) setResizeAnchor(QGraphicsView::NoAnchor); setRenderHint(QPainter::Antialiasing, true); setTransformationAnchor(QGraphicsView::NoAnchor); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); @@ -78,12 +90,19 @@ GraphicsView::GraphicsView(CurveEditorModel *model, QWidget *parent) connect(m_scene, &GraphicsScene::curveChanged, itemSlot); - QmlDesigner::Navigation2dFilter *filter = new QmlDesigner::Navigation2dFilter(this); + QmlDesigner::Navigation2dFilter *filter = new QmlDesigner::Navigation2dFilter(viewport()); + connect(filter, &Navigation2dFilter::panChanged, [this](const QPointF &direction) { + QScrollBar* verticalBar = nullptr; + if (QScrollArea* area = nextParentOfType< QScrollArea >(this)) + verticalBar = area->verticalScrollBar(); + Navigation2dFilter::scroll(direction, horizontalScrollBar(), verticalBar); + }); + auto zoomChanged = &QmlDesigner::Navigation2dFilter::zoomChanged; connect(filter, zoomChanged, [this](double scale, const QPointF &pos) { applyZoom(m_zoomX + scale, m_zoomY, mapToGlobal(pos.toPoint())); }); - installEventFilter(filter); + viewport()->installEventFilter(filter); applyZoom(m_zoomX, m_zoomY); update(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index 4cfa6402d56..d98e43ffef9 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp @@ -62,28 +62,12 @@ FormEditorGraphicsView::FormEditorGraphicsView(QWidget *parent) // eventFilter method so it works also for the space scrolling case as expected QCoreApplication::instance()->installEventFilter(this); - QmlDesigner::Navigation2dFilter *filter = new QmlDesigner::Navigation2dFilter(this); + QmlDesigner::Navigation2dFilter *filter = new QmlDesigner::Navigation2dFilter(viewport()); connect(filter, &Navigation2dFilter::zoomIn, this, &FormEditorGraphicsView::zoomIn); connect(filter, &Navigation2dFilter::zoomOut, this, &FormEditorGraphicsView::zoomOut); - auto panChanged = &Navigation2dFilter::panChanged; - connect(filter, panChanged, [this](const QPointF &direction) { - QScrollBar *sbx = horizontalScrollBar(); - QScrollBar *sby = verticalScrollBar(); - - // max - min + pageStep = sceneRect.size * scale - QPointF min(sbx->minimum(), sby->minimum()); - QPointF max(sbx->maximum(), sby->maximum()); - QPointF step(sbx->pageStep(), sby->pageStep()); - - QPointF d1 = max - min; - QPointF d2 = d1 + step; - - QPoint val = QPointF((direction.x() / d2.x()) * d1.x(), (direction.y() / d2.y()) * d1.y()) - .toPoint(); - - sbx->setValue(sbx->value() - val.x()); - sby->setValue(sby->value() - val.y()); + connect(filter, &Navigation2dFilter::panChanged, [this](const QPointF &direction) { + Navigation2dFilter::scroll(direction, horizontalScrollBar(), verticalScrollBar()); }); auto zoomChanged = &Navigation2dFilter::zoomChanged; @@ -93,7 +77,7 @@ FormEditorGraphicsView::FormEditorGraphicsView(QWidget *parent) emit this->zoomChanged(transform().m11()); } }); - installEventFilter(filter); + viewport()->installEventFilter(filter); } bool FormEditorGraphicsView::eventFilter(QObject *watched, QEvent *event) @@ -123,8 +107,8 @@ void FormEditorGraphicsView::wheelEvent(QWheelEvent *event) { if (event->modifiers().testFlag(Qt::ControlModifier)) event->ignore(); - else if (event->source() == Qt::MouseEventNotSynthesized) - QGraphicsView::wheelEvent(event); + + QGraphicsView::wheelEvent(event); } void FormEditorGraphicsView::mousePressEvent(QMouseEvent *event) diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index b583863015f..f4ff114bf62 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -118,7 +118,7 @@ TimelineWidget::TimelineWidget(TimelineView *view) , m_toolbar(new TimelineToolBar(this)) , m_rulerView(new QGraphicsView(this)) , m_graphicsView(new QGraphicsView(this)) - , m_scrollbar(new Navigation2dScrollBar(this)) + , m_scrollbar(new QScrollBar(this)) , m_statusBar(new QLabel(this)) , m_timelineView(view) , m_graphicsScene(new TimelineGraphicsScene(this)) @@ -160,7 +160,6 @@ TimelineWidget::TimelineWidget(TimelineView *view) m_graphicsView->setFrameShape(QFrame::NoFrame); m_graphicsView->setFrameShadow(QFrame::Plain); m_graphicsView->setLineWidth(0); - m_graphicsView->setVerticalScrollBar(new Navigation2dScrollBar); m_graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); m_graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -274,13 +273,19 @@ TimelineWidget::TimelineWidget(TimelineView *view) m_timelineView->addNewTimelineDialog(); }); - Navigation2dFilter *filter = new Navigation2dFilter(this, m_scrollbar); - connect(filter, &Navigation2dFilter::zoomChanged, [this](double scale, const QPointF& pos) { - int s = static_cast(std::round(scale*100.)); - double ps = m_graphicsScene->mapFromScene(pos.x()); - m_graphicsScene->setZoom(std::clamp(m_graphicsScene->zoom() + s, 0, 100), ps); + Navigation2dFilter *filter = new Navigation2dFilter(m_graphicsView->viewport()); + connect(filter, &Navigation2dFilter::panChanged, [this](const QPointF &direction) { + Navigation2dFilter::scroll(direction, m_scrollbar, m_graphicsView->verticalScrollBar()); }); - installEventFilter(filter); + + connect(filter, &Navigation2dFilter::zoomChanged, [this](double scale, const QPointF &pos) { + int s = static_cast(std::round(scale*100.)); + int scaleFactor = std::clamp(m_graphicsScene->zoom() + s, 0, 100); + double ps = m_graphicsScene->mapFromScene(pos.x()); + m_graphicsScene->setZoom(scaleFactor, ps); + m_toolbar->setScaleFactor(scaleFactor); + }); + m_graphicsView->viewport()->installEventFilter(filter); m_playbackAnimation->stop(); auto playAnimation = [this](QVariant frame) { graphicsScene()->setCurrentFrame(qRound(frame.toDouble())); }; diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.h b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.h index 3fa3db1abf9..ebaf00104dc 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.h @@ -40,6 +40,7 @@ QT_FORWARD_DECLARE_CLASS(QShowEvent) QT_FORWARD_DECLARE_CLASS(QString) QT_FORWARD_DECLARE_CLASS(QPushButton) QT_FORWARD_DECLARE_CLASS(QVariantAnimation) +QT_FORWARD_DECLARE_CLASS(QScrollBar) namespace QmlDesigner { @@ -97,7 +98,7 @@ private: QGraphicsView *m_graphicsView = nullptr; - Navigation2dScrollBar *m_scrollbar = nullptr; + QScrollBar *m_scrollbar = nullptr; QLabel *m_statusBar = nullptr; diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp index 1c8c042fdc3..6077c9de28c 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.cpp @@ -90,7 +90,7 @@ TransitionEditorWidget::TransitionEditorWidget(TransitionEditorView *view) , m_toolbar(new TransitionEditorToolBar(this)) , m_rulerView(new QGraphicsView(this)) , m_graphicsView(new QGraphicsView(this)) - , m_scrollbar(new Navigation2dScrollBar(this)) + , m_scrollbar(new QScrollBar(this)) , m_statusBar(new QLabel(this)) , m_transitionEditorView(view) , m_graphicsScene(new TransitionEditorGraphicsScene(this)) @@ -129,7 +129,6 @@ TransitionEditorWidget::TransitionEditorWidget(TransitionEditorView *view) m_graphicsView->setFrameShape(QFrame::NoFrame); m_graphicsView->setFrameShadow(QFrame::Plain); m_graphicsView->setLineWidth(0); - m_graphicsView->setVerticalScrollBar(new Navigation2dScrollBar); m_graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); m_graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -223,13 +222,19 @@ TransitionEditorWidget::TransitionEditorWidget(TransitionEditorView *view) m_transitionEditorView->addNewTransition(); }); - Navigation2dFilter *filter = new Navigation2dFilter(this, m_scrollbar); - connect(filter, &Navigation2dFilter::zoomChanged, [this](double scale, const QPointF& pos) { - int s = static_cast(std::round(scale*100.)); - double ps = m_graphicsScene->mapFromScene(pos.x()); - m_graphicsScene->setZoom(std::clamp(m_graphicsScene->zoom() + s, 0, 100), ps); + Navigation2dFilter *filter = new Navigation2dFilter(m_graphicsView->viewport()); + connect(filter, &Navigation2dFilter::panChanged, [this](const QPointF &direction) { + Navigation2dFilter::scroll(direction, m_scrollbar, m_graphicsView->verticalScrollBar()); }); - installEventFilter(filter); + + connect(filter, &Navigation2dFilter::zoomChanged, [this](double scale, const QPointF &pos) { + int s = static_cast(std::round(scale*100.)); + int scaleFactor = std::clamp(m_graphicsScene->zoom() + s, 0, 100); + double ps = m_graphicsScene->mapFromScene(pos.x()); + m_graphicsScene->setZoom(scaleFactor, ps); + m_toolbar->setScaleFactor(scaleFactor); + }); + m_graphicsView->viewport()->installEventFilter(filter); } void TransitionEditorWidget::setTransitionActive(bool b) diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h index f1c4174418a..ea4b2a6affa 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorwidget.h @@ -40,6 +40,7 @@ QT_FORWARD_DECLARE_CLASS(QResizeEvent) QT_FORWARD_DECLARE_CLASS(QShowEvent) QT_FORWARD_DECLARE_CLASS(QString) QT_FORWARD_DECLARE_CLASS(QPushButton) +QT_FORWARD_DECLARE_CLASS(QScrollBar) namespace QmlDesigner { @@ -47,7 +48,6 @@ class TransitionEditorView; class TransitionEditorToolBar; class TransitionEditorGraphicsScene; class ModelNode; -class Navigation2dScrollBar; class TransitionEditorWidget : public QWidget { @@ -88,7 +88,7 @@ private: QGraphicsView *m_graphicsView = nullptr; - Navigation2dScrollBar *m_scrollbar = nullptr; + QScrollBar *m_scrollbar = nullptr; QLabel *m_statusBar = nullptr; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index b8affa11ff7..f23b43ddd95 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -33,7 +33,6 @@ #include "generateresource.h" #include "generatecmakelists.h" #include "nodeinstanceview.h" -#include "gestures.h" #include #include @@ -232,8 +231,6 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e if (QFontDatabase::addApplicationFont(fontPath) < 0) qCWarning(qmldesignerLog) << "Could not add font " << fontPath << "to font database"; - TwoFingerSwipe::registerRecognizer(); - return true; } diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs index a3b70ec9706..2ff2d3cb2bb 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.qbs +++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs @@ -461,8 +461,6 @@ Project { "componentcore/findimplementation.h", "componentcore/formatoperation.cpp", "componentcore/formatoperation.h", - "componentcore/gestures.cpp", - "componentcore/gestures.h", "componentcore/layoutingridlayout.cpp", "componentcore/layoutingridlayout.h", "componentcore/theme.cpp",