<br><br><div class="gmail_quote">On Tue, Sep 28, 2010 at 2:37 AM, Deepayan Sarkar <span dir="ltr">&lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">On Mon, Sep 27, 2010 at 1:48 PM, Michael Lawrence<br>
&lt;<a href="mailto:lawrence.michael@gene.com">lawrence.michael@gene.com</a>&gt; wrote:<br>
<br>
&gt; I&#39;ve not had enough time to play around with the layout. There have been<br>
&gt; many examples from others where the layout behaves strangely, and I don&#39;t<br>
&gt; really have an explanation.<br>
&gt;<br>
&gt; The row/col stretch factors are the most obvious way to control the packing<br>
&gt; of the rows and columns. In theory, the grid layout is considering the size<br>
&gt; request of the widget, but in some simple attempts I did not have much luck<br>
&gt; playing with that.<br>
<br>
</div>OK, I will try to see if I can come up with anything.<br>
<br>
[...]<br>
<div class="im"><br>
&gt; There is a cache mode, just pass cache=TRUE to qlayer(). Note that this will<br>
&gt; basically require clip=TRUE, since the cache surface will be maximally<br>
&gt; allocated to the size of the layer. Clipping can cause issues.<br>
<br>
</div>No, I already have cache=TRUE set in qlayer(). Here is a nice simple<br>
example showing the problem:<br>
<br>
-------<br>
<br>
library(qtpaint)<br>
<br>
scene &lt;- qscene()<br>
root &lt;- qlayer(scene)<br>
<br>
points1 &lt;-<br>
    qlayer(root,<br>
           paintFun = function(item, painter, exposed) {<br>
               qdrawGlyph(painter, qglyphCircle(10),<br>
                          runif(10), runif(10), stroke = NA,<br>
                          fill = sample(colors(), 1))<br>
           },<br>
           row = 1L, col = 0L,<br>
           cache = TRUE,<br>
           limits = qrect(c(0, 1), c(0, 1)))<br>
<br>
v &lt;- qplotView(scene, opengl = FALSE)<br>
<br>
w &lt;- Qt$QTabWidget()<br>
w$addTab(v, &quot;view&quot;)<br>
w$addTab((ted &lt;- Qt$QTextEdit()), &quot;text&quot;)<br>
w<br>
<br>
-------<br>
<br>
If I now switch between the two tabs (either using mouse or keyboard),<br>
I see the paint function being called every time v becomes visible.<br>
<br>
The following is even more interesting. Start this infinite loop:<br>
<br>
while (TRUE) {<br>
    w$currentIndex &lt;- 1<br>
    w$update()<br>
    Sys.sleep(0.2)<br>
    w$currentIndex &lt;- 0<br>
    w$update()<br>
    Sys.sleep(0.2)<br>
}<br>
<br>
Then while the window with w<br>
<br>
  - does not have focus, there is no repaint,<br>
<br>
  - does have focus, there&#39;s a repaint on every run.<br>
<br>
This is fairly convincing evidence that this is a focus issue, but I<br>
haven&#39;t been able to find anything more specific.<br>
<font color="#888888"><br></font></blockquote><div><br>I looked into this a bit. Even if one disables focusing of the view, e.g: <br>v$focusPolicy &lt;- Qt$Qt$NoFocus<br>before adding it to the container,  it still repaints when the parent window has focus.<br>
<br>Who knows..<br><br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><font color="#888888">
-Deepayan<br>
</font></blockquote></div><br>