summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Nevala <samuel.nevala@intopalo.com>2015-10-26 12:38:34 +0200
committerMaurice Kalinowski <maurice.kalinowski@theqtcompany.com>2015-11-04 14:38:20 +0000
commit521d6fd0536b72565ca5a2ae9d9cd1514bb0e4e1 (patch)
tree902ead3a5ac779f8da8d4b570d132aa907cccc01
parenta37fdfd9be608a1faea762d06b41eedfc8f8fc27 (diff)
winrt: Fix geometry for QWebView.
Respect statusbar size when setting webviews geometry. Change-Id: Ifae03d2a673930a97ce1726cb50dd19ef6a1f7bb Task-Id: QTBUG-48842 Reviewed-by: Andrew Knight <andrew.knight@intopalo.com> Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
-rw-r--r--src/webview/qwebview_winrt.cpp24
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;
});