[cairo] Cairo vs. Xft glyph rendering
Ian Osgood
iano at quirkster.com
Tue Dec 12 07:43:46 PST 2006
On Dec 12, 2006, at 12:39 AM, Behdad Esfahbod wrote:
> On Mon, 2006-12-11 at 14:08 -0800, Daniel Amelang wrote:
>> It looks really good to me. The way you merged the show8/16/32
>> functions is a little scary (I wasn't aware that the various Elt*
>> structures were binary compatible, but now I do!), but without
>> something like a c++ template function, it's probably the best we can
>> get. I think you did great under the circumstances.
>
> I had the same feeling as well, but figured that Xft is already doing
> that. So it should be fine. The funny thing is that I don't think
> there's any guarantee that on other systems (say, Darwin), those
> structs
> are binary compatible. But I don't expect that to happen.
>
> One thing that Xft didn't do but I am, is to use a function pointer
> for
> the XRenderCompositeText* call. They simply take pointers to
> different
> things. So again, I think it's a safe assumption.
>
>> I see this quite a bit in various corners of cairo (and in your
>> latest
>> patch):
>>
>> glyph.index = (unsigned long) -1;
>>
>> Would it be safer/more readable to define something like
>> CAIRO_GLYPH_INDEX_SKIP in cairoint.h?
>
> Done. Except that I chose GLYPH_INDEX_SKIP and just did it there. I
> don't think a global thing like that makes much sense. If another
> backends needs to still two values off the index range, let them
> do. We
> all know that you can take finitely as many as you wish off the top of
> them range with no problem, but I don't see enough reason to declare
> that globally.
>
> In Pango however, we do that, because that's part of the API, not an
> implementation detail like here.
>
>> Also, I see a lot of stuff like this that makes me wonder if some
>> additional #defines could make the code more understandable:
>>
>>> width = max_index < 256 ? 1 : max_index < 65536 ? 2 : 4;
>
> I personally prefer one-off uses to be inline. It's easier to
> audit at
> least. But for anything repeating at least twice, I agree. In this
> case, the other time I'm handling max_index, the code is a bit
> different
> since, silly optimization maybe, because I know width can only go up,
> not down.
>
>> Anyway, congratulations for amazing us once again with some great
>> work!
>
> Thanks. It's pushed now, after fixing the XXXs, and testing that the
> glyph skipping is actually working.
>
>> Dan
>>
> --
> behdad
> http://behdad.org/
>
> "Those who would give up Essential Liberty to purchase a little
> Temporary Safety, deserve neither Liberty nor Safety."
> -- Benjamin Franklin, 1759
Just curious, but did you look at the XCB backend to inform your
recent changes? The XCB renderutil wrapper for glyphs has a similar
design.
Are you planning to update the XCB backend to match your recent Xlib
changes?
Ian
More information about the cairo
mailing list