[cairo] towards 24.8

Vladimir Vukicevic vladimir at pobox.com
Mon Jun 18 13:27:05 PDT 2007

So I've got this working!  The current work in progress is in the 
fixed-24-8 branch in my tree 
(git://git.cairographics.org/~vladimir/cairo I believe).  Cairo can use 
any fixed point format, and it'll correctly convert to 16.16 for talking 
to pixman/xlib/xcb/etc, but svg, pdf, and other surfaces get the full 
precision.  It should be possible to easily convert to using a 64-bit 
fixed point type, or even using doubles throughout, though it's more 
work than just increasing/decreasing the number of fractional bits.

There are still some things I need to clean up, and I'll probably end up 
redoing a number of the commits to incorporate fixes for issues that I 
discovered in future patches to make it easier to review.  There are a 
lot of changes, so I expect review to be a bit painful, but essentially 
the separate chunks are:

- Make fixed point methods static inline and don't hardcode 16.16
- [misc] Remove usage of cairo_fixed_16_16_t from quartz surface (should 
be cairo_fixed_t)
- Use _cairo_fixed_mul() instead of hand-written fixed-point multiplication
- Convert all usage of cairo_rectangle_int16_t to cairo_rectangle_int_t, 
which is typedef'd based on how many bits of precision are present in 
the fixed type (this could also always just be 32-bit, but I wanted to 
be able to keep things how they are for 16.16)
- Remove dependencies on pixman_color_stop_t, pixman_gradient_t, and 
friends -- introduce cairo_gradient_stop_t; add code to convert from 
cairo_gradient_stop_t etc. to pixman equivalents in cairo-pattern.c
- Fix up image surface to translate cairo_fixed_t to 16.16
- Fix up xlib surface to translate cairo_fixed_t to 16.16
- Fix up xcb surface to translate cairo_fixed_t to 16.16
- create cairo_region_t and replace all usage of pixman_region16_t usage 
with it (initially, it just wraps pixman_region16_t)

I've confirmed that I can switch fixed point types trivially and get 
correct results from PS, SVG, etc. surfaces that don't rely on pixman. 
Two #defines and you can get 24.8, 26.6, etc..

    - Vlad

More information about the cairo mailing list