Improved drag-to-scroll activation on pinout widget, allowing for activation even in the absence of widget focus

This commit is contained in:
Nav
2025-02-19 23:20:26 +00:00
parent 524b1e3e91
commit 2ceb7edaa4
2 changed files with 21 additions and 0 deletions

View File

@@ -50,4 +50,23 @@ namespace Widgets::PinoutWidgets
QGraphicsView::keyReleaseEvent(event); QGraphicsView::keyReleaseEvent(event);
} }
void PinoutContainer::mousePressEvent(QMouseEvent* event) {
if (this->dragMode() == QGraphicsView::DragMode::ScrollHandDrag) {
return QGraphicsView::mousePressEvent(event);
}
const auto modifiers = event->modifiers();
if ((modifiers & Qt::KeyboardModifier::ControlModifier) != 0) {
const auto viewSize = this->size();
const auto sceneRect = this->pinoutScene->sceneRect();
this->setDragMode(
sceneRect.width() > viewSize.width() || sceneRect.height() > viewSize.height()
? QGraphicsView::DragMode::ScrollHandDrag
: QGraphicsView::DragMode::NoDrag
);
}
return QGraphicsView::mousePressEvent(event);
}
} }

View File

@@ -3,6 +3,7 @@
#include <QGraphicsView> #include <QGraphicsView>
#include <QResizeEvent> #include <QResizeEvent>
#include <QKeyEvent> #include <QKeyEvent>
#include <QMouseEvent>
#include "src/Targets/TargetDescriptor.hpp" #include "src/Targets/TargetDescriptor.hpp"
@@ -21,6 +22,7 @@ namespace Widgets::PinoutWidgets
void resizeEvent(QResizeEvent* event) override; void resizeEvent(QResizeEvent* event) override;
void keyPressEvent(QKeyEvent* event) override; void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
protected: protected:
const Targets::TargetDescriptor& targetDescriptor; const Targets::TargetDescriptor& targetDescriptor;