Details
Note: Degenerate segments and sub-paths are treated specially and
provide a useful result. These can result in two different
situations:
1. Zero-length "on" segments set in cairoSetDash. If the cap
style is CAIRO_LINE_CAP_ROUND or CAIRO_LINE_CAP_SQUARE then these
segments will be drawn as circular dots or squares respectively. In
the case of CAIRO_LINE_CAP_SQUARE, the orientation of the squares
is determined by the direction of the underlying path.
2. A sub-path created by cairoMoveTo followed by either a
cairoClosePath or one or more calls to cairoLineTo to the
same coordinate as the cairoMoveTo. If the cap style is
CAIRO_LINE_CAP_ROUND then these sub-paths will be drawn as circular
dots. Note that in the case of CAIRO_LINE_CAP_SQUARE a degenerate
sub-path will not be drawn at all, (since the correct orientation
is indeterminate).
In no case will a cap style of CAIRO_LINE_CAP_BUTT cause anything
to be drawn in the case of either degenerate segments or sub-paths.