1 2 // Copyright Michael D. Parker 2018. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 module bindbc.freetype.bind.ftcache; 8 9 import bindbc.freetype.config; 10 import bindbc.freetype.bind.freetype, 11 bindbc.freetype.bind.ftglyph, 12 bindbc.freetype.bind.fttypes; 13 14 alias FTC_FaceID = FT_Pointer; 15 extern(C) nothrow alias FTC_Face_Requester = FT_Error function(FTC_FaceID,FT_Library,FT_Pointer,FT_Face*); 16 17 struct FTC_ManagerRec; 18 struct FTC_NodeRec; 19 20 alias FTC_Manager = FTC_ManagerRec*; 21 alias FTC_Node = FTC_NodeRec*; 22 23 struct FTC_ScalerRec { 24 FTC_FaceID face_id; 25 FT_UInt width; 26 FT_UInt height; 27 FT_Int pixel; 28 FT_UInt x_res; 29 FT_UInt y_res; 30 } 31 32 alias FTC_Scaler = FTC_ScalerRec*; 33 34 struct FTC_CMapCacheRec; 35 alias FTC_CMapCache = FTC_CMapCacheRec*; 36 37 struct FTC_ImageTypeRec { 38 FTC_FaceID face_id; 39 FT_UInt width; 40 FT_UInt height; 41 FT_Int32 flags; 42 } 43 44 alias FTC_ImageType = FTC_ImageTypeRec*; 45 46 struct FTC_ImageCacheRec; 47 alias FTC_ImageCache = FTC_ImageCacheRec*; 48 49 alias FTC_SBit = FTC_SBitRec*; 50 51 struct FTC_SBitRec { 52 FT_Byte width; 53 FT_Byte height; 54 FT_Char left; 55 FT_Char top; 56 FT_Byte format; 57 FT_Byte max_grays; 58 FT_Short pitch; 59 FT_Char xadvance; 60 FT_Char yadvance; 61 FT_Byte* buffer; 62 } 63 64 struct FTC_SBitCacheRec; 65 alias FTC_SBitCache = FTC_SBitCacheRec*; 66 67 version(BindFT_Static) { 68 extern(C) @nogc nothrow { 69 FT_Error FTC_Manager_New(FT_Library,FT_UInt,FT_UInt,FT_ULong,FTC_Face_Requester,FT_Pointer,FTC_Manager*); 70 void FTC_Manager_Reset(FTC_Manager); 71 void FTC_Manager_Done(FTC_Manager); 72 FT_Error FTC_Manager_LookupFace(FTC_Manager,FTC_FaceID,FT_Face*); 73 FT_Error FTC_Manager_LookupSize(FTC_Manager,FTC_Scaler,FT_Size*); 74 void FTC_Node_Unref(FTC_Node,FTC_Manager); 75 void FTC_Manager_RemoveFaceID(FTC_Manager,FTC_FaceID); 76 FT_Error FTC_CMapCache_New(FTC_Manager,FTC_CMapCache*); 77 FT_UInt FTC_CMapCache_Lookup(FTC_CMapCache,FTC_FaceID,FT_Int,FT_UInt32); 78 FT_Error FTC_ImageCache_New(FTC_Manager,FTC_ImageCache*); 79 FT_Error FTC_ImageCache_Lookup(FTC_ImageCache,FTC_ImageType,FT_UInt,FT_Glyph*,FTC_Node*); 80 FT_Error FTC_ImageCache_LookupScaler(FTC_ImageCache,FTC_Scaler,FT_ULong,FT_UInt,FT_Glyph*,FTC_Node*); 81 FT_Error FTC_SBitCache_New(FTC_Manager,FTC_SBitCache*); 82 FT_Error FTC_SBitCache_Lookup(FTC_SBitCache,FTC_ImageType,FT_UInt,FTC_SBit*,FTC_Node*); 83 FT_Error FTC_SBitCache_LookupScaler(FTC_SBitCache,FTC_Scaler,FT_ULong,FT_UInt,FTC_SBit*,FTC_Node*); 84 } 85 } 86 else { 87 extern(C) @nogc nothrow { 88 alias pFTC_Manager_New = FT_Error function(FT_Library,FT_UInt,FT_UInt,FT_ULong,FTC_Face_Requester,FT_Pointer,FTC_Manager*); 89 alias pFTC_Manager_Reset = void function(FTC_Manager); 90 alias pFTC_Manager_Done = void function(FTC_Manager); 91 alias pFTC_Manager_LookupFace = FT_Error function(FTC_Manager,FTC_FaceID,FT_Face*); 92 alias pFTC_Manager_LookupSize = FT_Error function(FTC_Manager,FTC_Scaler,FT_Size*); 93 alias pFTC_Node_Unref = void function(FTC_Node,FTC_Manager); 94 alias pFTC_Manager_RemoveFaceID = void function(FTC_Manager,FTC_FaceID); 95 alias pFTC_CMapCache_New = FT_Error function(FTC_Manager,FTC_CMapCache*); 96 alias pFTC_CMapCache_Lookup = FT_UInt function(FTC_CMapCache,FTC_FaceID,FT_Int,FT_UInt32); 97 alias pFTC_ImageCache_New = FT_Error function(FTC_Manager,FTC_ImageCache*); 98 alias pFTC_ImageCache_Lookup = FT_Error function(FTC_ImageCache,FTC_ImageType,FT_UInt,FT_Glyph*,FTC_Node*); 99 alias pFTC_ImageCache_LookupScaler = FT_Error function(FTC_ImageCache,FTC_Scaler,FT_ULong,FT_UInt,FT_Glyph*,FTC_Node*); 100 alias pFTC_SBitCache_New = FT_Error function(FTC_Manager,FTC_SBitCache*); 101 alias pFTC_SBitCache_Lookup = FT_Error function(FTC_SBitCache,FTC_ImageType,FT_UInt,FTC_SBit*,FTC_Node*); 102 alias pFTC_SBitCache_LookupScaler = FT_Error function(FTC_SBitCache,FTC_Scaler,FT_ULong,FT_UInt,FTC_SBit*,FTC_Node*); 103 } 104 105 __gshared { 106 pFTC_Manager_New FTC_Manager_New; 107 pFTC_Manager_Reset FTC_Manager_Reset; 108 pFTC_Manager_Done FTC_Manager_Done; 109 pFTC_Manager_LookupFace FTC_Manager_LookupFace; 110 pFTC_Manager_LookupSize FTC_Manager_LookupSize; 111 pFTC_Node_Unref FTC_Node_Unref; 112 pFTC_Manager_RemoveFaceID FTC_Manager_RemoveFaceID; 113 pFTC_CMapCache_New FTC_CMapCache_New; 114 pFTC_CMapCache_Lookup FTC_CMapCache_Lookup; 115 pFTC_ImageCache_New FTC_ImageCache_New; 116 pFTC_ImageCache_Lookup FTC_ImageCache_Lookup; 117 pFTC_ImageCache_LookupScaler FTC_ImageCache_LookupScaler; 118 pFTC_SBitCache_New FTC_SBitCache_New; 119 pFTC_SBitCache_Lookup FTC_SBitCache_Lookup; 120 pFTC_SBitCache_LookupScaler FTC_SBitCache_LookupScaler; 121 } 122 }