Make QStyle::itemPixmapRect handle devicePixelRatio

Layout sizes for images should be in the form
QSize layoutSize = image.size() / image.devicePixelRatio() to be
in device independent pixels

Change-Id: Ic149144c45c8fa5c45ac5cbe2c82c35d721549cd
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
This commit is contained in:
David Edmundson 2015-02-24 12:36:54 +01:00
parent 2cb17c1fb9
commit d1ce29557c

View File

@ -541,17 +541,21 @@ QRect QStyle::itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pi
QRect result;
int x, y, w, h;
rect.getRect(&x, &y, &w, &h);
const int pixmapWidth = pixmap.width()/pixmap.devicePixelRatio();
const int pixmapHeight = pixmap.height()/pixmap.devicePixelRatio();
if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter)
y += h/2 - pixmap.height()/2;
y += h/2 - pixmapHeight/2;
else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom)
y += h - pixmap.height();
y += h - pixmapHeight;
if ((alignment & Qt::AlignRight) == Qt::AlignRight)
x += w - pixmap.width();
x += w - pixmapWidth;
else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter)
x += w/2 - pixmap.width()/2;
x += w/2 - pixmapWidth/2;
else if ((alignment & Qt::AlignLeft) != Qt::AlignLeft && QApplication::isRightToLeft())
x += w - pixmap.width();
result = QRect(x, y, pixmap.width(), pixmap.height());
x += w - pixmapWidth;
result = QRect(x, y, pixmapWidth, pixmapHeight);
return result;
}