summaryrefslogtreecommitdiffstats
path: root/src/widgets/styles/qwindowsxpstyle.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-10-31 20:09:14 +0100
committerLiang Qi <liang.qi@qt.io>2016-11-01 06:02:55 +0100
commita732576a66ff2bbd9c0b41cd5f3505a4d2fbf043 (patch)
treed09875c3543ad837fbfaaf10bd4eef1d3de42941 /src/widgets/styles/qwindowsxpstyle.cpp
parentcd9de59177ccbeb7fdfacf8716af7bb20112c880 (diff)
parent8e20daae9fee5f3b999daffce0d7156015ee974b (diff)
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts: config.tests/win/msvc_version.cpp configure.pri mkspecs/macx-ios-clang/features/default_post.prf mkspecs/macx-ios-clang/features/resolve_config.prf mkspecs/features/uikit/default_post.prf mkspecs/features/uikit/resolve_config.prf src/corelib/io/qsettings_mac.cpp src/corelib/json/qjsondocument.cpp src/plugins/platforms/cocoa/qcocoawindow.h src/plugins/platforms/cocoa/qcocoawindow.mm src/plugins/platforms/cocoa/qnswindowdelegate.h src/plugins/platforms/cocoa/qnswindowdelegate.mm src/plugins/platforms/ios/ios.pro src/plugins/platforms/ios/kernel.pro src/plugins/platforms/ios/qiosintegration.h src/plugins/platforms/minimalegl/qminimaleglintegration.cpp tests/auto/gui/painting/qpainter/tst_qpainter.cpp tools/configure/environment.cpp Change-Id: I654845e54e40f5951fb78aab349ca667e9f27843
Diffstat (limited to 'src/widgets/styles/qwindowsxpstyle.cpp')
-rw-r--r--src/widgets/styles/qwindowsxpstyle.cpp36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp
index 9d764d2a41..4ce359a7c4 100644
--- a/src/widgets/styles/qwindowsxpstyle.cpp
+++ b/src/widgets/styles/qwindowsxpstyle.cpp
@@ -699,7 +699,7 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData)
bool translucentToplevel = false;
const QPaintDevice *paintDevice = painter->device();
- const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatio() : 1;
+ const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatioF() : qreal(1);
if (paintDevice->devType() == QInternal::Widget) {
const QWidget *window = static_cast<const QWidget *>(paintDevice)->window();
translucentToplevel = window->testAttribute(Qt::WA_TranslucentBackground);
@@ -727,28 +727,28 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData)
const HDC dc = canDrawDirectly ? hdcForWidgetBackingStore(themeData.widget) : HDC(0);
const bool result = dc
- ? drawBackgroundDirectly(dc, themeData, qRound(aditionalDevicePixelRatio))
- : drawBackgroundThruNativeBuffer(themeData, qRound(aditionalDevicePixelRatio));
+ ? drawBackgroundDirectly(dc, themeData, aditionalDevicePixelRatio)
+ : drawBackgroundThruNativeBuffer(themeData, aditionalDevicePixelRatio);
painter->restore();
return result;
}
-static inline QRect scaleRect(const QRect &r, int factor)
+static inline QRectF scaleRect(const QRectF &r, qreal factor)
{
return r.isValid() && factor > 1
- ? QRect(r.topLeft() * factor, r.size() * factor)
+ ? QRectF(r.topLeft() * factor, r.size() * factor)
: r;
}
-static QRegion scaleRegion(const QRegion &region, int factor)
+static QRegion scaleRegion(const QRegion &region, qreal factor)
{
- if (region.isEmpty() || factor == 1)
+ if (region.isEmpty() || qFuzzyCompare(factor, qreal(1)))
return region;
if (region.rectCount() == 1)
- return QRegion(scaleRect(region.boundingRect(), factor));
+ return QRegion(scaleRect(QRectF(region.boundingRect()), factor).toRect());
QRegion result;
foreach (const QRect &rect, region.rects())
- result += QRect(rect.topLeft() * factor, rect.size() * factor);
+ result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect();
return result;
}
@@ -757,13 +757,12 @@ static QRegion scaleRegion(const QRegion &region, int factor)
Do not use this if you need to perform other transformations on the
resulting data.
*/
-bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int additionalDevicePixelRatio)
+bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal additionalDevicePixelRatio)
{
QPainter *painter = themeData.painter;
- QPoint redirectionDelta(int(painter->deviceMatrix().dx()),
- int(painter->deviceMatrix().dy()));
- QRect area = scaleRect(themeData.rect, additionalDevicePixelRatio).translated(redirectionDelta);
+ const QPointF redirectionDelta(painter->deviceMatrix().dx(), painter->deviceMatrix().dy());
+ const QRect area = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio).translated(redirectionDelta).toRect();
QRegion sysRgn = painter->paintEngine()->systemClip();
if (sysRgn.isEmpty())
@@ -771,7 +770,7 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa
else
sysRgn &= area;
if (painter->hasClipping())
- sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta);
+ sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta.toPoint());
HRGN hrgn = qt_hrgn_from_qregion(sysRgn);
SelectClipRgn(dc, hrgn);
@@ -806,15 +805,16 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa
engine).
*/
bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeData,
- int additionalDevicePixelRatio)
+ qreal additionalDevicePixelRatio)
{
QPainter *painter = themeData.painter;
- QRect rect = scaleRect(themeData.rect, additionalDevicePixelRatio);
+ QRectF rectF = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio);
if ((themeData.rotate + 90) % 180 == 0) { // Catch 90,270,etc.. degree flips.
- rect = QRect(0, 0, rect.height(), rect.width());
+ rectF = QRectF(0, 0, rectF.height(), rectF.width());
}
- rect.moveTo(0,0);
+ rectF.moveTo(0, 0);
+ QRect rect = rectF.toRect();
int partId = themeData.partId;
int stateId = themeData.stateId;
int w = rect.width();