1 
2 //          Copyright 2019 - 2021 Michael D. Parker
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 static if(staticBinding) {
68 	extern(C) @nogc nothrow {
69         FT_Error FTC_Manager_New(FT_Library library, FT_UInt max_faces, FT_UInt max_sizes, FT_ULong max_bytes, FTC_Face_Requester requester, FT_Pointer req_data, FTC_Manager* amanager);
70         void FTC_Manager_Reset(FTC_Manager manager);
71         void FTC_Manager_Done(FTC_Manager manager);
72         FT_Error FTC_Manager_LookupFace(FTC_Manager manager, FTC_FaceID face_id, FT_Face* aface);
73         FT_Error FTC_Manager_LookupSize(FTC_Manager manager,FTC_Scaler sacler, FT_Size* asize);
74         void FTC_Node_Unref(FTC_Node node, FTC_Manager manager);
75         void FTC_Manager_RemoveFaceID(FTC_Manager manager, FTC_FaceID face_id);
76         FT_Error FTC_CMapCache_New(FTC_Manager manager, FTC_CMapCache* acache);
77         FT_UInt FTC_CMapCache_Lookup(FTC_CMapCache cache, FTC_FaceID face_id, FT_Int cmap_index, FT_UInt32 char_code);
78         FT_Error FTC_ImageCache_New(FTC_Manager manager, FTC_ImageCache* acache);
79         FT_Error FTC_ImageCache_Lookup(FTC_ImageCache cache, FTC_ImageType type, FT_UInt gindex, FT_Glyph* aglyph, FTC_Node* anode);
80         FT_Error FTC_ImageCache_LookupScaler(FTC_ImageCache cache, FTC_Scaler scaler, FT_ULong load_flags, FT_UInt gindex, FT_Glyph* aglyph, FTC_Node* anode);
81         FT_Error FTC_SBitCache_New(FTC_Manager manager, FTC_SBitCache* acache);
82         FT_Error FTC_SBitCache_Lookup(FTC_SBitCache cache, FTC_ImageType type, FT_UInt gindex, FTC_SBit* sbit, FTC_Node* anode);
83         FT_Error FTC_SBitCache_LookupScaler(FTC_SBitCache cache, FTC_Scaler scaler, FT_ULong load_flags, FT_UInt gindex, FTC_SBit* sbit, FTC_Node* anode);
84     }
85 }
86 else {
87     extern(C) @nogc nothrow {
88         alias pFTC_Manager_New = FT_Error function(FT_Library library, FT_UInt max_faces, FT_UInt max_sizes, FT_ULong max_bytes, FTC_Face_Requester requester, FT_Pointer req_data, FTC_Manager* amanager);
89         alias pFTC_Manager_Reset = void function(FTC_Manager manager);
90         alias pFTC_Manager_Done = void function(FTC_Manager manager);
91         alias pFTC_Manager_LookupFace = FT_Error function(FTC_Manager manager, FTC_FaceID face_id, FT_Face* aface);
92         alias pFTC_Manager_LookupSize = FT_Error function(FTC_Manager manager, FTC_Scaler scaler, FT_Size* asize);
93         alias pFTC_Node_Unref = void function(FTC_Node node, FTC_Manager manager);
94         alias pFTC_Manager_RemoveFaceID = void function(FTC_Manager manager,FTC_FaceID face_id);
95         alias pFTC_CMapCache_New = FT_Error function(FTC_Manager manager,FTC_CMapCache* acache);
96         alias pFTC_CMapCache_Lookup = FT_UInt function(FTC_CMapCache cache, FTC_FaceID face_id, FT_Int cmap_index, FT_UInt32 char_code);
97         alias pFTC_ImageCache_New = FT_Error function(FTC_Manager manager, FTC_ImageCache* acache);
98         alias pFTC_ImageCache_Lookup = FT_Error function(FTC_ImageCache cache, FTC_ImageType type, FT_UInt gindex, FT_Glyph* aglyph, FTC_Node* anode);
99         alias pFTC_ImageCache_LookupScaler = FT_Error function(FTC_ImageCache cache, FTC_Scaler scaler, FT_ULong load_flags, FT_UInt gindex, FT_Glyph* aglyph, FTC_Node* anode);
100         alias pFTC_SBitCache_New = FT_Error function(FTC_Manager manager, FTC_SBitCache* acache);
101         alias pFTC_SBitCache_Lookup = FT_Error function(FTC_SBitCache cache, FTC_ImageType type, FT_UInt gindex, FTC_SBit* sbit, FTC_Node* anode);
102         alias pFTC_SBitCache_LookupScaler = FT_Error function(FTC_SBitCache cache, FTC_Scaler scaler, FT_ULong load_flags, FT_UInt gindex, FTC_SBit* sbit, FTC_Node* anode);
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 }