[cairo] Problem with text rendering on Win32+ClearType, and possible fix

Tor Lillqvist tml at iki.fi
Wed Oct 4 09:06:51 PDT 2006


 > On Wed, 2006-10-04 at 03:28 +0300, Tor Lillqvist wrote:

 > > [...] starting with 1.0.4, cairo_win32_surface_create() sets the
 > > surface format to CAIRO_FORMAT_ARGB32 if
 > > GetDeviceCaps(hdc,BITSPIXEL) returns 32. (In 1.0.2, the format
 > > was always set to CAIRO_FORMAT_RGB24.)

 > > If I changed cairo_win32_surface_create() to use RGB24 also when
 > > BITSPIXEL is 32, the problem went away, [...] But this seemed
 > > like using a awfully large hammer to fix the problem.

Owen Taylor writes:
 >  > But it may be the right hammer none-the-less.

Heh. I had assumed that the change to use ARGB32 when BITSPIXEL==32
was the result of careful thought, but your mail now seems to say it's
a horrible mistake.

I assume it's this entry in ChangeLog that refers to this change:

> commit ec4b006c162292ea3b2719dc18a4a3bd40a971ab
> Author: Vladimir Vukicevic <vladimir at pobox.com>
> Date:   Fri Feb 17 23:34:51 2006 -0800
> 
>     Win32: Set surface format based on device caps
> 
>     If the DC is a display DC, inspect its depth and set out local format
>     appropriately.  If it's not a display DC, assume RGB24.

 > While the documentation of BITSPIXEL "Number of adjacent color
 > bits for each pixel" makes it sound like like the X concept of
 > "depth" - number of *used* bits per pixel, if you are seeing a value of
 > 32 in normal cases, then it's pretty clearly the X concept of
 > "bits per pixel" - the number of *total* bits per pixel.

Yep. That indeed is the case.

 > I'm not really sure how to extract the diff and commit message
 > for the 1.0.2 => 1.0.4 change.

Dunno about commit messages, but just diffing cairo-win32-surface.c
from 1.0.2 vs. 1.0.4 gives pretty concise output.

--tml



More information about the cairo mailing list