1 module ft.image; 2 3 import core.stdc.config : c_long, c_ulong; 4 import ft.types : makeTag; 5 6 extern(C) nothrow: 7 8 9 alias FT_Pos = c_long; 10 11 12 struct FT_Vector 13 { 14 FT_Pos x; 15 FT_Pos y; 16 } 17 18 struct FT_BBox 19 { 20 FT_Pos xMin, yMin; 21 FT_Pos xMax, yMax; 22 } 23 24 25 enum FT_Pixel_Mode 26 { 27 FT_PIXEL_MODE_NONE = 0, 28 FT_PIXEL_MODE_MONO, 29 FT_PIXEL_MODE_GRAY, 30 FT_PIXEL_MODE_GRAY2, 31 FT_PIXEL_MODE_GRAY4, 32 FT_PIXEL_MODE_LCD, 33 FT_PIXEL_MODE_LCD_V, 34 FT_PIXEL_MODE_BGRA, 35 36 FT_PIXEL_MODE_MAX /* do not remove */ 37 } 38 39 enum FT_PIXEL_MODE_NONE = FT_Pixel_Mode.FT_PIXEL_MODE_NONE; 40 enum FT_PIXEL_MODE_MONO = FT_Pixel_Mode.FT_PIXEL_MODE_MONO; 41 enum FT_PIXEL_MODE_GRAY = FT_Pixel_Mode.FT_PIXEL_MODE_GRAY; 42 enum FT_PIXEL_MODE_GRAY2 = FT_Pixel_Mode.FT_PIXEL_MODE_GRAY2; 43 enum FT_PIXEL_MODE_GRAY4 = FT_Pixel_Mode.FT_PIXEL_MODE_GRAY4; 44 enum FT_PIXEL_MODE_LCD = FT_Pixel_Mode.FT_PIXEL_MODE_LCD; 45 enum FT_PIXEL_MODE_LCD_V = FT_Pixel_Mode.FT_PIXEL_MODE_LCD_V; 46 enum FT_PIXEL_MODE_BGRA = FT_Pixel_Mode.FT_PIXEL_MODE_BGRA; 47 enum FT_PIXEL_MODE_MAX = FT_Pixel_Mode.FT_PIXEL_MODE_MAX; 48 49 50 struct FT_Bitmap 51 { 52 uint rows; 53 uint width; 54 int pitch; 55 ubyte* buffer; 56 ushort num_grays; 57 ubyte pixel_mode; 58 ubyte palette_mode; 59 void* palette; 60 } 61 62 63 64 struct FT_Outline 65 { 66 short n_contours; /* number of contours in glyph */ 67 short n_points; /* number of points in the glyph */ 68 69 FT_Vector* points; /* the outline's points */ 70 char* tags; /* the points flags */ 71 short* contours; /* the contour end points */ 72 73 int flags; /* outline masks */ 74 } 75 76 enum FT_OUTLINE_CONTOURS_MAX = short.max; 77 enum FT_OUTLINE_POINTS_MAX = short.max; 78 79 enum FT_OUTLINE_NONE = 0x0; 80 enum FT_OUTLINE_OWNER = 0x1; 81 enum FT_OUTLINE_EVEN_ODD_FILL = 0x2; 82 enum FT_OUTLINE_REVERSE_FILL = 0x4; 83 enum FT_OUTLINE_IGNORE_DROPOUTS = 0x8; 84 enum FT_OUTLINE_SMART_DROPOUTS = 0x10; 85 enum FT_OUTLINE_INCLUDE_STUBS = 0x20; 86 87 enum FT_OUTLINE_HIGH_PRECISION = 0x100; 88 enum FT_OUTLINE_SINGLE_PASS = 0x200; 89 90 91 extern(D) 92 auto FT_CURVE_TAG(T)(T flag) 93 { 94 return flag & 3; 95 } 96 97 enum FT_CURVE_TAG_ON = 1; 98 enum FT_CURVE_TAG_CONIC = 0; 99 enum FT_CURVE_TAG_CUBIC = 2; 100 101 enum FT_CURVE_TAG_HAS_SCANMODE = 4; 102 103 enum FT_CURVE_TAG_TOUCH_X = 8; 104 enum FT_CURVE_TAG_TOUCH_Y = 16; 105 106 enum FT_CURVE_TAG_TOUCH_BOTH = FT_CURVE_TAG_TOUCH_X | FT_CURVE_TAG_TOUCH_Y; 107 108 enum FT_Curve_Tag_On = FT_CURVE_TAG_ON; 109 enum FT_Curve_Tag_Conic = FT_CURVE_TAG_CONIC; 110 enum FT_Curve_Tag_Cubic = FT_CURVE_TAG_CUBIC; 111 enum FT_Curve_Tag_Touch_X = FT_CURVE_TAG_TOUCH_X; 112 enum FT_Curve_Tag_Touch_Y = FT_CURVE_TAG_TOUCH_Y; 113 114 115 alias FT_Outline_MoveToFunc = int function ( const(FT_Vector)* to, 116 void* user ); 117 118 alias FT_Outline_MoveTo_Func = FT_Outline_MoveToFunc; 119 120 121 alias FT_Outline_LineToFunc = int function ( const(FT_Vector)* to, 122 void* user ); 123 124 alias FT_Outline_LineTo_Func = FT_Outline_LineToFunc; 125 126 127 alias FT_Outline_ConicToFunc = int function ( const(FT_Vector)* control, 128 const(FT_Vector)* to, 129 void* user ); 130 131 alias FT_Outline_ConicTo_Func = FT_Outline_ConicToFunc; 132 133 134 alias FT_Outline_CubicToFunc = int function ( const(FT_Vector)* control1, 135 const(FT_Vector)* control2, 136 const(FT_Vector)* to, 137 void* user ); 138 139 alias FT_Outline_CubicTo_Func = FT_Outline_CubicToFunc; 140 141 142 struct FT_Outline_Funcs 143 { 144 FT_Outline_MoveToFunc move_to; 145 FT_Outline_LineToFunc line_to; 146 FT_Outline_ConicToFunc conic_to; 147 FT_Outline_CubicToFunc cubic_to; 148 149 int shift; 150 FT_Pos delta; 151 } 152 153 154 enum FT_Glyph_Format 155 { 156 FT_GLYPH_FORMAT_NONE = 0, 157 158 FT_GLYPH_FORMAT_COMPOSITE = makeTag!('c', 'o', 'm', 'p' ), 159 FT_GLYPH_FORMAT_BITMAP = makeTag!('b', 'i', 't', 's' ), 160 FT_GLYPH_FORMAT_OUTLINE = makeTag!('o', 'u', 't', 'l' ), 161 FT_GLYPH_FORMAT_PLOTTER = makeTag!('p', 'l', 'o', 't' ) 162 } 163 164 enum FT_GLYPH_FORMAT_NONE = FT_Glyph_Format.FT_GLYPH_FORMAT_NONE; 165 enum FT_GLYPH_FORMAT_COMPOSITE = FT_Glyph_Format.FT_GLYPH_FORMAT_COMPOSITE; 166 enum FT_GLYPH_FORMAT_BITMAP = FT_Glyph_Format.FT_GLYPH_FORMAT_BITMAP; 167 enum FT_GLYPH_FORMAT_OUTLINE = FT_Glyph_Format.FT_GLYPH_FORMAT_OUTLINE; 168 enum FT_GLYPH_FORMAT_PLOTTER = FT_Glyph_Format.FT_GLYPH_FORMAT_PLOTTER; 169 170 struct FT_RasterRec; 171 alias FT_Raster = FT_RasterRec*; 172 173 struct FT_Span 174 { 175 short x; 176 ushort len; 177 ubyte coverage; 178 } 179 180 181 alias FT_SpanFunc = void function ( int y, 182 int count, 183 const(FT_Span)* spans, 184 void* user ); 185 186 alias FT_Raster_Span_Func = FT_SpanFunc; 187 188 189 alias FT_Raster_BitTest_Func = int function ( int y, 190 int x, 191 void* user ); 192 193 alias FT_Raster_BitSet_Func = void function ( int y, 194 int x, 195 void* user ); 196 197 enum FT_RASTER_FLAG_DEFAULT = 0x0; 198 enum FT_RASTER_FLAG_AA = 0x1; 199 enum FT_RASTER_FLAG_DIRECT = 0x2; 200 enum FT_RASTER_FLAG_CLIP = 0x4; 201 202 struct FT_Raster_Params 203 { 204 const(FT_Bitmap)* target; 205 const(void)* source; 206 int flags; 207 FT_SpanFunc gray_spans; 208 FT_SpanFunc black_spans; /* unused */ 209 FT_Raster_BitTest_Func bit_test; /* unused */ 210 FT_Raster_BitSet_Func bit_set; /* unused */ 211 void* user; 212 FT_BBox clip_box; 213 } 214 215 216 alias FT_Raster_NewFunc = int function (void* memory, FT_Raster* raster); 217 218 alias FT_Raster_New_Func = FT_Raster_NewFunc; 219 220 alias FT_Raster_DoneFunc = void function (FT_Raster raster); 221 222 alias FT_Raster_Done_Func = FT_Raster_DoneFunc; 223 224 alias FT_Raster_ResetFunc = void function ( FT_Raster raster, 225 ubyte* pool_base, 226 c_ulong pool_size ); 227 228 alias FT_Raster_Reset_Func = FT_Raster_ResetFunc; 229 230 231 alias FT_Raster_SetModeFunc = int function ( FT_Raster raster, 232 c_ulong mode, 233 void* args ); 234 235 alias FT_Raster_Set_Mode_Func = FT_Raster_SetModeFunc; 236 237 238 alias FT_Raster_RenderFunc = int function ( FT_Raster raster, 239 const(FT_Raster_Params)* params ); 240 241 alias FT_Raster_Render_Func = FT_Raster_RenderFunc; 242 243 244 245 struct FT_Raster_Funcs 246 { 247 FT_Glyph_Format glyph_format; 248 249 FT_Raster_NewFunc raster_new; 250 FT_Raster_ResetFunc raster_reset; 251 FT_Raster_SetModeFunc raster_set_mode; 252 FT_Raster_RenderFunc raster_render; 253 FT_Raster_DoneFunc raster_done; 254 }