FT_FaceRec 是 FreeType 库中用于描述字体文件的数据结构之一。它包含了一个字体文件的所有信息,包括字体的度量信息、字形数据、字形轮廓等。

typedef struct  FT_FaceRec_
{
    FT_Long           num_faces;  //字体文件中包含的字体数目,通常为1
    FT_Long           face_index; //当前字体在字体文件中的索引

    FT_Long           face_flags;  //字体标志,指定字体的属性(如粗体、斜体等)
        //FT_FACE_FLAG_SCALABLE
        //FT_FACE_FLAG_FIXED_SIZES
        //FT_FACE_FLAG_MULTIPLE_MASTERS
    FT_Long           style_flags; //字形样式标志,指定字形的属性(如粗体、斜体等)
        //FT_STYLE_FLAG_BOLD
        //FT_STYLE_FLAG_ITALIC

    FT_Long           num_glyphs; //字体中的glyph数目

    FT_String*        family_name; //名称
    FT_String*        style_name;  //字体风格名称

    FT_Int            num_fixed_sizes; //固定大小字体的数量
    FT_Bitmap_Size*   available_sizes; //固定大小字体的数组

    FT_Int            num_charmaps; //字符编码映射表(charmap)的数量
    FT_CharMap*       charmaps;     //字符编码映射表(charmap)数组

    FT_Generic        generic; //用于存储任意类型的额外数据

    /*# The following member variables (down to `underline_thickness`) */
    /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size    */
    /*# for bitmap fonts.                                              */
    FT_BBox           bbox; //字体的外包矩形,单位像素

    FT_UShort         units_per_EM; //字体的EM(em-square)尺寸
        //也就是字体的基础单位,通常等于字体的设计尺寸

    FT_Short          ascender;  //字体基线上方的距离,单位font units
    FT_Short          descender; //字体基线下方的距离,单位font units
    FT_Short          height;    //字体的高度(ascender和descender之和),单位font units

    FT_Short          max_advance_width; //字体中最大的advance宽度
        //advance是指字符的推进量,即字符之间的距离,单位font units
    FT_Short          max_advance_height; //字体中最大的advance高度,单位font units

    FT_Short          underline_position;  //字体下划线位置的垂直坐标,单位font units
    FT_Short          underline_thickness; //字体下划线的粗细度

    FT_GlyphSlot      glyph;   //存储当前字体中的glyph图像槽
    FT_Size           size;    //字体大小,单位像素
    FT_CharMap        charmap; //当前字体的字符编码映射表

    /*@private begin */

    FT_Driver         driver;  //字体所使用的驱动程序
    FT_Memory         memory;  //用于内存管理的内部数据结构
    FT_Stream         stream;  //字体所对应的输入流,用于从字体文件中读取数据

    FT_ListRec        sizes_list; //固定大小字体列表

    FT_Generic        autohint;   /* face-specific auto-hinter data */
        //自动hinting程序
    void*             extensions; /* unused                         */
        //存储任意类型的扩展数据

    FT_Face_Internal  internal; //是一些额外的内部信息,通常不需要直接访问

    /*@private end */

} FT_FaceRec;