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

Reply via email to