aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp20
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/selector.h2
2 files changed, 19 insertions, 3 deletions
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp
index 6119e8e9960..13fdeb72ed3 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/selector.cpp
@@ -58,14 +58,15 @@ void Selector::mousePress(QMouseEvent *event, GraphicsView *view)
if (view->hasActiveHandle())
return;
- if (select(SelectionTool::Undefined, view->globalToScene(event->globalPos()), view))
- applyPreSelection(view);
-
m_mouseInit = event->globalPos();
m_mouseCurr = event->globalPos();
QPointF click = view->globalToScene(m_mouseInit);
+ if (!isOverSelectedKeyframe(click, view))
+ if (select(SelectionTool::Undefined, click, view))
+ applyPreSelection(view);
+
m_lasso = QPainterPath(click);
m_lasso.closeSubpath();
@@ -119,6 +120,19 @@ void Selector::mouseRelease(QMouseEvent *event, GraphicsView *view)
m_rect = QRectF();
}
+bool Selector::isOverSelectedKeyframe(const QPointF &pos, GraphicsView *view)
+{
+ const auto itemList = view->items();
+ for (auto *item : itemList) {
+ if (auto *frame = qgraphicsitem_cast<KeyframeItem *>(item)) {
+ QRectF itemRect = frame->mapRectToScene(frame->boundingRect());
+ if (itemRect.contains(pos))
+ return frame->selected();
+ }
+ }
+ return false;
+}
+
bool Selector::select(const SelectionTool &tool, const QPointF &pos, GraphicsView *view)
{
auto selectWidthTool = [this, tool](SelectionMode mode, const QPointF &pos, GraphicsView *view) {
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/selector.h b/src/plugins/qmldesigner/components/curveeditor/detail/selector.h
index 1c955de5bef..4027cc87b1c 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/selector.h
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/selector.h
@@ -54,6 +54,8 @@ public:
void mouseRelease(QMouseEvent *event, GraphicsView *view);
private:
+ bool isOverSelectedKeyframe(const QPointF &pos, GraphicsView *view);
+
bool select(const SelectionTool &tool, const QPointF &pos, GraphicsView *view);
bool pressSelection(SelectionMode mode, const QPointF &pos, GraphicsView *view);