<html><body>
<p>I originally sent this to Carl and he kindly suggested I re-post it to this mailing list, so...<br>
<br>
I have been working on some bugs in the Mozilla SVG arena.  The initial stroke-cap is missing from the very first dash-array element drawn in the following svg example.   I noticed there was a cairo bug already in the system, <a href="https://bugs.freedesktop.org/show_bug.cgi?id=4409">https://bugs.freedesktop.org/show_bug.cgi?id=4409</a>,  that addressed this issue,  or close to it, but apparently still exists on, at least,  the Windows XP version of recent builds of firefox.  I don't think this has been resolved in the most recent version of cairo-path-stroke.c.<br>
<br>
This is the svg example I have been playing with that shows this problem:<br>
&lt;?xml version=&quot;1.0&quot; ?&gt; <br>
 &lt;svg xmlns=&quot;<a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a>&quot; viewBox=&quot;0 0 600 600&quot;&gt;<br>
&lt;rect  x=&quot;20&quot; y=&quot;20&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot; stroke=&quot;red&quot;<br>
stroke-width=&quot;20&quot; stroke-dasharray=&quot;0.001,20&quot; stroke-linecap=&quot;round&quot;/&gt;<br>
&lt;/svg&gt;<br>
<br>
If you render this in firefox, you will notice that the very first leading cap is cutoff.<br>
<br>
I am using a recent mozilla/gfx/cairo/cairo/src/cairo-path-stroke.c file from the Mozilla core to make changes for testing so my cvs diff is off  from the cairo base code (otherwise I would include the entire patch).  This change is minor but makes a difference in the rendering of the first array element in the case above.  <br>
Here is a fix for it: <br>
<br>
@@ -720,21 +738,20 @@ _cairo_stroker_line_to_dashed (void *clo<br>
                 if (stroker-&gt;has_current_face) {<br>
                     status = _cairo_stroker_join (stroker, &amp;stroker-&gt;current_face, &amp;sub_start);<br>
                     if (status)<br>
                         return status;<br>
                 } else {<br>
                     if (!stroker-&gt;has_first_face) {<br>
                         stroker-&gt;first_face = sub_start;<br>
                         stroker-&gt;has_first_face = 1;<br>
-                    } <font color="#FF0000">else {</font><br>
+                    } <br>
                         status = _cairo_stroker_add_leading_cap (stroker, &amp;sub_start);<br>
                         if (status)<br>
                             return status;<br>
-                    <font color="#FF0000">}</font><br>
                 }<br>
             }<br>
             if (remain) {<br>
                 /*<br>
                  * Cap if not at end of segment<br>
                  */<br>
                 status = _cairo_stroker_add_trailing_cap (stroker, &amp;sub_end);<br>
                 if (status)<br>
<br>
The problem  with the above svg example is that the first element in this dash-array NEVER invokes _cairo_stroker_add_leading_cap.  I think _cairo_stroker_add_leading_cap needs to be called in both cases of  <i>if (!stroker-&gt;has_first_face). </i><br>
<br>
Thanks,<br>
Keith</body></html>