Fix DPI of QWidget with parent on a different screen
If a floating QWidget has a parent on a different screen, its DPI was still inherited from the parent instead of taken from the screen. The only reason we did was in case there is a customDpi set. (customDpi is a private thing that is only used in designer to change the appearance of the previewed widget) So instead of recursing into QWidget::metric for each ancestor, just use a for loop to find if one parent has a customDpi. If no customDpi is found, then return the DPI of the right screen. Task-number: QTBUG-58959 Task-number: QTBUG-48242 Change-Id: Ie6e9e48cdd10234994c0919ba3aea9b0cdb52494 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
8cd99d24a8
commit
1d9270ee42
@ -12770,8 +12770,6 @@ void QWidget::activateWindow()
|
||||
*/
|
||||
int QWidget::metric(PaintDeviceMetric m) const
|
||||
{
|
||||
Q_D(const QWidget);
|
||||
|
||||
QWindow *topLevelWindow = 0;
|
||||
QScreen *screen = 0;
|
||||
if (QWidget *topLevel = window()) {
|
||||
@ -12799,16 +12797,16 @@ int QWidget::metric(PaintDeviceMetric m) const
|
||||
} else if (m == PdmDepth) {
|
||||
return screen->depth();
|
||||
} else if (m == PdmDpiX) {
|
||||
if (d->extra && d->extra->customDpiX)
|
||||
return d->extra->customDpiX;
|
||||
else if (d->parent)
|
||||
return static_cast<QWidget *>(d->parent)->metric(m);
|
||||
for (const QWidget *p = this; p; p = p->parentWidget()) {
|
||||
if (p->d_func()->extra && p->d_func()->extra->customDpiX)
|
||||
return p->d_func()->extra->customDpiX;
|
||||
}
|
||||
return qRound(screen->logicalDotsPerInchX());
|
||||
} else if (m == PdmDpiY) {
|
||||
if (d->extra && d->extra->customDpiY)
|
||||
return d->extra->customDpiY;
|
||||
else if (d->parent)
|
||||
return static_cast<QWidget *>(d->parent)->metric(m);
|
||||
for (const QWidget *p = this; p; p = p->parentWidget()) {
|
||||
if (p->d_func()->extra && p->d_func()->extra->customDpiY)
|
||||
return p->d_func()->extra->customDpiY;
|
||||
}
|
||||
return qRound(screen->logicalDotsPerInchY());
|
||||
} else if (m == PdmPhysicalDpiX) {
|
||||
return qRound(screen->physicalDotsPerInchX());
|
||||
|
@ -8181,7 +8181,7 @@ void tst_QWidget::customDpi()
|
||||
custom->logicalDpiX();
|
||||
QCOMPARE(custom->metricCallCount, 1);
|
||||
child->logicalDpiX();
|
||||
QCOMPARE(custom->metricCallCount, 2);
|
||||
QCOMPARE(custom->metricCallCount, 1);
|
||||
}
|
||||
|
||||
void tst_QWidget::customDpiProperty()
|
||||
|
Loading…
Reference in New Issue
Block a user