<br><br><div class="gmail_quote">On Thu, Oct 14, 2010 at 9:37 PM, Michael Lawrence <span dir="ltr">&lt;<a href="mailto:michafla@gene.com">michafla@gene.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;">
<br><br><div class="gmail_quote"><div class="im">On Thu, Oct 14, 2010 at 8:00 PM, Yihui Xie <span dir="ltr">&lt;<a href="mailto:xieyihui@gmail.com" target="_blank">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><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></div></div></blockquote><div><br>I checked in a fix for this, so you won&#39;t have to count new lines in R anymore. Please go ahead and push your (updated) qstrHeight function.<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="gmail_quote"><div> <br></div><div class="im"><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><div><br>But it&#39;s got to be a lot more accessible than say R&#39;s docs.<br> <br></div><div class="im"><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><br></div></blockquote></div><div><br>I will look into the effect of sizeHint.</div></div></blockquote><div><br>Currently I&#39;m unable to get Qt to call the sizeHint function. I think the sizeHint is only useful when one is considering constraints, i.e., Qt might ask what is the best vertical size given that I can only allocate so much horizontally? Most obvious application of this is text in an editor. There is a fixed width and only the text layout/wrapper knows how much vertical space it needs.<br>
 <br>So unless you want the axis to behave in such a fancy way, setting the min/max dimensions may be all that&#39;s needed in this case. The main issue then is that ideally one would be setting the dimensions on the layer itself, not the column or row. If there are multiple plots, it could get tricky. Unfortunately, setting the layer dimensions is not possible until the Smoke bug is fixed; according to the maintainer that will not happen any time soon. I could add some wrappers if we really needed this though.<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="gmail_quote"><div> 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><div><div></div><div class="h5"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div>
Regards,<br>
Yihui<br>
--<br>
Yihui Xie &lt;<a href="mailto:xieyihui@gmail.com" target="_blank">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>On Thu, Oct 14, 2010 at 8:51 PM, Michael Lawrence<br>
&lt;<a href="mailto:lawrence.michael@gene.com" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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" target="_blank">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></div></div><br>
</blockquote></div><br>