1 // Copyright 2014 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXGE_FREETYPE_FX_FREETYPE_H_ 8 #define CORE_FXGE_FREETYPE_FX_FREETYPE_H_ 9 10 #include <ft2build.h> 11 12 #include <memory> 13 14 #include "core/fxcrt/span.h" 15 16 #include FT_FREETYPE_H 17 #include FT_GLYPH_H 18 #include FT_LCD_FILTER_H 19 #include FT_MULTIPLE_MASTERS_H 20 #include FT_OUTLINE_H 21 #include FT_TRUETYPE_TABLES_H 22 23 using FXFT_LibraryRec = struct FT_LibraryRec_; 24 using FXFT_FaceRec = struct FT_FaceRec_; 25 using FXFT_StreamRec = struct FT_StreamRec_; 26 27 struct FXFTFaceRecDeleter { operatorFXFTFaceRecDeleter28 inline void operator()(FXFT_FaceRec* pRec) { FT_Done_Face(pRec); } 29 }; 30 31 struct FXFTLibraryRecDeleter { operatorFXFTLibraryRecDeleter32 inline void operator()(FXFT_LibraryRec* pRec) { FT_Done_FreeType(pRec); } 33 }; 34 35 struct FXFTMMVarDeleter { 36 void operator()(FT_MM_Var* variation_desc); 37 }; 38 39 using ScopedFXFTFaceRec = std::unique_ptr<FXFT_FaceRec, FXFTFaceRecDeleter>; 40 using ScopedFXFTLibraryRec = 41 std::unique_ptr<FXFT_LibraryRec, FXFTLibraryRecDeleter>; 42 43 class ScopedFXFTMMVar { 44 public: 45 explicit ScopedFXFTMMVar(FXFT_FaceRec* face); 46 ~ScopedFXFTMMVar(); 47 48 explicit operator bool() const { return !!variation_desc_; } 49 50 FT_Pos GetAxisDefault(size_t index) const; 51 FT_Long GetAxisMin(size_t index) const; 52 FT_Long GetAxisMax(size_t index) const; 53 54 private: 55 std::unique_ptr<FT_MM_Var, FXFTMMVarDeleter> const variation_desc_; 56 // Points into `variation_desc_`. 57 const pdfium::span<const FT_Var_Axis> axis_; 58 }; 59 60 #define FXFT_Get_Glyph_HoriBearingX(face) (face)->glyph->metrics.horiBearingX 61 #define FXFT_Get_Glyph_HoriBearingY(face) (face)->glyph->metrics.horiBearingY 62 #define FXFT_Get_Glyph_Width(face) (face)->glyph->metrics.width 63 #define FXFT_Get_Glyph_Height(face) (face)->glyph->metrics.height 64 #define FXFT_Get_Glyph_HoriAdvance(face) (face)->glyph->metrics.horiAdvance 65 66 int FXFT_unicode_from_adobe_name(const char* glyph_name); 67 void FXFT_adobe_name_from_unicode(pdfium::span<char> name_buf, wchar_t unicode); 68 69 #endif // CORE_FXGE_FREETYPE_FX_FREETYPE_H_ 70