On Tuesday 09 October 2012 02:07 PM, Sorvig Morten wrote: > While preparing an upcoming blog entry I've collected some best practices > regarding raster graphics (QImage and QPixmap). These apply to internal Qt > development as well. The patch is still pending so they are open for > discussion. > > (I use image and pixmap interchangeably here, most points apply to both) > > * Start by providing high-resolution artwork. You can provide 2x versions > only and let Qt scale them down, or for best performance and image quality > provide pre-scaled or hand-made 1x and 2x versions. > > * Set the QT_HIDPI_AWARE environment variable. (Changes the behaviour of > QIcon::pixmap) > > • Use QIcon to manage the artwork versions. Use QIcon::pixmap(QWindow, QSize) > to get an appropriate pixmap for a given window and point size. If you don’t > know which window you are targeting you can use QIcon::pixmap(QSize), which > will work correctly on single-display systems and and use the “best” display > on multiple-display systems. > > • Alternatively, manage the versions yourself. Set a dpi scale factor of 2 on > the high-dpi version, either by appending "@2x" to the file name or by > calling QImage::setDpiScaleFactor(2) yourself. Use QWindow::dpiScaleFactor() > or qApp->dpiScaleFactor() to get the target scale factor. > > * Don’t scale pixmaps to specific pixel sizes unless you know what you are > doing. > > * Don’t use pixmap sizes directly in layout calculations. Divide by the > pixmap scale factor: > QSize pointSze = pixmap.size() / pixmap.dpiScaleFactor(); > > * QPainter::drawPixmap(QPoint, ...) works correctly with high-dpi pixmaps if > the dpi scale factor is set, that is pixmaps from QIcon::pixmap(), pixmaps > loaded from “@2x” files, or pixmaps where you call setDpiScaleFactor(). > > * QPainter::drawPixmap(QRect, ...) works correctly for all pixmaps and will > draw high-dpi content if the source pixmap provides enough pixels. If you > calculate the rect from the pixmap remember to use dpiScaleFactor() as above. > > * 2x pixmaps on a 2x high-dpi display is an optimized case in the raster > paint engine, similar to 1x pixmaps on “standard” displays. > > * Most Qt API is in points (even QStyle::PixelMetric). The main exception is > image and pixmap geometry, which is in pixels. Forgive my ignorance, but I didn't understand. AFAIK most of Qt API is in pixels. Do you mean after this patch, one should treat all API as points? > > Next on my agenda is high-dpi OpenGL, scene graph and Qt Quick. > > - Morten > _______________________________________________ > Development mailing list > [email protected] > http://lists.qt-project.org/mailman/listinfo/development > >
-- Regards, Pritam **************** CAUTION - Disclaimer ***************** This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended solely for the use of the addressee(s). If you are not the intended recipient, please notify the sender by e-mail and delete the original message. Further, you are not to copy, disclose, or distribute this e-mail or its contents to any other person and any such actions are unlawful. This e-mail may contain viruses. Infosys has taken every reasonable precaution to minimize this risk, but is not liable for any damage you may sustain as a result of any virus in this e-mail. You should carry out your own virus checks before opening the e-mail or attachment. Infosys reserves the right to monitor and review the content of all messages sent to or from this e-mail address. Messages sent to or from this e-mail address may be stored on the Infosys e-mail system. ***INFOSYS******** End of Disclaimer ********INFOSYS*** _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
