diff options
Diffstat (limited to 'plugin/cursornavigationattached.cpp')
-rw-r--r-- | plugin/cursornavigationattached.cpp | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/plugin/cursornavigationattached.cpp b/plugin/cursornavigationattached.cpp index 44bcdb9..c6a450f 100644 --- a/plugin/cursornavigationattached.cpp +++ b/plugin/cursornavigationattached.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2018, 2019 Luxoft Sweden AB. All rights reserved. +** Copyright (C) 2018 - 2020 Luxoft Sweden AB. All rights reserved. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the cursor management module of the Qt Toolkit. @@ -41,12 +41,14 @@ #include "cursornavigation.h" #include <QQuickItem> #include <QQuickWindow> +#include <QVector2D> #include <QtMath> CursorNavigationAttached::CursorNavigationAttached(QQuickItem *parent) :QObject(parent), m_cursorNavigation(nullptr), m_parentNavigable(nullptr), +m_angleOffset(0.0), m_acceptsCursor(false), m_hasCursor(false), m_trapsCursor(false), @@ -57,18 +59,36 @@ m_escapeTarget(nullptr) if (parent && item() && item()->window()) { - qDebug() << "Item has a window already"; + qCDebug(cursorNavigationLog) << "Item has a window already"; onWindowChanged(item()->window()); } } CursorNavigationAttached::~CursorNavigationAttached() { - qWarning() << "~CursorNavigationAttached"; + qCWarning(cursorNavigationLog) << "~CursorNavigationAttached"; + + for (auto && child: m_children) { + child->m_parentNavigable = nullptr; + } + if (m_cursorNavigation) m_cursorNavigation->unregisterItem(this); } +double CursorNavigationAttached::angleOffset() const +{ + return m_angleOffset; +} + +void CursorNavigationAttached::setAngleOffset(double angleOffset) +{ + if (angleOffset != m_angleOffset) { + m_angleOffset = angleOffset; + emit angleOffsetChanged(m_angleOffset); + qCWarning(cursorNavigationLog) << "rotation changed " << m_angleOffset; + } +} bool CursorNavigationAttached::acceptsCursor() const { return m_acceptsCursor; @@ -122,7 +142,7 @@ void CursorNavigationAttached::setMagnitude(qreal angle, qreal magnitude) m_cursorNavigation->m_currentItem->magnitudeChanged(angle, magnitude); } -void CursorNavigationAttached::setMagnitude(QVector2D vector) +void CursorNavigationAttached::setMagnitude(const QVector2D &vector) { if (m_cursorNavigation && m_cursorNavigation->m_currentItem) m_cursorNavigation->m_currentItem->magnitudeChanged( @@ -132,23 +152,25 @@ void CursorNavigationAttached::setMagnitude(QVector2D vector) void CursorNavigationAttached::move(qreal angle, qreal tolerance) { if (m_cursorNavigation) { - qWarning() << "move"; + qCWarning(cursorNavigationLog) << "move"; qreal a = qDegreesToRadians(angle); qreal t = qDegreesToRadians(qFabs(std::fmod(tolerance, 180))); CursorNavigationAttached *item = m_cursorNavigation->m_currentItem; - if (m_cursorNavigation->move(a, t, false) && item) + double offset = item ? item->angleOffset() : 0.0; + if (m_cursorNavigation->move(a, offset, t, false) && item) item->moved(a,t); } } -void CursorNavigationAttached::move(QVector2D vector, qreal tolerance) +void CursorNavigationAttached::move(const QVector2D &vector, qreal tolerance) { if (m_cursorNavigation) { - qWarning() << "move (vector)"; + qCWarning(cursorNavigationLog) << "move (vector)"; qreal a = qAtan2(vector.y(), vector.x()); qreal t = qDegreesToRadians(qFabs(std::fmod(tolerance, 180))); CursorNavigationAttached *item = m_cursorNavigation->m_currentItem; - if (m_cursorNavigation->move(a, t, false) && item) + double offset = item ? item->angleOffset() : 0.0; + if (m_cursorNavigation->move(a, offset, t, false) && item) item->moved(a,t); } } @@ -163,7 +185,7 @@ QQuickItem *CursorNavigationAttached::find(qreal angle, qreal tolerance) return nullptr; } -QQuickItem *CursorNavigationAttached::find(QVector2D vector, qreal tolerance) +QQuickItem *CursorNavigationAttached::find(const QVector2D &vector, qreal tolerance) { if (m_cursorNavigation) { qreal a = qAtan2(vector.y(), vector.x()); @@ -177,7 +199,8 @@ void CursorNavigationAttached::moveUp() { if (m_cursorNavigation) { CursorNavigationAttached *item = m_cursorNavigation->m_currentItem; - if (m_cursorNavigation->move(qDegreesToRadians(-90.0f), 0, true) && item) + double offset = item ? item->angleOffset() : 0.0; + if (m_cursorNavigation->move(qDegreesToRadians(-90.0f), offset, 0, true) && item) item->movedUp(); } } @@ -186,7 +209,8 @@ void CursorNavigationAttached::moveDown() { if (m_cursorNavigation) { CursorNavigationAttached *item = m_cursorNavigation->m_currentItem; - if (m_cursorNavigation->move(qDegreesToRadians(90.0f), 0, true) && item) + double offset = item ? item->angleOffset() : 0.0; + if (m_cursorNavigation->move(qDegreesToRadians(90.0f), offset, 0, true) && item) item->movedDown(); } } @@ -195,7 +219,8 @@ void CursorNavigationAttached::moveRight() { if (m_cursorNavigation) { CursorNavigationAttached *item = m_cursorNavigation->m_currentItem; - if (m_cursorNavigation->move(qDegreesToRadians(0.0f), 0, true) && item) + double offset = item ? item->angleOffset() : 0.0; + if (m_cursorNavigation->move(qDegreesToRadians(0.0f), offset, 0, true) && item) item->movedRight(); } } @@ -204,7 +229,8 @@ void CursorNavigationAttached::moveLeft() { if (m_cursorNavigation) { CursorNavigationAttached *item = m_cursorNavigation->m_currentItem; - if (m_cursorNavigation->move(qDegreesToRadians(180.0f), 0, true) && item) + double offset = item ? item->angleOffset() : 0.0; + if (m_cursorNavigation->move(qDegreesToRadians(180.0f), offset, 0, true) && item) item->movedLeft(); } } @@ -252,7 +278,7 @@ QQuickItem *CursorNavigationAttached::currentItem() void CursorNavigationAttached::onWindowChanged(QQuickWindow *window) { - qDebug() << "window changed, window = " << window; + qCDebug(cursorNavigationLog) << "window changed, window = " << window; if (m_cursorNavigation && m_acceptsCursor) m_cursorNavigation->unregisterItem(this); |