diff options
author | Samuel Nevala <[email protected]> | 2015-10-26 12:38:34 +0200 |
---|---|---|
committer | Maurice Kalinowski <[email protected]> | 2015-11-04 14:38:20 +0000 |
commit | 521d6fd0536b72565ca5a2ae9d9cd1514bb0e4e1 (patch) | |
tree | 902ead3a5ac779f8da8d4b570d132aa907cccc01 | |
parent | a37fdfd9be608a1faea762d06b41eedfc8f8fc27 (diff) |
winrt: Fix geometry for QWebView.
Respect statusbar size when setting webviews geometry.
Change-Id: Ifae03d2a673930a97ce1726cb50dd19ef6a1f7bb
Task-Id: QTBUG-48842
Reviewed-by: Andrew Knight <[email protected]>
Reviewed-by: Maurice Kalinowski <[email protected]>
-rw-r--r-- | src/webview/qwebview_winrt.cpp | 24 |
1 files 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 <QPointer> #include <QHash> #include <QRegularExpression> +#include <QScreen> #include <qfunctions_winrt.h> #include <private/qeventdispatcher_winrt_p.h> @@ -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<IDisplayInformation2> 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<IUIElement> 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<IFrameworkElement> 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; }); |