Review Request 122673: Make Svg, FrameSvg work qith QT_DEVICE_PIXELRATIO

David Edmundson david at davidedmundson.co.uk
Fri Mar 6 14:04:40 UTC 2015



> On March 4, 2015, 2:10 p.m., David Edmundson wrote:
> > src/plasma/svg.cpp, line 762
> > <https://git.reviewboard.kde.org/r/122673/diff/2/?file=352927#file352927line762>
> >
> >     Returning pixmaps with a doubled size with no devicePixelRatio set is going to screw up the client in a QPainter based app.
> >     
> >     We want some sort 
> >     same for ::image()
> >     
> >     for the paint() it doesn't matter as we're doing the painting ourselves and ready explicitly say our sourceRect is larger than the targetRect which is accompilishing the same thing
> 
> Marco Martin wrote:
>     if the client does svg->setDevicePixelRatio(2)
>     then painter.drawPixmap(svg->pixmap()) with the painter with a different deviepixelratio than the one he just put on the svg it's his problem no?

No.

If I have:

QPixmap myTarget(40,40)
myTarget.setDevicePixelRatio(2); //so geometry size is 20x20

QPainter p(&myTarget);
p.drawPixmap(QPoint(0,0), someSvg.pixmap(20,20));  /// we would expect this to draw all 40x40 pixels neatly 

however QPainter will be smart and detect that the source and target sources have different DPRs, so it will double the scale of the target pixmap.
and will paint 80x80 pixels into that 40x40 space; so you'll only see quarter of the picture.


- David


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/122673/#review77000
-----------------------------------------------------------


On March 5, 2015, 10:27 a.m., Marco Martin wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/122673/
> -----------------------------------------------------------
> 
> (Updated March 5, 2015, 10:27 a.m.)
> 
> 
> Review request for Plasma.
> 
> 
> Repository: plasma-framework
> 
> 
> Description
> -------
> 
> (still in progress but here for feedback)
> when QT_DEVICE_PIXELRATIO is something different from 1, the pixmaps generated by Svg will be scaled up to give a proper texture.
> 
> This is complementary but not replacing our current approach:
> the pixelratio that can be accessed by units is now in relation to the qt pixel ratio, spacings are also adjusted accordingly (therefore, spaces and sizes won't need an integer value like pixelratio)
> 
> svg introduces also a scaleFactor property (that is pretty much like its old pixelRatio)
> basically, scalefactor, will scale both the textures *and* all the reported sizes, (old method) pixelratio just scales textures without altering measures (like qt pixelratio likes)
> they are now both used and combined, so a) we can have this working before supporting officially qt pixelratio when will be good enough but b) keeping the old mwthod working for the time being c) by using both at the sae time we can at least scale sizes of values != from integers, for screens that are too dense for 1 and not enough for 2
> 
> 
> Diffs
> -----
> 
>   src/declarativeimports/core/iconitem.cpp 03f40c4 
>   src/declarativeimports/core/svgitem.cpp 570c1c3 
>   src/declarativeimports/core/units.h 6c038ba 
>   src/declarativeimports/core/units.cpp a740145 
>   src/plasma/framesvg.cpp 1bb3510 
>   src/plasma/private/svg_p.h a31d0ac 
>   src/plasma/svg.h 0bcbd7a 
>   src/plasma/svg.cpp 0a0db5e 
>   src/declarativeimports/core/framesvgitem.cpp dae8a4f 
> 
> Diff: https://git.reviewboard.kde.org/r/122673/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Marco Martin
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20150306/8302316a/attachment-0001.html>


More information about the Plasma-devel mailing list