int QWidget::metric(PaintDeviceMetric m) const { Q_D(const QWidget); int val; if (m == PdmWidth) { val = data->crect.width(); } else if (m == PdmWidthMM) { const QScreen *screen = d->getScreen(); val = data->crect.width() * screen->physicalWidth() / screen->width(); } else if (m == PdmHeight) { val = data->crect.height(); } else if (m == PdmHeightMM) { const QScreen *screen = d->getScreen(); val = data->crect.height() * screen->physicalHeight() / screen->height(); } else if (m == PdmDepth) { return qwsDisplay()->depth(); } else if (m == PdmDpiX || m == PdmPhysicalDpiX) { if (d->extra && d->extra->customDpiX) return d->extra->customDpiX; else if (d->parent) return static_cast<QWidget *>(d->parent)->metric(m); const QScreen *screen = d->getScreen(); return qRound(screen->width() / double(screen->physicalWidth() / 25.4)); } else if (m == PdmDpiY || m == PdmPhysicalDpiY) { if (d->extra && d->extra->customDpiY) return d->extra->customDpiY; else if (d->parent) return static_cast<QWidget *>(d->parent)->metric(m); const QScreen *screen = d->getScreen(); return qRound(screen->height() / double(screen->physicalHeight() / 25.4)); } else if (m == PdmNumColors) { QScreen *screen = d->getScreen(); int ret = screen->colorCount(); if (!ret) { const int depth = qwsDisplay()->depth(); switch (depth) { case 1: ret = 2; break; case 8: ret = 256; break; case 16: ret = 65536; break; case 24: ret = 16777216; break; case 32: ret = 2147483647; break; } } return ret; } else { val = QPaintDevice::metric(m);// XXX } return val; }