diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-05-09 12:04:12 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-06-09 18:58:54 +0200 |
commit | 5d1ef38f9f6815807596d0606cf7ed06b7930aac (patch) | |
tree | 441c2b27eb9d169d58cb94a30ac424ebb6b42b65 /src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp | |
parent | 3f5b5213d42376470274f0e3aaa51731f0d2552a (diff) |
Create a RWHV delegate in core
This is adapting the Quick code for shared use with widgets,
and allows us to use it from QWebEnginePage.
Pick-to: 6.4
Fixes: QTBUG-96377
Change-Id: I3f09c1a949eff86d80fbe6c513dc66e3f9f2f611
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp')
-rw-r--r-- | src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp | 64 |
1 files changed, 27 insertions, 37 deletions
diff --git a/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp index 7cae38b2e..911d10c8a 100644 --- a/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp +++ b/src/webenginequick/render_widget_host_view_qt_delegate_quickwindow.cpp @@ -37,10 +37,9 @@ ** ****************************************************************************/ -#include "render_widget_host_view_qt_delegate_quick.h" #include "render_widget_host_view_qt_delegate_quickwindow.h" -#include <QtQuick/qquickitem.h> +#include "api/qquickwebengineview_p_p.h" namespace QtWebEngineCore { @@ -68,14 +67,19 @@ static inline QPointF transformPoint(const QPointF &point, const QTransform &tra } RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow( - RenderWidgetHostViewQtDelegateQuick *realDelegate, QWindow *parent) + RenderWidgetHostViewQtDelegateItem *realDelegate, QWindow *parent) : QQuickWindow(parent), m_realDelegate(realDelegate), m_virtualParent(nullptr), m_rotated(false) { setFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); + realDelegate->setParentItem(contentItem()); } RenderWidgetHostViewQtDelegateQuickWindow::~RenderWidgetHostViewQtDelegateQuickWindow() { + if (m_realDelegate) { + m_realDelegate->setWidgetDelegate(nullptr); + m_realDelegate->setParentItem(nullptr); + } } void RenderWidgetHostViewQtDelegateQuickWindow::setVirtualParent(QQuickItem *virtualParent) @@ -86,9 +90,9 @@ void RenderWidgetHostViewQtDelegateQuickWindow::setVirtualParent(QQuickItem *vir // rect is window geometry in form of parent window offset + offset in scene coordinates // chromium knows nothing about local transformation -void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &rect) +void RenderWidgetHostViewQtDelegateQuickWindow::InitAsPopup(const QRect &rect) { - m_rotated = m_virtualParent->parentItem()->rotation() > 0; + m_rotated = m_virtualParent->rotation() > 0 || m_virtualParent->parentItem()->rotation() > 0; if (m_rotated) { // code below tries to cover the case where webengine view is rotated, // the code assumes the rotation is in the form of 90, 180, 270 degrees @@ -104,7 +108,6 @@ void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &rect) QPointF br = transformPoint(rect.bottomRight(), transform, offset, m_virtualParent); QRectF popupRect(tl, br); popupRect = popupRect.normalized(); - m_realDelegate->setSize(rect.size()); // include offset from parent window popupRect.moveTo(popupRect.topLeft() - offset); setGeometry(popupRect.adjusted(0, 0, 1, 1).toRect()); @@ -115,64 +118,51 @@ void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &rect) m_realDelegate->setTransformOrigin(QQuickItem::Center); m_realDelegate->setRotation(m_virtualParent->parentItem()->rotation()); } else { - m_realDelegate->setSize(rect.size()); QRect geometry(rect); geometry.moveTo(rect.topLeft() - getOffset(m_virtualParent)); setGeometry(geometry); } + m_realDelegate->show(); raise(); show(); } -QRectF RenderWidgetHostViewQtDelegateQuickWindow::viewGeometry() const -{ - return m_rotated ? m_rect : geometry(); -} - -QRect RenderWidgetHostViewQtDelegateQuickWindow::windowGeometry() const +void RenderWidgetHostViewQtDelegateQuickWindow::Resize(int width, int height) { - return m_rotated ? m_rect : frameGeometry(); -} - -void RenderWidgetHostViewQtDelegateQuickWindow::show() -{ - QQuickWindow::show(); - m_realDelegate->show(); + if (!m_rotated) + QQuickWindow::resize(width, height); } -void RenderWidgetHostViewQtDelegateQuickWindow::hide() +void RenderWidgetHostViewQtDelegateQuickWindow::MoveWindow(const QPoint &screenPos) { - QQuickWindow::hide(); - m_realDelegate->hide(); + if (!m_rotated) + QQuickWindow::setPosition(screenPos - getOffset(m_virtualParent)); } -bool RenderWidgetHostViewQtDelegateQuickWindow::isVisible() const +void RenderWidgetHostViewQtDelegateQuickWindow::SetClearColor(const QColor &color) { - return QQuickWindow::isVisible(); + QQuickWindow::setColor(color); } -QWindow *RenderWidgetHostViewQtDelegateQuickWindow::window() const +bool RenderWidgetHostViewQtDelegateQuickWindow::ActiveFocusOnPress() { - return const_cast<RenderWidgetHostViewQtDelegateQuickWindow*>(this); + return false; } -void RenderWidgetHostViewQtDelegateQuickWindow::updateCursor(const QCursor &cursor) +void RenderWidgetHostViewQtDelegateQuickWindow::Bind(QtWebEngineCore::WebContentsAdapterClient *client) { - setCursor(cursor); + QQuickWebEngineViewPrivate::bindViewAndWidget( + static_cast<QQuickWebEngineViewPrivate *>(client)->q_func(), m_realDelegate.data()); } -void RenderWidgetHostViewQtDelegateQuickWindow::resize(int width, int height) +void RenderWidgetHostViewQtDelegateQuickWindow::Unbind() { - if (!m_rotated) { - QQuickWindow::resize(width, height); - m_realDelegate->resize(width, height); - } + QQuickWebEngineViewPrivate::bindViewAndWidget(nullptr, m_realDelegate.data()); } -void RenderWidgetHostViewQtDelegateQuickWindow::move(const QPoint &screenPos) +void RenderWidgetHostViewQtDelegateQuickWindow::Destroy() { - if (!m_rotated) - QQuickWindow::setPosition(screenPos - getOffset(m_virtualParent)); + deleteLater(); } } // namespace QtWebEngineCore |