[cairo] Drawing diagonal lines with antialiasing off
Gustavo J. A. M. Carneiro
gjc at inescporto.pt
Wed Sep 28 03:57:50 PDT 2005
On Tue, 2005-09-27 at 23:47 -0400, Jason Dorje Short wrote:
> Bill Spitzak wrote:
> > I still feel this is going to be one of the big annoyances in Cairo and
> > will have to be addressed. The fact that the original poster thought
> > "turn off antialiasing" was how they got thin lines indicates that a lot
> > of people have no idea what is going on or how to fix it, and that their
> > attempted solutions are going to make Cairo output look like crap.
> > Trying to explain it is hopeless, it just confuses and annoys them, and
> > makes a barrier to getting started with Cairo. Some scheme must be come
> > up with so that Cairo defaults to a behavior that matches virtually
> > every other graphics system in the world.
> > The solution is that a line width of 0.0 is a special case: Cairo draws
> > "thin" but constant-width lines, of 1 pixel on present-day screens. The
> > lines are positioned so that horizontal and vertical ones are opaque and
> > will cover the antialised edges of any rectangle drawn using the same
> > coordinates. Diagonal lines are still antialiased and no guarantee is
> > made about them except they will join horizontal and vertical lines.
> > Line caps are ignored. The value actually has to be zero, a very tiny
> > non-zero value will draw an invisibly-faint antialiased line, and
> > negative line widths should act like the absolute value, except they
> > flip any asymetrical line caps.
> Xlib has a fixed definition of how a line is drawn, which is based on
> integer coordinates (I've read this definition before but now I can't
> find it). Cairo has a different definition that uses floating-point
> Obviously the definitions differ for width-1 lines, but I don't think a
> special case for 0 is a workable solution; it's just a hack and will
> give wrong behavior in some cases (a width0 line should be width 0,
> after all).
Agreed. This width-0 special behaviour induces developers to make
shortcuts that prove disastrous later on. For example, a developer
might use width-0 lines in some places because they look great on his
1024x768 screen. But then you run the application on a 1600x1200
display and it looks too thin. Or on a 600dpi printer it looks even
worse. And in a vector drawing program if you zoom it (apply scale
matrix transformation), the zero-width line stays with the same width,
which is not what you normally want.
Gustavo J. A. M. Carneiro
<gjc at inescporto.pt> <gustavo at users.sourceforge.net>
The universe is always one step beyond logic.
More information about the cairo