[cairo] Cairo + Pango

Bill Spitzak spitzak at d2.com
Sat Aug 7 15:34:39 PDT 2004

On Saturday 07 August 2004 10:58 am, Jon Smirl wrote:
> If I read the Microsoft docs right Longhown has an API where you pass
> in all of the glyphs and floating point x/y coordinates for them. The
> floating point positioning is used to achive subpixel placement of the
> glyphs.
> Pixels on most LCDs look like this:
> With pixel level positoning the glyph will always start on an R. With
> subpixel positioning the glyph can start on any of RGB. Subpixel
> positioning is different than subpixel smoothing which X currently
> does.

It's a lot more than just that LCD trick. Just plain monochrome antialiasing, 
if done correctly, must produce a different image for different fractional x 
and y cooridinates. Usually the coordinates are rounded to finer fractional 
positions, such as 1/4 pixel.

The LCD hack really means that b&w glyphs are produced at a resolution that 
is 3x higher horizontally. Plus the rendring is adjusted so that vertical 
lines are 3 wide (so they have no color). These b&w glyphs are "positioned" 
by making them mess with the colors, but until this final stage it is best to 
think of the screen as having 3x horizontal resolution. These rules should 
also be used for Cairo's antialiasing so it can antialias the LCD correctly.

Because of this higher fake resolution of LCD screens it may not be necessary 
for the glyphs to have a further 4x horizontal positioning accuracy.

My recommendation:

LCD screens should be treated by Cairo exactly like they have 3x resolution 
in one direction. All transforms, etc, should be done as though this is the 
final output device. The final stage of compositing selects from the r,g,b of 
source and destination images according to x%3. The other trick is that thin 
lines are made 3 pixels wide horizontally, and the font renderer also likes 
to make things 3 pixels thick.

Compelety independendly, the glyph cache has nxm samples of each glyph, for n 
horizontal and m vertical pixel subpositions. For normal screens this should 
probably be 4,4. For an LCD screen maybe it should be 1,4 since the 3x 
sampling of the LCD makes up for it. For very high resolution screens this 
could be reduced to 2,2 and then 1,1.

More information about the cairo mailing list