[cairo] Problems with cairo_get_line_width and "new" semantics

Behdad Esfahbod behdad at cs.toronto.edu
Tue May 16 14:24:11 PDT 2006

On Tue, 16 May 2006, Bill Spitzak wrote:

> Carl Worth wrote:
> > Perhaps what we should do is to add two new functions for working with
> > the pen directly as the ellipse it is?
> >
> > 	cairo_public void
> > 	cairo_set_pen (cairo_t			*cr,
> > 		       double			 line_width,
> > 		       const cairo_matrix_t	*matrix);
> >
> > 	cairo_public void
> > 	cairo_get_pen (cairo_t			*cr,
> > 		       double			*line_width,
> > 		       cairo_matrix_t		*matrix);
> >
> > Then it's simple enough to specify cairo_set_line_width as being
> > equivalent to calling cairo_set_pen with the matrix argument equal to
> > the current CTM.
> >
> > Then I suppose cairo_get_line_width could be specified as being
> > equivalent to cairo_get_pen and simply ignoring the matrix
> > returned. That is, this would return a line width in the _original_
> > user space and not in the current user space.
> >
> > Thoughts?
> I think the "all api is in user CTM" idea would also apply here. So I
> would propose:
> set_pen(size, matrix) would multiply the matrix by the CTM and store
> that as the penCTM. It would also store the size.
> get_pen() would divide the penCTM by the CTM and return that, and return
> the size unchanged.
> set_pen_width(size) would be the same as set_pen(size, identity).
> get_pen_width() would return the size multiplied by the square root of
> the determinant of the penCTM divided by the CTM.

I'll rather go like your font suggestion:

set_pen_matrix(m) multiples m by CTM and sets as penCTM.
get_pen_matrix() divides penCTM by CTM and returns.
set_pen_width(s) does set_pen_matrix([s, 0, 0, s]).
get_pen_width() returns square root of the determinant of the
penCTM divided by the CTM.

This makes the pen_width handling exactly like the font_size is.


"Commandment Three says Do Not Kill, Amendment Two says Blood Will Spill"
	-- Dan Bern, "New American Language"

More information about the cairo mailing list