<br><br><div class="gmail_quote">On Thu, Oct 14, 2010 at 8:00 PM, Yihui Xie <span dir="ltr">&lt;<a href="mailto:xieyihui@gmail.com">xieyihui@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;">
Yes, I found the height calculated from qtextExtents() is only a<br>
height for one line, and that&#39;s why I especially dealt with &#39;\n&#39;.<br>
<br></blockquote><div><br>I will need to look into that. In my quick tests, QFontMetrics::boundingRect seems to work fine with \n, and that&#39;s what the Painter uses. <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;">

I often feel drowned in Qt docs, partly because I know little about<br>
C++, and there are too many unfamiliar concepts. I even thought<br>
sizeHint is something like tooltips (hints?)...<br>
<br></blockquote><div><br>But it&#39;s got to be a lot more accessible than say R&#39;s docs.<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;">

So which way do you recommend to adjust the spacing of axis layers?<br>
Currently it seems only maximum height/width work well.<br>
<div class="im"><br></div></blockquote><div><br>I will look into the effect of sizeHint. In the meantime, you could just set the maximum dimensions to what you get from QFontMetrics::boundingRect, since at least in your case there is no view transform (and thus the scene and screen coordinates are the same).<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;"><div class="im">
Regards,<br>
Yihui<br>
--<br>
Yihui Xie &lt;<a href="mailto:xieyihui@gmail.com">xieyihui@gmail.com</a>&gt;<br>
Phone: 515-294-2465 Web: <a href="http://yihui.name" target="_blank">http://yihui.name</a><br>
Department of Statistics, Iowa State University<br>
2215 Snedecor Hall, Ames, IA<br>
<br>
<br>
<br>
</div><div><div></div><div class="h5">On Thu, Oct 14, 2010 at 8:51 PM, Michael Lawrence<br>
&lt;<a href="mailto:lawrence.michael@gene.com">lawrence.michael@gene.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Oct 14, 2010 at 3:31 PM, Yihui Xie &lt;<a href="mailto:xieyihui@gmail.com">xieyihui@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; And can we just put an approximate solution for qstrHeight() for the time<br>
&gt;&gt; being?<br>
&gt;&gt;<br>
&gt;&gt; qstrHeight &lt;- function(p, text) {<br>
&gt;&gt;  extents &lt;- qtextExtents(p, text)<br>
&gt;&gt;  nlines &lt;- sapply(gregexpr(&#39;\\n&#39;, text), function(xx) ifelse(any(xx &lt;<br>
&gt;&gt; 0), 0, length(xx)) + 1)<br>
&gt;&gt;  nlines * (extents[,4] - extents[,2])<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;<br>
&gt; Do you really need to multiply by the nlines here? If so, that&#39;s a bug, as<br>
&gt; QFontMetrics is supposed to figure that out.<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; Regards,<br>
&gt;&gt; Yihui<br>
&gt;&gt; --<br>
&gt;&gt; Yihui Xie &lt;<a href="mailto:xieyihui@gmail.com">xieyihui@gmail.com</a>&gt;<br>
&gt;&gt; Phone: 515-294-2465 Web: <a href="http://yihui.name" target="_blank">http://yihui.name</a><br>
&gt;&gt; Department of Statistics, Iowa State University<br>
&gt;&gt; 2215 Snedecor Hall, Ames, IA<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Oct 14, 2010 at 11:49 AM, Yihui Xie &lt;<a href="mailto:xieyihui@gmail.com">xieyihui@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; We can calculate the width of a string inside the paintFun(layer,<br>
&gt;&gt; &gt; painter) since qstrWIdth() needs the &#39;painter&#39; argument. I wonder if<br>
&gt;&gt; &gt; we can calculate the width when we only have the layer object, e.g.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; s &lt;- qscene()<br>
&gt;&gt; &gt; test_layer &lt;- qlayer(s, function(layer, painter) {<br>
&gt;&gt; &gt;    qdrawRect(painter, 10, 10, 90, 90, stroke = &#39;blue&#39;)<br>
&gt;&gt; &gt;    qstrWidth(painter, &#39;this is a string&#39;)<br>
&gt;&gt; &gt; }, limits=qrect(0,0,100,100))<br>
&gt;&gt; &gt; ## what if we are outside?<br>
&gt;&gt; &gt; qstrWidth(??, &#39;this is a string&#39;)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I want to automatically adjust the plot margins according to the width<br>
&gt;&gt; &gt; and height of axis labels. Is there any way to calculate the height of<br>
&gt;&gt; &gt; a string?<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt; In which coordinate system? The painter is used for transforming from pixels<br>
&gt; (how QFontMetrics returns the dimensions) to the data coordinates.<br>
&gt;<br>
&gt; Most likely what you want are scene coordinates though, for sizing the<br>
&gt; layer. Perhaps you could come up with a function for mapping the text bounds<br>
&gt; through a transform from the view coordinates (pixels, as provided by<br>
&gt; QFontMetrics) to scene coordinates.<br>
&gt;<br>
&gt; That will break down when multiple views are involved, but then again, so<br>
&gt; would the concept of having a plot with axes, etc.<br>
&gt;<br>
&gt; In the long term, it would be best for there to be a Layer that<br>
&gt; automatically requests enough space to show its text contents. The<br>
&gt; sizeHintFun is meant for this. The interpretation of the size hint depends<br>
&gt; on the size policy. With the correct policy, it can communicate the minimum<br>
&gt; width/height needed by the layer, which the grid layout *should* satisfy.<br>
&gt; But who knows.<br>
&gt;<br>
&gt; Anyway, let me know if you need more information. The Qt docs are helpful.<br>
&gt;<br>
&gt; Michael<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; &gt; Thanks!<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Regards,<br>
&gt;&gt; &gt; Yihui<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Yihui Xie &lt;<a href="mailto:xieyihui@gmail.com">xieyihui@gmail.com</a>&gt;<br>
&gt;&gt; &gt; Phone: 515-294-2465 Web: <a href="http://yihui.name" target="_blank">http://yihui.name</a><br>
&gt;&gt; &gt; Department of Statistics, Iowa State University<br>
&gt;&gt; &gt; 2215 Snedecor Hall, Ames, IA<br>
&gt;&gt; &gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Qtinterfaces-devel mailing list<br>
&gt;&gt; <a href="mailto:Qtinterfaces-devel@lists.r-forge.r-project.org">Qtinterfaces-devel@lists.r-forge.r-project.org</a><br>
&gt;&gt;<br>
&gt;&gt; <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/qtinterfaces-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/qtinterfaces-devel</a><br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>