⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ttdriver.c

📁 Qt/Embedded是一个多平台的C++图形用户界面应用程序框架
💻 C
📖 第 1 页 / 共 2 页
字号:
      left  = 0;      right = face->num_kern_pairs - 1;      while ( left <= right )      {        TT_Int    middle   = left + ((right-left) >> 1);        TT_ULong  cur_pair;        pair     = face->kern_pairs + middle;        cur_pair = PAIR_TAG( pair->left, pair->right );        if ( cur_pair == search_tag )          goto Found;        if ( cur_pair < search_tag )          left = middle+1;        else          right = middle-1;      }    }  Exit:    return TT_Err_Ok;  Found:    kerning->x = pair->value;    goto Exit;  }#undef PAIR_TAG  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****                                                                 ****/  /****                           S I Z E S                             ****/  /****                                                                 ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Set_Char_Sizes                                                     */  /*                                                                       */  /* <Description>                                                         */  /*    A driver method used to reset a size's character sizes (horizontal */  /*    and vertical) expressed in fractional points.                      */  /*                                                                       */  /* <Input>                                                               */  /*    char_width  :: The character width expressed in 26.6 fractional    */  /*                   points.                                             */  /*    char_height :: The character height expressed in 26.6 fractional   */  /*                   points.                                             */  /*                                                                       */  /* <InOut>                                                               */  /*    size        :: A handle to the target size object.                 */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  static  TT_Error  Set_Char_Sizes( TT_Size     size,                            TT_F26Dot6  char_width,                            TT_F26Dot6  char_height,                            TT_UInt     horz_resolution,                            TT_UInt     vert_resolution )  {    FT_Size_Metrics*  metrics = &size->root.metrics;    TT_Face           face    = (TT_Face)size->root.face;    TT_Long           dim_x, dim_y;    /* This bit flag, when set, indicates that the pixel size must be */    /* truncated to an integer. Nearly all TrueType fonts have this   */    /* bit set, as hinting won't work really well otherwise.          */    /*                                                                */    /* However, for those rare fonts who do not set it, we override   */    /* the default computations performed by the base layer. I really */    /* don't know if this is useful, but hey, that's the spec :-)     */    /*                                                                */    if ( (face->header.Flags & 8) == 0 )    {      /* Compute pixel sizes in 26.6 units */      dim_x = (char_width * horz_resolution) / 72;      dim_y = (char_height * vert_resolution) / 72;      metrics->x_scale = FT_DivFix( dim_x, face->root.units_per_EM );      metrics->y_scale = FT_DivFix( dim_y, face->root.units_per_EM );      metrics->x_ppem    = (TT_UShort)(dim_x >> 6);      metrics->y_ppem    = (TT_UShort)(dim_y >> 6);    }        size->ttmetrics.valid = FALSE;    return TT_Reset_Size( size );  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Set_Pixel_Sizes                                                    */  /*                                                                       */  /* <Description>                                                         */  /*    A driver method used to reset a size's character sizes (horizontal */  /*    and vertical) expressed in integer pixels.                         */  /*                                                                       */  /* <Input>                                                               */  /*    pixel_width  :: The character width expressed in integer pixels.   */  /*                                                                       */  /*    pixel_height :: The character height expressed in integer pixels.  */  /*                                                                       */  /* <InOut>                                                               */  /*    size         :: A handle to the target size object.                */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code. 0 means success                               */  /*                                                                       */  static  TT_Error  Set_Pixel_Sizes( TT_Size  size,                             TT_UInt  pixel_width,                             TT_UInt  pixel_height )  {    (void) pixel_width;    (void) pixel_height;    /* many things were pre-computed by the base layer */    size->ttmetrics.valid = FALSE;    return TT_Reset_Size( size );  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Load_Glyph                                                         */  /*                                                                       */  /* <Description>                                                         */  /*    A driver method used to load a glyph within a given glyph slot.    */  /*                                                                       */  /* <Input>                                                               */  /*    slot        :: A handle to the target slot object where the glyph  */  /*                   will be loaded.                                     */  /*                                                                       */  /*    size        :: A handle to the source face size at which the glyph */  /*                   must be scaled/loaded/etc.                          */  /*                                                                       */  /*    glyph_index :: The index of the glyph in the font file.            */  /*                                                                       */  /*    load_flags  :: A flag indicating what to load for this glyph.  The */  /*                   FTLOAD_??? constants can be used to control the     */  /*                   glyph loading process (e.g., whether the outline    */  /*                   should be scaled, whether to load bitmaps or not,   */  /*                   whether to hint the outline, etc).                  */  /* <Output>                                                              */  /*    result      :: A set of bit flags indicating the type of data that */  /*                   was loaded in the glyph slot (outline, bitmap,      */  /*                   pixmap, etc).                                       */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  static  TT_Error  Load_Glyph( TT_GlyphSlot  slot,                        TT_Size       size,                        TT_UShort     glyph_index,                        TT_UInt       load_flags )  {    TT_Error  error;    if ( !slot )      return TT_Err_Invalid_Glyph_Handle;    /* check that we want a scaled outline or bitmap */    if ( !size )      load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;    if ( load_flags & FT_LOAD_NO_SCALE )      size = NULL;    /* reset the size object if necessary */    if ( size )    {      /* these two object must have the same parent */      if ( size->root.face != slot->face )        return TT_Err_Invalid_Face_Handle;      if ( !size->ttmetrics.valid )      {        if ( FT_SET_ERROR( TT_Reset_Size( size ) ) )          return error;      }    }    /* now load the glyph outline if necessary */    error = TT_Load_Glyph( size, slot, glyph_index, load_flags );    /* force drop-out mode to 2 - irrelevant now */    /* slot->outline.dropout_mode = 2; */    return error;  }  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****                                                                 ****/  /****             C H A R A C T E R   M A P P I N G S                 ****/  /****                                                                 ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    Get_Char_Index                                                     */  /*                                                                       */  /* <Description>                                                         */  /*    Uses a charmap to return a given character code's glyph index.     */  /*                                                                       */  /* <Input>                                                               */  /*    charmap  :: A handle to the source charmap object.                 */  /*    charcode :: The character code.                                    */  /*                                                                       */  /* <Return>                                                              */  /*    Glyph index.  0 means `undefined character code'.                  */  /*                                                                       */  static  FT_UInt  Get_Char_Index( TT_CharMap  charmap,                           TT_Long     charcode )  {    TT_Error       error;    TT_Face        face;    TT_CMapTable*  cmap;        cmap = &charmap->cmap;    face = (TT_Face)charmap->root.face;    /* Load table if needed */    if ( !cmap->loaded )    {      SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;            error = sfnt->load_charmap( face, cmap, face->root.stream );      if (error)        return error;      cmap->loaded = TRUE;    }    if ( cmap->get_index )      return cmap->get_index( cmap, charcode );    else      return 0;  }  /* The FT_DriverInterface structure is defined in ftdriver.h. */  const FT_DriverInterface  tt_driver_interface =  {    sizeof ( TT_DriverRec ),    sizeof ( TT_FaceRec ),    sizeof ( TT_SizeRec ),    sizeof ( FT_GlyphSlotRec ),    "truetype",      /* driver name                           */    100,             /* driver version == 1.0                 */    200,             /* driver requires FreeType 2.0 or above */    (void*)0,    (FTDriver_initDriver)        TT_Init_Driver,    (FTDriver_doneDriver)        TT_Done_Driver,    (FTDriver_getInterface)      0,     /* no extra interface for now */    (FTDriver_initFace)          Init_Face,    (FTDriver_doneFace)          TT_Done_Face,    (FTDriver_getKerning)        Get_Kerning,    (FTDriver_initSize)          TT_Init_Size,    (FTDriver_doneSize)          TT_Done_Size,    (FTDriver_setCharSizes)      Set_Char_Sizes,    (FTDriver_setPixelSizes)     Set_Pixel_Sizes,    (FTDriver_initGlyphSlot)     TT_Init_GlyphSlot,    (FTDriver_doneGlyphSlot)     TT_Done_GlyphSlot,    (FTDriver_loadGlyph)         Load_Glyph,    (FTDriver_getCharIndex)      Get_Char_Index,  };  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    getDriverInterface                                                 */  /*                                                                       */  /* <Description>                                                         */  /*    This function is used when compiling the TrueType driver as a      */  /*    shared library (`.DLL' or `.so').  It will be used by the          */  /*    high-level library of FreeType to retrieve the address of the      */  /*    driver's generic interface.                                        */  /*                                                                       */  /*    It shouldn't be implemented in a static build, as each driver must */  /*    have the same function as an exported entry point.                 */  /*                                                                       */  /* <Return>                                                              */  /*    The address of the TrueType's driver generic interface.  The       */  /*    format-specific interface can then be retrieved through the method */  /*    interface->get_format_interface.                                   */  /*                                                                       */#ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS  EXPORT_FUNC  FT_DriverInterface*  getDriverInterface( void )  {    return &tt_driver_interface;  }#endif /* CONFIG_OPTION_DYNAMIC_DRIVERS *//* END */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -