[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft-devel] FT_Get_Advance() docs

From: Werner LEMBERG
Subject: Re: [ft-devel] FT_Get_Advance() docs
Date: Wed, 30 Nov 2011 17:47:46 +0100 (CET)

> I know this isn't a welcome remark, but I'm going to say it anyway,
> because it's a rule I apply to myself: if an API is difficult to
> explain then it should be changed.

:-) Fortunately, it's not me to blame for the design of this API.  And
I haven't written the documentation either.

> Yes, I know you can't do that - but it's an argument for carefully
> documenting something as it is written, and changing it before
> release if the documentation gets too hard to write.  And rather
> than saying a wording is unfortunate, just change it.

Hehe.  It was a call for help, and behold, a saviour has appeared.

> An attempt at better wording for the quoted text:
>   You can set a flag that allows fast retrieval of advance values:
>   [...]

But this is not correct!  If you set the flag, *only* fast retrieval
is tried.  If you don't set it, you get fast retrieval also if

Below is my proposal for an improved documentation of FT_Get_Advance.




     Retrieve the advance value of a given glyph outline in an

     face       :: The source @FT_Face handle.

     gindex     :: The glyph index.

     load_flags :: A set of bit flags similar to those used when
                   calling @FT_Load_Glyph.
     padvance   :: The advance value, either in font units if
                   @FT_LOAD_NO_SCALE is used, or in 16.16 format for
                   all other load flags.

                   If @FT_LOAD_VERTICAL_LAYOUT is set, this is the
                   vertical advance corresponding to a vertical layout.
                   Otherwise, it is the horizontal advance in a
                   horizontal layout.

     FreeType error code.  0 means success.

     Quick retrieval of advance widths is possible if a glyph is
     unhinted (@FT_LOAD_NO_HINTING), or unscaled (@FT_LOAD_NO_SCALE),
     or bitmapped, or if light-hinting is used (@FT_RENDER_MODE_LIGHT),
     and the font backend supports it.  To check these conditions, add
     the @FT_ADVANCE_FLAG_FAST_ONLY flag to `load_flags'; in case of
     failure `FT_Err_Unimplemented_Feature' is returned.

     If the above conditions are met and @FT_LOAD_NO_SCALE isn't set,
     values equal to the `linearHoriAdvance' (or `linearVertAdvance')
     field of a @FT_GlyphSlot structure are returned in `padvance'.

     If the above conditions aren't met and @FT_LOAD_NO_SCALE isn't
     set, @FT_Load_Glyph is called, and values equal to the `advance'
     field of a @FT_GlyphSlot structure are returned in `padvance' (but
     in 16.16 format).

     If the returned advance value gets scaled, the affine
     transformation specified by @FT_Set_Transform is not applied.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]