diff options
author | Antti Hölttä <AHoelttae@luxoft.com> | 2018-10-30 15:40:04 +0100 |
---|---|---|
committer | Antti Hölttä <AHoelttae@luxoft.com> | 2019-03-18 16:30:59 +0100 |
commit | 00fa5d9215d32124292fe3e45372acebac7b9d31 (patch) | |
tree | 021b35b301ae990ac9842f5ebf21d8c51db718a5 /plugin/spatialnavigation4dir.cpp | |
parent | 2f4ec044ee4c7cf14481e1e0b86fecf804fcd770 (diff) |
Refactor item registration with scopes in mind
ItemRegister class removed and items now keep track of their own
cursor navigable child items. Navigation happens now only between siblings.
Diffstat (limited to 'plugin/spatialnavigation4dir.cpp')
-rw-r--r-- | plugin/spatialnavigation4dir.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/plugin/spatialnavigation4dir.cpp b/plugin/spatialnavigation4dir.cpp index fa1657e..a6965b0 100644 --- a/plugin/spatialnavigation4dir.cpp +++ b/plugin/spatialnavigation4dir.cpp @@ -1,4 +1,5 @@ #include "spatialnavigation4dir.h" +#include "cursornavigationattached.h" #include <QQuickItem> #include <QDebug> #include <algorithm> @@ -15,15 +16,15 @@ float distanceSquared(const QRectF& item1, const QRectF& item2) return dx*dx+dy*dy; } -SpatialNavigation4Dir::SpatialNavigation4Dir(ItemRegister *itemRegister) - :CursorNavigationAlgorithm (itemRegister) +SpatialNavigation4Dir::SpatialNavigation4Dir() { } -QQuickItem* SpatialNavigation4Dir::getNextCandidate(const QList<QQuickItem*> &candidates, - const QQuickItem *currentItem, - const CursorNavigationCommand &cmd) +CursorNavigationAttached* SpatialNavigation4Dir::getNextCandidate( + const QList<CursorNavigationAttached*> &candidates, + const CursorNavigationAttached *currentItem, + const CursorNavigationCommand &cmd) { if (candidates.isEmpty()) return nullptr; @@ -47,8 +48,8 @@ QQuickItem* SpatialNavigation4Dir::getNextCandidate(const QList<QQuickItem*> &ca std::function<bool(const QRectF&)> isInProjection; //scene coords of the current item - const QRectF currentItemSceneRect = currentItem->mapRectToScene(QRectF( 0, 0, - currentItem->width(), currentItem->height() )); + const QRectF currentItemSceneRect = currentItem->item()->mapRectToScene(QRectF( 0, 0, + currentItem->item()->width(), currentItem->item()->height() )); //NOTICE: overlapping candidates will be ignored for now (TODO, this needs to be changed) @@ -90,21 +91,22 @@ QQuickItem* SpatialNavigation4Dir::getNextCandidate(const QList<QQuickItem*> &ca return nullptr; } - std::pair<QQuickItem*,int> closest(nullptr,0); + std::pair<CursorNavigationAttached*,int> closest(nullptr,0); //qDebug() << "current: x=" << currentItemSceneRect.x() << " y=" << currentItemSceneRect.y(); for (auto candidate : candidates) { - if (!candidate->isVisible() || !candidate->isEnabled()) { + QQuickItem *candidateItem = candidate->item(); + if (!candidateItem->isVisible() || !candidateItem->isEnabled()) { //qDebug() << "skipping a invisible/disabled item"; continue; } //scene coords of the candidate - QRectF candidateSceneRect = candidate->mapRectToScene( + QRectF candidateSceneRect = candidateItem->mapRectToScene( QRect( 0, 0, - candidate->width(), candidate->height() )); + candidateItem->width(), candidateItem->height() )); //qDebug() << "x=" << candidateSceneRect.x() << " y=" << candidateSceneRect.y(); @@ -122,9 +124,9 @@ QQuickItem* SpatialNavigation4Dir::getNextCandidate(const QList<QQuickItem*> &ca if (closest.first) { - qDebug() << "chosen one: " << closest.first->mapRectToScene( + qDebug() << "chosen one: " << closest.first->item()->mapRectToScene( QRect( 0, 0, - closest.first->width(), closest.first->height() )); + closest.first->item()->width(), closest.first->item()->height() )); } if (!closest.first) { @@ -132,15 +134,16 @@ QQuickItem* SpatialNavigation4Dir::getNextCandidate(const QList<QQuickItem*> &ca for (auto candidate : candidates) { - if (!candidate->isVisible() || !candidate->isEnabled()) { + QQuickItem *candidateItem = candidate->item(); + if (!candidateItem->isVisible() || !candidateItem->isEnabled()) { //qDebug() << "skipping a invisible/disabled item"; continue; } //scene coords of the candidate - QRectF candidateSceneRect = candidate->mapRectToScene( + QRectF candidateSceneRect = candidateItem->mapRectToScene( QRect( 0, 0, - candidate->width(), candidate->height() )); + candidateItem->width(), candidateItem->height() )); if (isInDirection(candidateSceneRect)) { |