summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2021-02-12 10:04:51 +0100
committerMichal Klocek <michal.klocek@qt.io>2021-02-16 23:56:53 +0100
commitb30c29da75c48513c4b334d0f85dca5ef7a2919e (patch)
tree635353514a1a4faf1fee02798560d5e63092298d
parent0853d884440322659745415259e929f11c98bef3 (diff)
Fix popup position
This patch fixes popup position when popup have parent window. Make simple offset calculation and add rotated pupups support in another patch. Change-Id: Id53524375eeecbc316dc6f6bef7f32669a72beb3 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp44
1 files changed, 16 insertions, 28 deletions
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
index b847e35bd..e16ebd9ab 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
@@ -44,6 +44,16 @@
namespace QtWebEngineCore {
+static inline QPoint getOffset(QQuickItem *item)
+{
+ // get parent window (scene) offset
+ QPointF offset = item->mapFromScene(QPoint(0, 0));
+ offset = item->mapToGlobal(offset);
+ // get local offset
+ offset -= item->mapToScene(QPoint(0, 0));
+ return offset.toPoint();
+}
+
RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(
RenderWidgetHostViewQtDelegateQuick *realDelegate, QWindow *parent)
: QQuickWindow(parent), m_realDelegate(realDelegate), m_virtualParent(nullptr)
@@ -61,29 +71,12 @@ void RenderWidgetHostViewQtDelegateQuickWindow::setVirtualParent(QQuickItem *vir
m_virtualParent = virtualParent;
}
-static inline QRectF mapRectToGlobal(const QQuickItem *item, const QRectF &rect)
-{
- const QPointF p1 = item->mapToGlobal(rect.topLeft());
- const QPointF p2 = item->mapToGlobal(rect.bottomRight());
- return QRectF(p1, p2).normalized();
-}
-
-static inline QRectF mapRectFromGlobal(const QQuickItem *item, const QRectF &rect)
+void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &rect)
{
- const QPointF p1 = item->mapFromGlobal(rect.topLeft());
- const QPointF p2 = item->mapFromGlobal(rect.bottomRight());
- return QRectF(p1, p2).normalized();
-}
-
-void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &screenRect)
-{
- QRectF popupRect(screenRect);
- popupRect = mapRectFromGlobal(m_virtualParent, popupRect);
- popupRect = m_virtualParent->mapRectToScene(popupRect);
- popupRect = mapRectToGlobal(m_virtualParent, popupRect);
- m_realDelegate->setSize(popupRect.size());
- popupRect.setSize(screenRect.size());
- setGeometry(popupRect.toAlignedRect());
+ m_realDelegate->setSize(rect.size());
+ QRect geometry(rect);
+ geometry.moveTo(rect.topLeft() - getOffset(m_virtualParent));
+ setGeometry(geometry);
raise();
show();
}
@@ -149,12 +142,7 @@ void RenderWidgetHostViewQtDelegateQuickWindow::resize(int width, int height)
void RenderWidgetHostViewQtDelegateQuickWindow::move(const QPoint &screenPos)
{
- QRectF popupRect(screenPos, size());
- popupRect = mapRectFromGlobal(m_virtualParent, popupRect);
- popupRect = m_virtualParent->mapRectToScene(popupRect);
- popupRect = mapRectToGlobal(m_virtualParent, popupRect);
-
- QQuickWindow::setPosition(popupRect.topLeft().toPoint());
+ QQuickWindow::setPosition(screenPos - getOffset(m_virtualParent));
}
} // namespace QtWebEngineCore