aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickmenu.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-05-02 15:38:09 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2018-05-03 09:22:25 +0000
commit1265a3986daccd069c5ca8577cf237cb628dd4d3 (patch)
tree262d8805cbc0118efec4e1a5bae1167c021530f9 /src/quicktemplates2/qquickmenu.cpp
parent09b9888ddd52fc6d32ab3353a938b0784ebfd328 (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.cpp38
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()