From 521d6fd0536b72565ca5a2ae9d9cd1514bb0e4e1 Mon Sep 17 00:00:00 2001 From: Samuel Nevala Date: Mon, 26 Oct 2015 12:38:34 +0200 Subject: winrt: Fix geometry for QWebView. Respect statusbar size when setting webviews geometry. Change-Id: Ifae03d2a673930a97ce1726cb50dd19ef6a1f7bb Task-Id: QTBUG-48842 Reviewed-by: Andrew Knight Reviewed-by: Maurice Kalinowski --- src/webview/qwebview_winrt.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/webview/qwebview_winrt.cpp b/src/webview/qwebview_winrt.cpp index 0b132b4..e5543b8 100644 --- a/src/webview/qwebview_winrt.cpp +++ b/src/webview/qwebview_winrt.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -476,33 +477,40 @@ void QWinRTWebViewPrivate::setGeometry(const QRect &geometry) QEventDispatcherWinRT::runOnXamlThread([this, &geometry]() { HRESULT hr; double scaleFactor; -#ifdef Q_OS_WINPHONE +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) ComPtr displayInformation; hr = d->displayInformation.As(&displayInformation); Q_ASSERT_SUCCEEDED(hr); hr = displayInformation->get_RawPixelsPerViewPixel(&scaleFactor); Q_ASSERT_SUCCEEDED(hr); + scaleFactor = 1.0 / scaleFactor; + Q_ASSERT(d->window); + const QScreen *screen = d->window->screen(); + Q_ASSERT(screen); + const QPoint screenTopLeft = screen->availableGeometry().topLeft(); + const QPointF topLeft = QPointF(geometry.topLeft() + screenTopLeft) * scaleFactor; + const QSizeF size = QSizeF(geometry.size()) * scaleFactor; #else ResolutionScale resolutionScale; hr = d->displayInformation->get_ResolutionScale(&resolutionScale); Q_ASSERT_SUCCEEDED(hr); - scaleFactor = double(resolutionScale) / 100; + scaleFactor = 100.0 / double(resolutionScale); + const QPointF topLeft = QPointF(geometry.topLeft()) * scaleFactor; + const QSizeF size = QSizeF(geometry.size()) * scaleFactor; #endif - scaleFactor = 1 / scaleFactor; - ComPtr uiElement; hr = d->base.As(&uiElement); Q_ASSERT_SUCCEEDED(hr); - hr = d->canvas->SetLeft(uiElement.Get(), geometry.x() * scaleFactor); + hr = d->canvas->SetLeft(uiElement.Get(), topLeft.x()); Q_ASSERT_SUCCEEDED(hr); - hr = d->canvas->SetTop(uiElement.Get(), geometry.y() * scaleFactor); + hr = d->canvas->SetTop(uiElement.Get(), topLeft.y()); Q_ASSERT_SUCCEEDED(hr); ComPtr frameworkElement; hr = d->base.As(&frameworkElement); Q_ASSERT_SUCCEEDED(hr); - hr = frameworkElement->put_Width(geometry.width() * scaleFactor); + hr = frameworkElement->put_Width(size.width()); Q_ASSERT_SUCCEEDED(hr); - hr = frameworkElement->put_Height(geometry.height() * scaleFactor); + hr = frameworkElement->put_Height(size.height()); Q_ASSERT_SUCCEEDED(hr); return hr; }); -- cgit v1.2.3