From 23a74e810bb2ec4cb950eaae9760889c1e8a5d54 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 22 Nov 2016 14:10:56 +0100 Subject: QWindowVideoWidgetBackend: scale coordinates passed to control MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use native coordinates when setting the display rectangle. Task-number: QTBUG-57145 Change-Id: I4783edcbee021e6020e8ca946f15cca8a1173589 Reviewed-by: Morten Johan Sørvig Reviewed-by: Yoann Lopes --- src/multimediawidgets/qvideowidget.cpp | 23 +++++++++++++++++++---- src/multimediawidgets/qvideowidget_p.h | 2 ++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/multimediawidgets/qvideowidget.cpp b/src/multimediawidgets/qvideowidget.cpp index 3d5e5c830..60a968813 100644 --- a/src/multimediawidgets/qvideowidget.cpp +++ b/src/multimediawidgets/qvideowidget.cpp @@ -55,6 +55,9 @@ #include #include +#include +#include + using namespace Qt; QT_BEGIN_NAMESPACE @@ -372,11 +375,23 @@ QSize QWindowVideoWidgetBackend::sizeHint() const return m_windowControl->nativeSize(); } +void QWindowVideoWidgetBackend::updateDisplayRect() +{ + QRect rect = m_widget->rect(); + if (QHighDpiScaling::isActive()) { + const qreal factor = QHighDpiScaling::factor(m_widget->windowHandle()); + if (!qFuzzyCompare(factor, qreal(1))) { + rect = QRectF(QPointF(rect.topLeft()) * factor, + QSizeF(rect.size()) * factor).toRect(); + } + } + m_windowControl->setDisplayRect(rect); +} + void QWindowVideoWidgetBackend::showEvent() { m_windowControl->setWinId(m_widget->winId()); - - m_windowControl->setDisplayRect(m_widget->rect()); + updateDisplayRect(); #if defined(Q_WS_WIN) m_widget->setUpdatesEnabled(false); @@ -392,12 +407,12 @@ void QWindowVideoWidgetBackend::hideEvent(QHideEvent *) void QWindowVideoWidgetBackend::moveEvent(QMoveEvent *) { - m_windowControl->setDisplayRect(m_widget->rect()); + updateDisplayRect(); } void QWindowVideoWidgetBackend::resizeEvent(QResizeEvent *) { - m_windowControl->setDisplayRect(m_widget->rect()); + updateDisplayRect(); } void QWindowVideoWidgetBackend::paintEvent(QPaintEvent *event) diff --git a/src/multimediawidgets/qvideowidget_p.h b/src/multimediawidgets/qvideowidget_p.h index 15aaa5a60..039ace24e 100644 --- a/src/multimediawidgets/qvideowidget_p.h +++ b/src/multimediawidgets/qvideowidget_p.h @@ -211,6 +211,8 @@ public: #endif private: + void updateDisplayRect(); + QMediaService *m_service; QVideoWindowControl *m_windowControl; QWidget *m_widget; -- cgit v1.2.3