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 }