freetype hack committed
Wed Mar 3 13:56:45 PST 2004
Keith Packard writes:
> Around 22 o'clock on Mar 2, Egbert Eich wrote:
> > The code in question:
> > TT_Size tt_size = (TT_Size)instance->size;
> > if( !( !(instance->load_flags & FT_LOAD_NO_BITMAP)
> > && tt_size->strike_index != 0xFFFFU ) ) correct=1;
> > was added with 1.36.
> Ah, ok. This is part of the code that Juliusz was upset about; the XTT
> integration which was not well tested or understood by him. I didn't take
> that code on the strength of his objections. But, if we want to be XFree86
> 4.4-ish, we may have to.
> This code detects when the size requested by the application precisely
> matches an available bitmap (but only for TrueType faces). When this
> happens, it forces the exact computation of the bounding box so that
> metrics will be correct.
> It's just an optimization to speed computation of metrics for outlines, so
> we can safely disable it an expect a slight performance penalty for
> large outline fonts loaded a sizes other than those for which bitmaps are
> supplied. A fix which would generate correct (if slow) results would be:
> if ((instance->load_flags & FT_LOAD_NO_BITMAP) ||
> (face->face->face_flags & FT_FACE_FLAG_FIXED_SIZES) == 0) correct = 1;
Thank you. This looks much better. (also the logic is much less obfuscated).
> I'd prefer this approach; otherwise, we're depending on the layout of an
> internal data structure which has an #ifdef that affects the presence of
> the strike_index member.
Right. Also we have plenty of other structures above this - not all
of these are external.
I'll add this change and commit it later today.
More information about the release-wranglers