diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-05-02 15:38:09 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-05-03 09:22:25 +0000 |
commit | 1265a3986daccd069c5ca8577cf237cb628dd4d3 (patch) | |
tree | 262d8805cbc0118efec4e1a5bae1167c021530f9 /src/quicktemplates2/qquickmenu.cpp | |
parent | 09b9888ddd52fc6d32ab3353a938b0784ebfd328 (diff) |
Replace QQuickMenuPrivate::reposition() with QQuickMenuPositioner
Change-Id: Iea8c1b8609778604af06cc70eaefad21f00186bd
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickmenu.cpp')
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index 4e334bba..4cf18db2 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -40,6 +40,7 @@ #include "qquickmenubaritem_p.h" #include "qquickmenubar_p.h" #include "qquickpopupitem_p_p.h" +#include "qquickpopuppositioner_p_p.h" #include "qquickaction_p.h" #include <QtGui/qevent.h> @@ -183,6 +184,14 @@ static bool shouldCascade() #endif } +class QQuickMenuPositioner : public QQuickPopupPositioner +{ +public: + QQuickMenuPositioner(QQuickMenu *menu) : QQuickPopupPositioner(menu) { } + + void reposition() override; +}; + QQuickMenuPrivate::QQuickMenuPrivate() : cascade(shouldCascade()), hoverTimer(0), @@ -361,21 +370,30 @@ void QQuickMenuPrivate::itemGeometryChanged(QQuickItem *, QQuickGeometryChange, resizeItems(); } -void QQuickMenuPrivate::reposition() +QQuickPopupPositioner *QQuickMenuPrivate::getPositioner() { Q_Q(QQuickMenu); - if (parentMenu) { - if (cascade) { - if (popupItem->isMirrored()) - q->setPosition(QPointF(-q->width() - parentMenu->leftPadding() + q->overlap(), -q->topPadding())); - else if (parentItem) - q->setPosition(QPointF(parentItem->width() + parentMenu->rightPadding() - q->overlap(), -q->topPadding())); + if (!positioner) + positioner = new QQuickMenuPositioner(q); + return positioner; +} + +void QQuickMenuPositioner::reposition() +{ + QQuickMenu *menu = static_cast<QQuickMenu *>(popup()); + QQuickMenuPrivate *p = QQuickMenuPrivate::get(menu); + if (p->parentMenu) { + if (p->cascade) { + if (p->popupItem->isMirrored()) + menu->setPosition(QPointF(-menu->width() - p->parentMenu->leftPadding() + menu->overlap(), -menu->topPadding())); + else if (p->parentItem) + menu->setPosition(QPointF(p->parentItem->width() + p->parentMenu->rightPadding() - menu->overlap(), -menu->topPadding())); } else { - q->setPosition(QPointF(parentMenu->x() + (parentMenu->width() - q->width()) / 2, - parentMenu->y() + (parentMenu->height() - q->height()) / 2)); + menu->setPosition(QPointF(p->parentMenu->x() + (p->parentMenu->width() - menu->width()) / 2, + p->parentMenu->y() + (p->parentMenu->height() - menu->height()) / 2)); } } - QQuickPopupPrivate::reposition(); + QQuickPopupPositioner::reposition(); } bool QQuickMenuPrivate::prepareEnterTransition() |