[cairo] Fwd: Re: Uniform Line Widths
behdad at behdad.org
Fri Feb 22 14:21:27 PST 2008
On Fri, 2008-02-22 at 16:55 -0500, Bill Spitzak wrote:
> Behdad Esfahbod wrote:
> >> I like the naming idea of using "set/get_pen" for the new API and that
> >> "set/get_line_width" would be convenience functions on top of those.
> > cairo_[sg]et_pen_matrix (cairo_t *cr,
> > cairo_matrix_t *pen_matrix);
> > The translation component of matrix will simply shift the pen, like it
> > does for font_matrix and pattern matrix.
> Or I think it could be ignored, as that is what is done for font matrix,
> right? In any case it should be the same as font matrix.
Font matrix translation shifts the text. It's done in gstate layer
though. The scaled-font and surface layer ignore it.
> > Trickier would be dash offsets. Would be cool to be able to have dash
> > matrix separate from pen matrix, eh? Not sure, maybe we should lock
> > dash matrix at time of cairo_set_dash() too... Who knows...
> I was thinking that the dash pattern is drawn in "pen space" and thus
> when you pick a larger pen (using the new pen_matrix calls) you get
> larger dashes as well. For back-compatability the set_line_width would
> rescale the dash pattern.
> I think there could be some advantage in having the stroking algorithim
> work this way in a space where the pen can be assumed to be a 1-unit
> circle, but am not sure. There is a problem in that if the pen is an
> ellipse the dashes would also be unequal in length depending on the
> direction, but I think this is compatible with current Cairo
Yeah, but if separating pen matrix, we should also go ahead and try to
make it possible to have a an ellipse pen but uniform dashes.
> and may be
> desirable if arbitrary end cap shapes are allowed. I suspect also things
> like mitre limit will produce different size points when the pen is an
> ellipse, but again compatible with the current version.
> > Fixing this for text is even trickier. When do you lock the ctm?! At
> > cairo_set_font_size(), sure. At cairo_set_font_matrix() too?! That
> > kinda doesn't sound right, but makes some sense... I'll discuss that
> > more when we consider this change...
> I'm pretty certain it would be done at the time of the set_font_matrix.
> I believe font_size should be a convinence wrapper over this, just as
> you are proposing for the pen.
Problem with it is, people expect that sandwiching between
"cairo_save(); cairo_scale(2,2);" and "cairo_restore()" should make it
draw twice bigger text. If we lock, that wouldn't happen. Donno.
"Those who would give up Essential Liberty to purchase a little
Temporary Safety, deserve neither Liberty nor Safety."
-- Benjamin Franklin, 1759
More information about the cairo