<div dir="ltr">Hi,<br><br>I noticed an inconsistency in the way plasma wallpapers are painted, between when it is painted as background of the screen and when it is painted in the little preview in the &quot;Desktop Settings&quot; dialog.<br>
<br>Here is my paint() function. Mandelbrot is a subclass of Wallpaper.<br><br>void Mandelbrot::paint(QPainter *painter, const QRectF&amp; exposedRect)<br>{&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if(!m_tile.final()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QRect destination = m_tile.destination();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kDebug() &lt;&lt; &quot;recompute&quot; &lt;&lt; destination;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mandelbrot_render_with_vectorization&lt;float&gt;(m_tile_image, m_color, m_tile, 1, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QPainter(m_image).drawImage(destination, *m_tile_image);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; painter-&gt;drawImage(destination, *m_image, destination);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_tile.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emit update(m_tile.destination());<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; kDebug() &lt;&lt; &quot;repaint&quot; &lt;&lt; exposedRect;<br>&nbsp;&nbsp;&nbsp; painter-&gt;drawImage(exposedRect, *m_image, exposedRect);<br>
}<br><br>Here is the console output when the wallpaper is painted as the background of the screen:<br><br>.....<br>plasma(11356) Mandelbrot::paint: recompute QRect(640,700 160x100)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(0,0 1280x800)<br>
plasma(11356) Mandelbrot::paint: recompute QRect(480,700 160x100)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(0,0 1280x800)<br>plasma(11356) Mandelbrot::paint: recompute QRect(320,700 160x100)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(0,0 1280x800)<br>
plasma(11356) Mandelbrot::paint: recompute QRect(160,700 160x100)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(0,0 1280x800)<br>.....<br><br>See, the paint() function is always called with exposedRect equal to the whole screed, regardless of the parameter passed to update().<br>
<br>Now here is the console output when I open the &quot;Desktop Settings&quot; dialog and it shows the little preview:<br><br>......<br>plasma(11356) Mandelbrot::paint: recompute QRect(102,90 20x12)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(102,90 20x12)<br>
plasma(11356) Mandelbrot::paint: recompute QRect(82,90 20x12)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(82,90 20x12)<br>plasma(11356) Mandelbrot::paint: recompute QRect(61,90 20x12)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(61,90 20x12)<br>
plasma(11356) Mandelbrot::paint: recompute QRect(41,90 20x12)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(41,90 20x12)<br>plasma(11356) Mandelbrot::paint: recompute QRect(20,90 20x12)<br>plasma(11356) Mandelbrot::paint: repaint QRectF(20,90 20x12)<br>
.....<br><br>See, this time the paint()&nbsp; function is called with exactly the rectangle that was passed to update().<br><br>So:<br>1) is this inconsistency (difference between preview and actual wallpaper rendering) justified or a bug?<br>
2) currently the preview has visual artifacts while the actual wallpaper rendering is OK. But the actual wallpaper rendering, repainting the whole screen background everytime a tile is updated, is slow. Isn&#39;t there a way to repaint only the updated tile, without having visual artifacts?<br>
<br>Cheers,<br>Benoit<br><br></div>