1 module bindbc.blend2d.bindstatic; 2 3 version(BindBC_Static) version = BindBlend2D_Static; 4 5 import core.stdc.stdint; 6 import core.stdc.stdarg; 7 8 auto BL_MAKE_VERSION(uint MAJOR, uint MINOR, uint PATCH) 9 { 10 return (MAJOR << 16) | (MINOR << 8) | PATCH; 11 } 12 13 enum BL_VERSION = BL_MAKE_VERSION(0, 8, 0); 14 15 private 16 enum expandEnum(EnumType, string fqnEnumType = EnumType.stringof) = (){ 17 string expandEnum = "enum {"; 18 foreach(m;__traits(allMembers, EnumType)) { 19 expandEnum ~= m ~ " = " ~ fqnEnumType ~ "." ~ m ~ ","; 20 } 21 expandEnum ~= "}"; 22 return expandEnum; 23 }(); 24 25 struct BLObjectImpl; 26 27 28 mixin(expandEnum!BLResultCode); 29 mixin(expandEnum!BLByteOrder); 30 mixin(expandEnum!BLDataAccessFlags); 31 mixin(expandEnum!BLDataSourceType); 32 mixin(expandEnum!BLModifyOp); 33 mixin(expandEnum!BLBooleanOp); 34 mixin(expandEnum!BLExtendMode); 35 mixin(expandEnum!BLTextEncoding); 36 mixin(expandEnum!BLObjectInfoShift); 37 mixin(expandEnum!BLObjectInfoBits); 38 mixin(expandEnum!BLObjectType); 39 mixin(expandEnum!BLBitSetConstants); 40 mixin(expandEnum!BLFileOpenFlags); 41 mixin(expandEnum!BLFileSeekType); 42 mixin(expandEnum!BLFileReadFlags); 43 mixin(expandEnum!BLGeometryDirection); 44 mixin(expandEnum!BLGeometryType); 45 mixin(expandEnum!BLFillRule); 46 mixin(expandEnum!BLHitTest); 47 mixin(expandEnum!BLOrientation); 48 mixin(expandEnum!BLGlyphPlacementType); 49 mixin(expandEnum!BLGlyphRunFlags); 50 mixin(expandEnum!BLFontDataFlags); 51 mixin(expandEnum!BLFontFaceType); 52 mixin(expandEnum!BLFontFaceFlags); 53 mixin(expandEnum!BLFontFaceDiagFlags); 54 mixin(expandEnum!BLFontOutlineType); 55 mixin(expandEnum!BLFontStretch); 56 mixin(expandEnum!BLFontStyle); 57 mixin(expandEnum!BLFontWeight); 58 mixin(expandEnum!BLFontStringId); 59 mixin(expandEnum!BLFontUnicodeCoverageIndex); 60 mixin(expandEnum!BLTextDirection); 61 mixin(expandEnum!BLPathCmd); 62 mixin(expandEnum!BLPathCmdExtra); 63 mixin(expandEnum!BLPathFlags); 64 mixin(expandEnum!BLPathReverseMode); 65 mixin(expandEnum!BLStrokeJoin); 66 mixin(expandEnum!BLStrokeCapPosition); 67 mixin(expandEnum!BLStrokeCap); 68 mixin(expandEnum!BLStrokeTransformOrder); 69 mixin(expandEnum!BLFlattenMode); 70 mixin(expandEnum!BLOffsetMode); 71 mixin(expandEnum!BLFormat); 72 mixin(expandEnum!BLFormatFlags); 73 mixin(expandEnum!BLImageCodecFeatures); 74 mixin(expandEnum!BLImageInfoFlags); 75 mixin(expandEnum!BLImageScaleFilter); 76 mixin(expandEnum!BLMatrix2DType); 77 mixin(expandEnum!BLMatrix2DValue); 78 mixin(expandEnum!BLMatrix2DOp); 79 mixin(expandEnum!BLContextType); 80 mixin(expandEnum!BLContextHint); 81 mixin(expandEnum!BLContextOpType); 82 mixin(expandEnum!BLContextFlushFlags); 83 mixin(expandEnum!BLContextCreateFlags); 84 mixin(expandEnum!BLContextErrorFlags); 85 mixin(expandEnum!BLClipMode); 86 mixin(expandEnum!BLCompOp); 87 mixin(expandEnum!BLGradientQuality); 88 mixin(expandEnum!BLPatternQuality); 89 mixin(expandEnum!BLRenderingQuality); 90 mixin(expandEnum!BLGradientType); 91 mixin(expandEnum!BLGradientValue); 92 mixin(expandEnum!BLPixelConverterCreateFlags); 93 mixin(expandEnum!BLRuntimeLimits); 94 mixin(expandEnum!BLRuntimeInfoType); 95 mixin(expandEnum!BLRuntimeBuildType); 96 mixin(expandEnum!BLRuntimeCpuArch); 97 mixin(expandEnum!BLRuntimeCpuFeatures); 98 mixin(expandEnum!BLRuntimeCleanupFlags); 99 100 101 //****** api.d ******// 102 103 import core.stdc.stddef; 104 import core.stdc.stdint; 105 106 extern (C): 107 108 //struct BLObjectImpl; 109 alias BLResult = uint; 110 alias BLTag = uint; 111 alias BLUniqueId = ulong; 112 alias BLUnknown = void; 113 114 enum BLResultCode 115 { 116 BL_SUCCESS = 0, 117 BL_ERROR_START_INDEX = 0x00010000u, 118 BL_ERROR_OUT_OF_MEMORY = 0x00010000u, 119 BL_ERROR_INVALID_VALUE = 65537, 120 BL_ERROR_INVALID_STATE = 65538, 121 BL_ERROR_INVALID_HANDLE = 65539, 122 BL_ERROR_INVALID_CONVERSION = 65540, 123 BL_ERROR_OVERFLOW = 65541, 124 BL_ERROR_NOT_INITIALIZED = 65542, 125 BL_ERROR_NOT_IMPLEMENTED = 65543, 126 BL_ERROR_NOT_PERMITTED = 65544, 127 BL_ERROR_IO = 65545, 128 BL_ERROR_BUSY = 65546, 129 BL_ERROR_INTERRUPTED = 65547, 130 BL_ERROR_TRY_AGAIN = 65548, 131 BL_ERROR_TIMED_OUT = 65549, 132 BL_ERROR_BROKEN_PIPE = 65550, 133 BL_ERROR_INVALID_SEEK = 65551, 134 BL_ERROR_SYMLINK_LOOP = 65552, 135 BL_ERROR_FILE_TOO_LARGE = 65553, 136 BL_ERROR_ALREADY_EXISTS = 65554, 137 BL_ERROR_ACCESS_DENIED = 65555, 138 BL_ERROR_MEDIA_CHANGED = 65556, 139 BL_ERROR_READ_ONLY_FS = 65557, 140 BL_ERROR_NO_DEVICE = 65558, 141 BL_ERROR_NO_ENTRY = 65559, 142 BL_ERROR_NO_MEDIA = 65560, 143 BL_ERROR_NO_MORE_DATA = 65561, 144 BL_ERROR_NO_MORE_FILES = 65562, 145 BL_ERROR_NO_SPACE_LEFT = 65563, 146 BL_ERROR_NOT_EMPTY = 65564, 147 BL_ERROR_NOT_FILE = 65565, 148 BL_ERROR_NOT_DIRECTORY = 65566, 149 BL_ERROR_NOT_SAME_DEVICE = 65567, 150 BL_ERROR_NOT_BLOCK_DEVICE = 65568, 151 BL_ERROR_INVALID_FILE_NAME = 65569, 152 BL_ERROR_FILE_NAME_TOO_LONG = 65570, 153 BL_ERROR_TOO_MANY_OPEN_FILES = 65571, 154 BL_ERROR_TOO_MANY_OPEN_FILES_BY_OS = 65572, 155 BL_ERROR_TOO_MANY_LINKS = 65573, 156 BL_ERROR_TOO_MANY_THREADS = 65574, 157 BL_ERROR_THREAD_POOL_EXHAUSTED = 65575, 158 BL_ERROR_FILE_EMPTY = 65576, 159 BL_ERROR_OPEN_FAILED = 65577, 160 BL_ERROR_NOT_ROOT_DEVICE = 65578, 161 BL_ERROR_UNKNOWN_SYSTEM_ERROR = 65579, 162 BL_ERROR_INVALID_ALIGNMENT = 65580, 163 BL_ERROR_INVALID_SIGNATURE = 65581, 164 BL_ERROR_INVALID_DATA = 65582, 165 BL_ERROR_INVALID_STRING = 65583, 166 BL_ERROR_INVALID_KEY = 65584, 167 BL_ERROR_DATA_TRUNCATED = 65585, 168 BL_ERROR_DATA_TOO_LARGE = 65586, 169 BL_ERROR_DECOMPRESSION_FAILED = 65587, 170 BL_ERROR_INVALID_GEOMETRY = 65588, 171 BL_ERROR_NO_MATCHING_VERTEX = 65589, 172 BL_ERROR_INVALID_CREATE_FLAGS = 65590, 173 BL_ERROR_NO_MATCHING_COOKIE = 65591, 174 BL_ERROR_NO_STATES_TO_RESTORE = 65592, 175 BL_ERROR_IMAGE_TOO_LARGE = 65593, 176 BL_ERROR_IMAGE_NO_MATCHING_CODEC = 65594, 177 BL_ERROR_IMAGE_UNKNOWN_FILE_FORMAT = 65595, 178 BL_ERROR_IMAGE_DECODER_NOT_PROVIDED = 65596, 179 BL_ERROR_IMAGE_ENCODER_NOT_PROVIDED = 65597, 180 BL_ERROR_PNG_MULTIPLE_IHDR = 65598, 181 BL_ERROR_PNG_INVALID_IDAT = 65599, 182 BL_ERROR_PNG_INVALID_IEND = 65600, 183 BL_ERROR_PNG_INVALID_PLTE = 65601, 184 BL_ERROR_PNG_INVALID_TRNS = 65602, 185 BL_ERROR_PNG_INVALID_FILTER = 65603, 186 BL_ERROR_JPEG_UNSUPPORTED_FEATURE = 65604, 187 BL_ERROR_JPEG_INVALID_SOS = 65605, 188 BL_ERROR_JPEG_INVALID_SOF = 65606, 189 BL_ERROR_JPEG_MULTIPLE_SOF = 65607, 190 BL_ERROR_JPEG_UNSUPPORTED_SOF = 65608, 191 BL_ERROR_FONT_NOT_INITIALIZED = 65609, 192 BL_ERROR_FONT_NO_MATCH = 65610, 193 BL_ERROR_FONT_NO_CHARACTER_MAPPING = 65611, 194 BL_ERROR_FONT_MISSING_IMPORTANT_TABLE = 65612, 195 BL_ERROR_FONT_FEATURE_NOT_AVAILABLE = 65613, 196 BL_ERROR_FONT_CFF_INVALID_DATA = 65614, 197 BL_ERROR_FONT_PROGRAM_TERMINATED = 65615, 198 BL_ERROR_INVALID_GLYPH = 65616, 199 BL_ERROR_FORCE_UINT = 0xFFFFFFFFu 200 } 201 202 enum BLByteOrder 203 { 204 BL_BYTE_ORDER_LE = 0, 205 BL_BYTE_ORDER_BE = 1, 206 BL_BYTE_ORDER_NATIVE = 1234 == 1234 ? BL_BYTE_ORDER_LE : BL_BYTE_ORDER_BE, 207 BL_BYTE_ORDER_SWAPPED = 1234 == 1234 ? BL_BYTE_ORDER_BE : BL_BYTE_ORDER_LE, 208 BL_BYTE_ORDER_FORCE_UINT = 0xFFFFFFFFu 209 } 210 211 enum BLDataAccessFlags 212 { 213 BL_DATA_ACCESS_NO_FLAGS = 0x00u, 214 BL_DATA_ACCESS_READ = 0x01u, 215 BL_DATA_ACCESS_WRITE = 0x02u, 216 BL_DATA_ACCESS_RW = 0x03u, 217 BL_DATA_ACCESS_FORCE_UINT = 0xFFFFFFFFu 218 } 219 220 enum BLDataSourceType 221 { 222 BL_DATA_SOURCE_TYPE_NONE = 0, 223 BL_DATA_SOURCE_TYPE_MEMORY = 1, 224 BL_DATA_SOURCE_TYPE_FILE = 2, 225 BL_DATA_SOURCE_TYPE_CUSTOM = 3, 226 BL_DATA_SOURCE_TYPE_MAX_VALUE = 3, 227 BL_DATA_SOURCE_TYPE_FORCE_UINT = 0xFFFFFFFFu 228 } 229 230 enum BLModifyOp 231 { 232 BL_MODIFY_OP_ASSIGN_FIT = 0, 233 BL_MODIFY_OP_ASSIGN_GROW = 1, 234 BL_MODIFY_OP_APPEND_FIT = 2, 235 BL_MODIFY_OP_APPEND_GROW = 3, 236 BL_MODIFY_OP_MAX_VALUE = 3, 237 BL_MODIFY_OP_FORCE_UINT = 0xFFFFFFFFu 238 } 239 240 enum BLBooleanOp 241 { 242 BL_BOOLEAN_OP_COPY = 0, 243 BL_BOOLEAN_OP_AND = 1, 244 BL_BOOLEAN_OP_OR = 2, 245 BL_BOOLEAN_OP_XOR = 3, 246 BL_BOOLEAN_OP_AND_NOT = 4, 247 BL_BOOLEAN_OP_NOT_AND = 5, 248 BL_BOOLEAN_OP_MAX_VALUE = 5, 249 BL_BOOLEAN_OP_FORCE_UINT = 0xFFFFFFFFu 250 } 251 252 enum BLExtendMode 253 { 254 BL_EXTEND_MODE_PAD = 0, 255 BL_EXTEND_MODE_REPEAT = 1, 256 BL_EXTEND_MODE_REFLECT = 2, 257 BL_EXTEND_MODE_PAD_X_PAD_Y = 0, 258 BL_EXTEND_MODE_PAD_X_REPEAT_Y = 3, 259 BL_EXTEND_MODE_PAD_X_REFLECT_Y = 4, 260 BL_EXTEND_MODE_REPEAT_X_REPEAT_Y = 1, 261 BL_EXTEND_MODE_REPEAT_X_PAD_Y = 5, 262 BL_EXTEND_MODE_REPEAT_X_REFLECT_Y = 6, 263 BL_EXTEND_MODE_REFLECT_X_REFLECT_Y = 2, 264 BL_EXTEND_MODE_REFLECT_X_PAD_Y = 7, 265 BL_EXTEND_MODE_REFLECT_X_REPEAT_Y = 8, 266 BL_EXTEND_MODE_SIMPLE_MAX_VALUE = 2, 267 BL_EXTEND_MODE_COMPLEX_MAX_VALUE = 8, 268 BL_EXTEND_MODE_MAX_VALUE = 8, 269 BL_EXTEND_MODE_FORCE_UINT = 0xFFFFFFFFu 270 } 271 272 enum BLTextEncoding 273 { 274 BL_TEXT_ENCODING_UTF8 = 0, 275 BL_TEXT_ENCODING_UTF16 = 1, 276 BL_TEXT_ENCODING_UTF32 = 2, 277 BL_TEXT_ENCODING_LATIN1 = 3, 278 BL_TEXT_ENCODING_WCHAR = wchar_t.sizeof == 4 ? BL_TEXT_ENCODING_UTF32 : wchar_t.sizeof == 2 ? BL_TEXT_ENCODING_UTF16 : BL_TEXT_ENCODING_UTF8, 279 BL_TEXT_ENCODING_MAX_VALUE = 3, 280 BL_TEXT_ENCODING_FORCE_UINT = 0xFFFFFFFFu 281 } 282 283 BLResult blTraceError(BLResult result); 284 285 version(BindBlend2D_Static) void blRuntimeAssertionFailure(const(char)* file, int line, const(char)* msg); 286 287 struct BLRange 288 { 289 size_t start; 290 size_t end; 291 } 292 293 struct BLArrayView 294 { 295 const(void)* data; 296 size_t size; 297 } 298 299 struct BLStringView 300 { 301 const(char)* data; 302 size_t size; 303 } 304 305 alias BLDataView = BLArrayView; 306 307 enum BLObjectInfoShift 308 { 309 BL_OBJECT_INFO_REF_COUNTED_SHIFT = 0, 310 BL_OBJECT_INFO_IMMUTABLE_SHIFT = 1, 311 BL_OBJECT_INFO_X_SHIFT = 2, 312 BL_OBJECT_INFO_P_SHIFT = 3, 313 BL_OBJECT_INFO_C_SHIFT = 10, 314 BL_OBJECT_INFO_B_SHIFT = 14, 315 BL_OBJECT_INFO_A_SHIFT = 18, 316 BL_OBJECT_INFO_TYPE_SHIFT = 22, 317 BL_OBJECT_INFO_VIRTUAL_SHIFT = 28, 318 BL_OBJECT_INFO_T_MSB_SHIFT = 29, 319 BL_OBJECT_INFO_DYNAMIC_SHIFT = 30, 320 BL_OBJECT_INFO_MARKER_SHIFT = 31, 321 BL_OBJECT_INFO_RC_INIT_SHIFT = BL_OBJECT_INFO_REF_COUNTED_SHIFT, 322 BL_OBJECT_INFO_SHIFT_FORCE_UINT = 0xFFFFFFFFu 323 } 324 325 enum BLObjectInfoBits 326 { 327 BL_OBJECT_INFO_REF_COUNTED_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_REF_COUNTED_SHIFT, 328 BL_OBJECT_INFO_IMMUTABLE_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_IMMUTABLE_SHIFT, 329 BL_OBJECT_INFO_X_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_X_SHIFT, 330 BL_OBJECT_INFO_P_MASK = 0x7Fu << BLObjectInfoShift.BL_OBJECT_INFO_B_SHIFT, 331 BL_OBJECT_INFO_C_MASK = 0x0Fu << BLObjectInfoShift.BL_OBJECT_INFO_C_SHIFT, 332 BL_OBJECT_INFO_B_MASK = 0x0Fu << BLObjectInfoShift.BL_OBJECT_INFO_B_SHIFT, 333 BL_OBJECT_INFO_A_MASK = 0x0Fu << BLObjectInfoShift.BL_OBJECT_INFO_A_SHIFT, 334 BL_OBJECT_INFO_TYPE_MASK = 0xFFu << BLObjectInfoShift.BL_OBJECT_INFO_TYPE_SHIFT, 335 BL_OBJECT_INFO_VIRTUAL_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_VIRTUAL_SHIFT, 336 BL_OBJECT_INFO_T_MSB_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_T_MSB_SHIFT, 337 BL_OBJECT_INFO_DYNAMIC_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_DYNAMIC_SHIFT, 338 BL_OBJECT_INFO_MARKER_FLAG = 0x01u << BLObjectInfoShift.BL_OBJECT_INFO_MARKER_SHIFT, 339 BL_OBJECT_INFO_RC_INIT_MASK = 0x03u << BLObjectInfoShift.BL_OBJECT_INFO_RC_INIT_SHIFT, 340 BL_OBJECT_INFO_BITS_FORCE_UINT = 0xFFFFFFFFu 341 } 342 343 enum BLObjectType 344 { 345 BL_OBJECT_TYPE_RGBA = 0, 346 BL_OBJECT_TYPE_NULL = 1, 347 BL_OBJECT_TYPE_PATTERN = 2, 348 BL_OBJECT_TYPE_GRADIENT = 3, 349 BL_OBJECT_TYPE_IMAGE = 9, 350 BL_OBJECT_TYPE_PATH = 10, 351 BL_OBJECT_TYPE_FONT = 16, 352 BL_OBJECT_TYPE_FONT_FEATURE_SETTINGS = 17, 353 BL_OBJECT_TYPE_FONT_VARIATION_SETTINGS = 18, 354 BL_OBJECT_TYPE_BOOL = 28, 355 BL_OBJECT_TYPE_INT64 = 29, 356 BL_OBJECT_TYPE_UINT64 = 30, 357 BL_OBJECT_TYPE_DOUBLE = 31, 358 BL_OBJECT_TYPE_STRING = 32, 359 BL_OBJECT_TYPE_ARRAY_OBJECT = 33, 360 BL_OBJECT_TYPE_ARRAY_INT8 = 34, 361 BL_OBJECT_TYPE_ARRAY_UINT8 = 35, 362 BL_OBJECT_TYPE_ARRAY_INT16 = 36, 363 BL_OBJECT_TYPE_ARRAY_UINT16 = 37, 364 BL_OBJECT_TYPE_ARRAY_INT32 = 38, 365 BL_OBJECT_TYPE_ARRAY_UINT32 = 39, 366 BL_OBJECT_TYPE_ARRAY_INT64 = 40, 367 BL_OBJECT_TYPE_ARRAY_UINT64 = 41, 368 BL_OBJECT_TYPE_ARRAY_FLOAT32 = 42, 369 BL_OBJECT_TYPE_ARRAY_FLOAT64 = 43, 370 BL_OBJECT_TYPE_ARRAY_STRUCT_1 = 44, 371 BL_OBJECT_TYPE_ARRAY_STRUCT_2 = 45, 372 BL_OBJECT_TYPE_ARRAY_STRUCT_3 = 46, 373 BL_OBJECT_TYPE_ARRAY_STRUCT_4 = 47, 374 BL_OBJECT_TYPE_ARRAY_STRUCT_6 = 48, 375 BL_OBJECT_TYPE_ARRAY_STRUCT_8 = 49, 376 BL_OBJECT_TYPE_ARRAY_STRUCT_10 = 50, 377 BL_OBJECT_TYPE_ARRAY_STRUCT_12 = 51, 378 BL_OBJECT_TYPE_ARRAY_STRUCT_16 = 52, 379 BL_OBJECT_TYPE_ARRAY_STRUCT_20 = 53, 380 BL_OBJECT_TYPE_ARRAY_STRUCT_24 = 54, 381 BL_OBJECT_TYPE_ARRAY_STRUCT_32 = 55, 382 BL_OBJECT_TYPE_CONTEXT = 64, 383 BL_OBJECT_TYPE_IMAGE_CODEC = 65, 384 BL_OBJECT_TYPE_IMAGE_DECODER = 66, 385 BL_OBJECT_TYPE_IMAGE_ENCODER = 67, 386 BL_OBJECT_TYPE_FONT_FACE = 68, 387 BL_OBJECT_TYPE_FONT_DATA = 69, 388 BL_OBJECT_TYPE_FONT_MANAGER = 70, 389 BL_OBJECT_TYPE_BIT_SET = 128, 390 BL_OBJECT_TYPE_ARRAY_FIRST = 33, 391 BL_OBJECT_TYPE_ARRAY_LAST = 55, 392 BL_OBJECT_TYPE_MAX_STYLE_VALUE = 3, 393 BL_OBJECT_TYPE_MAX_VALUE = 128, 394 BL_OBJECT_TYPE_FORCE_UINT = 0xFFFFFFFFu 395 } 396 397 struct BLObjectInfo 398 { 399 uint bits; 400 } 401 402 union BLObjectDetail 403 { 404 void* impl; 405 char[16] char_data; 406 byte[16] i8_data; 407 ubyte[16] u8_data; 408 short[8] i16_data; 409 ushort[8] u16_data; 410 int[4] i32_data; 411 uint[4] u32_data; 412 long[2] i64_data; 413 ulong[2] u64_data; 414 float[4] f32_data; 415 double[2] f64_data; 416 417 struct 418 { 419 uint[2] u32_data_overlap; 420 uint impl_payload; 421 BLObjectInfo info; 422 } 423 } 424 425 alias BLDestroyExternalDataFunc = void function(void* impl, void* externalData, void* userData); 426 427 struct BLObjectExternalInfo 428 { 429 BLDestroyExternalDataFunc destroyFunc; 430 void* userData; 431 } 432 433 version(BindBlend2D_Static) void* blObjectDetailAllocImpl(BLObjectDetail* d, uint info, size_t implSize, size_t* implSizeOut); 434 version(BindBlend2D_Static) void* blObjectDetailAllocImplExternal(BLObjectDetail* d, uint info, size_t implSize, BLObjectExternalInfo** externalInfoOut, void** externalOptDataOut); 435 version(BindBlend2D_Static) BLResult blObjectDetailFreeImpl(void* impl, uint info); 436 version(BindBlend2D_Static) BLResult blObjectInitMove(BLUnknown* self, BLUnknown* other); 437 version(BindBlend2D_Static) BLResult blObjectInitWeak(BLUnknown* self, const(BLUnknown)* other); 438 version(BindBlend2D_Static) BLResult blObjectReset(BLUnknown* self); 439 version(BindBlend2D_Static) BLResult blObjectAssignMove(BLUnknown* self, BLUnknown* other); 440 version(BindBlend2D_Static) BLResult blObjectAssignWeak(BLUnknown* self, const(BLUnknown)* other); 441 version(BindBlend2D_Static) BLResult blObjectGetProperty(const(BLUnknown)* self, const(char)* name, size_t nameSize, BLVarCore* valueOut); 442 version(BindBlend2D_Static) BLResult blObjectGetPropertyBool(const(BLUnknown)* self, const(char)* name, size_t nameSize, bool* valueOut); 443 version(BindBlend2D_Static) BLResult blObjectGetPropertyInt32(const(BLUnknown)* self, const(char)* name, size_t nameSize, int* valueOut); 444 version(BindBlend2D_Static) BLResult blObjectGetPropertyInt64(const(BLUnknown)* self, const(char)* name, size_t nameSize, long* valueOut); 445 version(BindBlend2D_Static) BLResult blObjectGetPropertyUInt32(const(BLUnknown)* self, const(char)* name, size_t nameSize, uint* valueOut); 446 version(BindBlend2D_Static) BLResult blObjectGetPropertyUInt64(const(BLUnknown)* self, const(char)* name, size_t nameSize, ulong* valueOut); 447 version(BindBlend2D_Static) BLResult blObjectGetPropertyDouble(const(BLUnknown)* self, const(char)* name, size_t nameSize, double* valueOut); 448 version(BindBlend2D_Static) BLResult blObjectSetProperty(BLUnknown* self, const(char)* name, size_t nameSize, const(BLUnknown)* value); 449 version(BindBlend2D_Static) BLResult blObjectSetPropertyBool(BLUnknown* self, const(char)* name, size_t nameSize, bool value); 450 version(BindBlend2D_Static) BLResult blObjectSetPropertyInt32(BLUnknown* self, const(char)* name, size_t nameSize, int value); 451 version(BindBlend2D_Static) BLResult blObjectSetPropertyInt64(BLUnknown* self, const(char)* name, size_t nameSize, long value); 452 version(BindBlend2D_Static) BLResult blObjectSetPropertyUInt32(BLUnknown* self, const(char)* name, size_t nameSize, uint value); 453 version(BindBlend2D_Static) BLResult blObjectSetPropertyUInt64(BLUnknown* self, const(char)* name, size_t nameSize, ulong value); 454 version(BindBlend2D_Static) BLResult blObjectSetPropertyDouble(BLUnknown* self, const(char)* name, size_t nameSize, double value); 455 456 struct BLObjectVirtBase 457 { 458 BLResult function(BLObjectImpl* impl, uint info) destroy; 459 BLResult function(const(BLObjectImpl)* impl, const(char)* name, size_t nameSize, BLVarCore* valueOut) getProperty; 460 BLResult function(BLObjectImpl* impl, const(char)* name, size_t nameSize, const(BLVarCore)* value) setProperty; 461 } 462 463 struct BLObjectVirt 464 { 465 BLObjectVirtBase base; 466 } 467 468 struct BLObjectCore 469 { 470 BLObjectDetail _d; 471 } 472 473 version(BindBlend2D_Static) BLResult blArrayInit(BLArrayCore* self, BLObjectType arrayType); 474 version(BindBlend2D_Static) BLResult blArrayInitMove(BLArrayCore* self, BLArrayCore* other); 475 version(BindBlend2D_Static) BLResult blArrayInitWeak(BLArrayCore* self, const(BLArrayCore)* other); 476 version(BindBlend2D_Static) BLResult blArrayDestroy(BLArrayCore* self); 477 version(BindBlend2D_Static) BLResult blArrayReset(BLArrayCore* self); 478 version(BindBlend2D_Static) size_t blArrayGetSize(const(BLArrayCore)* self); 479 version(BindBlend2D_Static) size_t blArrayGetCapacity(const(BLArrayCore)* self); 480 version(BindBlend2D_Static) size_t blArrayGetItemSize(BLArrayCore* self); 481 version(BindBlend2D_Static) const(void)* blArrayGetData(const(BLArrayCore)* self); 482 version(BindBlend2D_Static) BLResult blArrayClear(BLArrayCore* self); 483 version(BindBlend2D_Static) BLResult blArrayShrink(BLArrayCore* self); 484 version(BindBlend2D_Static) BLResult blArrayReserve(BLArrayCore* self, size_t n); 485 version(BindBlend2D_Static) BLResult blArrayResize(BLArrayCore* self, size_t n, const(void)* fill); 486 version(BindBlend2D_Static) BLResult blArrayMakeMutable(BLArrayCore* self, void** dataOut); 487 version(BindBlend2D_Static) BLResult blArrayModifyOp(BLArrayCore* self, BLModifyOp op, size_t n, void** dataOut); 488 version(BindBlend2D_Static) BLResult blArrayInsertOp(BLArrayCore* self, size_t index, size_t n, void** dataOut); 489 version(BindBlend2D_Static) BLResult blArrayAssignMove(BLArrayCore* self, BLArrayCore* other); 490 version(BindBlend2D_Static) BLResult blArrayAssignWeak(BLArrayCore* self, const(BLArrayCore)* other); 491 version(BindBlend2D_Static) BLResult blArrayAssignDeep(BLArrayCore* self, const(BLArrayCore)* other); 492 version(BindBlend2D_Static) BLResult blArrayAssignData(BLArrayCore* self, const(void)* data, size_t n); 493 version(BindBlend2D_Static) BLResult blArrayAssignExternalData(BLArrayCore* self, void* data, size_t size, size_t capacity, BLDataAccessFlags dataAccessFlags, BLDestroyExternalDataFunc destroyFunc, void* userData); 494 version(BindBlend2D_Static) BLResult blArrayAppendU8(BLArrayCore* self, ubyte value); 495 version(BindBlend2D_Static) BLResult blArrayAppendU16(BLArrayCore* self, ushort value); 496 version(BindBlend2D_Static) BLResult blArrayAppendU32(BLArrayCore* self, uint value); 497 version(BindBlend2D_Static) BLResult blArrayAppendU64(BLArrayCore* self, ulong value); 498 version(BindBlend2D_Static) BLResult blArrayAppendF32(BLArrayCore* self, float value); 499 version(BindBlend2D_Static) BLResult blArrayAppendF64(BLArrayCore* self, double value); 500 version(BindBlend2D_Static) BLResult blArrayAppendItem(BLArrayCore* self, const(void)* item); 501 version(BindBlend2D_Static) BLResult blArrayAppendData(BLArrayCore* self, const(void)* data, size_t n); 502 version(BindBlend2D_Static) BLResult blArrayInsertU8(BLArrayCore* self, size_t index, ubyte value); 503 version(BindBlend2D_Static) BLResult blArrayInsertU16(BLArrayCore* self, size_t index, ushort value); 504 version(BindBlend2D_Static) BLResult blArrayInsertU32(BLArrayCore* self, size_t index, uint value); 505 version(BindBlend2D_Static) BLResult blArrayInsertU64(BLArrayCore* self, size_t index, ulong value); 506 version(BindBlend2D_Static) BLResult blArrayInsertF32(BLArrayCore* self, size_t index, float value); 507 version(BindBlend2D_Static) BLResult blArrayInsertF64(BLArrayCore* self, size_t index, double value); 508 version(BindBlend2D_Static) BLResult blArrayInsertItem(BLArrayCore* self, size_t index, const(void)* item); 509 version(BindBlend2D_Static) BLResult blArrayInsertData(BLArrayCore* self, size_t index, const(void)* data, size_t n); 510 version(BindBlend2D_Static) BLResult blArrayReplaceU8(BLArrayCore* self, size_t index, ubyte value); 511 version(BindBlend2D_Static) BLResult blArrayReplaceU16(BLArrayCore* self, size_t index, ushort value); 512 version(BindBlend2D_Static) BLResult blArrayReplaceU32(BLArrayCore* self, size_t index, uint value); 513 version(BindBlend2D_Static) BLResult blArrayReplaceU64(BLArrayCore* self, size_t index, ulong value); 514 version(BindBlend2D_Static) BLResult blArrayReplaceF32(BLArrayCore* self, size_t index, float value); 515 version(BindBlend2D_Static) BLResult blArrayReplaceF64(BLArrayCore* self, size_t index, double value); 516 version(BindBlend2D_Static) BLResult blArrayReplaceItem(BLArrayCore* self, size_t index, const(void)* item); 517 version(BindBlend2D_Static) BLResult blArrayReplaceData(BLArrayCore* self, size_t rStart, size_t rEnd, const(void)* data, size_t n); 518 version(BindBlend2D_Static) BLResult blArrayRemoveIndex(BLArrayCore* self, size_t index); 519 version(BindBlend2D_Static) BLResult blArrayRemoveRange(BLArrayCore* self, size_t rStart, size_t rEnd); 520 version(BindBlend2D_Static) bool blArrayEquals(const(BLArrayCore)* a, const(BLArrayCore)* b); 521 522 struct BLArrayCore 523 { 524 BLObjectDetail _d; 525 } 526 527 struct BLArrayImpl 528 { 529 void* data; 530 size_t size; 531 size_t capacity; 532 } 533 534 enum BLBitSetConstants 535 { 536 BL_BIT_SET_INVALID_INDEX = 0xFFFFFFFFu, 537 BL_BIT_SET_RANGE_MASK = 0x80000000u, 538 BL_BIT_SET_SEGMENT_WORD_COUNT = 4u 539 } 540 541 struct BLBitSetSegment 542 { 543 uint _startWord; 544 uint[BL_BIT_SET_SEGMENT_WORD_COUNT] _data; 545 } 546 547 struct BLBitSetData 548 { 549 const(BLBitSetSegment)* segmentData; 550 uint segmentCount; 551 BLBitSetSegment[3] ssoSegments; 552 } 553 554 version(BindBlend2D_Static) BLResult blBitSetInit(BLBitSetCore* self); 555 version(BindBlend2D_Static) BLResult blBitSetInitMove(BLBitSetCore* self, BLBitSetCore* other); 556 version(BindBlend2D_Static) BLResult blBitSetInitWeak(BLBitSetCore* self, const(BLBitSetCore)* other); 557 version(BindBlend2D_Static) BLResult blBitSetInitRange(BLBitSetCore* self, uint startBit, uint endBit); 558 version(BindBlend2D_Static) BLResult blBitSetDestroy(BLBitSetCore* self); 559 version(BindBlend2D_Static) BLResult blBitSetReset(BLBitSetCore* self); 560 version(BindBlend2D_Static) BLResult blBitSetAssignMove(BLBitSetCore* self, BLBitSetCore* other); 561 version(BindBlend2D_Static) BLResult blBitSetAssignWeak(BLBitSetCore* self, const(BLBitSetCore)* other); 562 version(BindBlend2D_Static) BLResult blBitSetAssignDeep(BLBitSetCore* self, const(BLBitSetCore)* other); 563 version(BindBlend2D_Static) BLResult blBitSetAssignRange(BLBitSetCore* self, uint startBit, uint endBit); 564 version(BindBlend2D_Static) BLResult blBitSetAssignWords(BLBitSetCore* self, uint startWord, const(uint)* wordData, uint wordCount); 565 version(BindBlend2D_Static) bool blBitSetIsEmpty(const(BLBitSetCore)* self); 566 version(BindBlend2D_Static) BLResult blBitSetGetData(const(BLBitSetCore)* self, BLBitSetData* out_); 567 version(BindBlend2D_Static) uint blBitSetGetSegmentCount(const(BLBitSetCore)* self); 568 version(BindBlend2D_Static) uint blBitSetGetSegmentCapacity(const(BLBitSetCore)* self); 569 version(BindBlend2D_Static) uint blBitSetGetCardinality(const(BLBitSetCore)* self); 570 version(BindBlend2D_Static) uint blBitSetGetCardinalityInRange(const(BLBitSetCore)* self, uint startBit, uint endBit); 571 version(BindBlend2D_Static) bool blBitSetHasBit(const(BLBitSetCore)* self, uint bitIndex); 572 version(BindBlend2D_Static) bool blBitSetHasBitsInRange(const(BLBitSetCore)* self, uint startBit, uint endBit); 573 version(BindBlend2D_Static) bool blBitSetSubsumes(const(BLBitSetCore)* a, const(BLBitSetCore)* b); 574 version(BindBlend2D_Static) bool blBitSetIntersects(const(BLBitSetCore)* a, const(BLBitSetCore)* b); 575 version(BindBlend2D_Static) bool blBitSetGetRange(const(BLBitSetCore)* self, uint* startOut, uint* endOut); 576 version(BindBlend2D_Static) bool blBitSetEquals(const(BLBitSetCore)* a, const(BLBitSetCore)* b); 577 version(BindBlend2D_Static) int blBitSetCompare(const(BLBitSetCore)* a, const(BLBitSetCore)* b); 578 version(BindBlend2D_Static) BLResult blBitSetClear(BLBitSetCore* self); 579 version(BindBlend2D_Static) BLResult blBitSetShrink(BLBitSetCore* self); 580 version(BindBlend2D_Static) BLResult blBitSetOptimize(BLBitSetCore* self); 581 version(BindBlend2D_Static) BLResult blBitSetChop(BLBitSetCore* self, uint startBit, uint endBit); 582 version(BindBlend2D_Static) BLResult blBitSetAddBit(BLBitSetCore* self, uint bitIndex); 583 version(BindBlend2D_Static) BLResult blBitSetAddRange(BLBitSetCore* self, uint rangeStartBit, uint rangeEndBit); 584 version(BindBlend2D_Static) BLResult blBitSetAddWords(BLBitSetCore* self, uint startWord, const(uint)* wordData, uint wordCount); 585 version(BindBlend2D_Static) BLResult blBitSetClearBit(BLBitSetCore* self, uint bitIndex); 586 version(BindBlend2D_Static) BLResult blBitSetClearRange(BLBitSetCore* self, uint rangeStartBit, uint rangeEndBit); 587 version(BindBlend2D_Static) BLResult blBitSetBuilderCommit(BLBitSetCore* self, BLBitSetBuilderCore* builder, uint newAreaIndex); 588 version(BindBlend2D_Static) BLResult blBitSetBuilderAddRange(BLBitSetCore* self, BLBitSetBuilderCore* builder, uint startBit, uint endBit); 589 590 struct BLBitSetCore 591 { 592 BLObjectDetail _d; 593 } 594 595 struct BLBitSetBuilderCore 596 { 597 uint _areaShift; 598 uint _areaIndex; 599 } 600 601 struct BLBitSetImpl 602 { 603 uint segmentCount; 604 uint segmentCapacity; 605 } 606 607 enum BLFileOpenFlags 608 { 609 BL_FILE_OPEN_NO_FLAGS = 0u, 610 BL_FILE_OPEN_READ = 0x00000001u, 611 BL_FILE_OPEN_WRITE = 0x00000002u, 612 BL_FILE_OPEN_RW = 0x00000003u, 613 BL_FILE_OPEN_CREATE = 0x00000004u, 614 BL_FILE_OPEN_DELETE = 0x00000008u, 615 BL_FILE_OPEN_TRUNCATE = 0x00000010u, 616 BL_FILE_OPEN_READ_EXCLUSIVE = 0x10000000u, 617 BL_FILE_OPEN_WRITE_EXCLUSIVE = 0x20000000u, 618 BL_FILE_OPEN_RW_EXCLUSIVE = 0x30000000u, 619 BL_FILE_OPEN_CREATE_EXCLUSIVE = 0x40000000u, 620 BL_FILE_OPEN_DELETE_EXCLUSIVE = 0x80000000u, 621 BL_FILE_OPEN_FORCE_UINT = 0xFFFFFFFFu 622 } 623 624 enum BLFileSeekType 625 { 626 BL_FILE_SEEK_SET = 0, 627 BL_FILE_SEEK_CUR = 1, 628 BL_FILE_SEEK_END = 2, 629 BL_FILE_SEEK_MAX_VALUE = 3, 630 BL_FILE_SEEK_FORCE_UINT = 0xFFFFFFFFu 631 } 632 633 enum BLFileReadFlags 634 { 635 BL_FILE_READ_NO_FLAGS = 0u, 636 BL_FILE_READ_MMAP_ENABLED = 0x00000001u, 637 BL_FILE_READ_MMAP_AVOID_SMALL = 0x00000002u, 638 BL_FILE_READ_MMAP_NO_FALLBACK = 0x00000008u, 639 BL_FILE_READ_FORCE_UINT = 0xFFFFFFFFu 640 } 641 642 struct BLFileCore 643 { 644 intptr_t handle; 645 } 646 647 version(BindBlend2D_Static) BLResult blFileInit(BLFileCore* self); 648 version(BindBlend2D_Static) BLResult blFileReset(BLFileCore* self); 649 version(BindBlend2D_Static) BLResult blFileOpen(BLFileCore* self, const(char)* fileName, BLFileOpenFlags openFlags); 650 version(BindBlend2D_Static) BLResult blFileClose(BLFileCore* self); 651 version(BindBlend2D_Static) BLResult blFileSeek(BLFileCore* self, long offset, BLFileSeekType seekType, long* positionOut); 652 version(BindBlend2D_Static) BLResult blFileRead(BLFileCore* self, void* buffer, size_t n, size_t* bytesReadOut); 653 version(BindBlend2D_Static) BLResult blFileWrite(BLFileCore* self, const(void)* buffer, size_t n, size_t* bytesWrittenOut); 654 version(BindBlend2D_Static) BLResult blFileTruncate(BLFileCore* self, long maxSize); 655 version(BindBlend2D_Static) BLResult blFileGetSize(BLFileCore* self, ulong* fileSizeOut); 656 version(BindBlend2D_Static) BLResult blFileSystemReadFile(const(char)* fileName, BLArrayCore* dst, size_t maxSize, BLFileReadFlags readFlags); 657 version(BindBlend2D_Static) BLResult blFileSystemWriteFile(const(char)* fileName, const(void)* data, size_t size, size_t* bytesWrittenOut); 658 659 enum BLGeometryDirection 660 { 661 BL_GEOMETRY_DIRECTION_NONE = 0, 662 BL_GEOMETRY_DIRECTION_CW = 1, 663 BL_GEOMETRY_DIRECTION_CCW = 2, 664 BL_GEOMETRY_DIRECTION_FORCE_UINT = 0xFFFFFFFFu 665 } 666 667 enum BLGeometryType 668 { 669 BL_GEOMETRY_TYPE_NONE = 0, 670 BL_GEOMETRY_TYPE_BOXI = 1, 671 BL_GEOMETRY_TYPE_BOXD = 2, 672 BL_GEOMETRY_TYPE_RECTI = 3, 673 BL_GEOMETRY_TYPE_RECTD = 4, 674 BL_GEOMETRY_TYPE_CIRCLE = 5, 675 BL_GEOMETRY_TYPE_ELLIPSE = 6, 676 BL_GEOMETRY_TYPE_ROUND_RECT = 7, 677 BL_GEOMETRY_TYPE_ARC = 8, 678 BL_GEOMETRY_TYPE_CHORD = 9, 679 BL_GEOMETRY_TYPE_PIE = 10, 680 BL_GEOMETRY_TYPE_LINE = 11, 681 BL_GEOMETRY_TYPE_TRIANGLE = 12, 682 BL_GEOMETRY_TYPE_POLYLINEI = 13, 683 BL_GEOMETRY_TYPE_POLYLINED = 14, 684 BL_GEOMETRY_TYPE_POLYGONI = 15, 685 BL_GEOMETRY_TYPE_POLYGOND = 16, 686 BL_GEOMETRY_TYPE_ARRAY_VIEW_BOXI = 17, 687 BL_GEOMETRY_TYPE_ARRAY_VIEW_BOXD = 18, 688 BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTI = 19, 689 BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTD = 20, 690 BL_GEOMETRY_TYPE_PATH = 21, 691 BL_GEOMETRY_TYPE_MAX_VALUE = 21, 692 BL_GEOMETRY_TYPE_SIMPLE_LAST = BL_GEOMETRY_TYPE_TRIANGLE, 693 BL_GEOMETRY_TYPE_FORCE_UINT = 0xFFFFFFFFu 694 } 695 696 enum BLFillRule 697 { 698 BL_FILL_RULE_NON_ZERO = 0, 699 BL_FILL_RULE_EVEN_ODD = 1, 700 BL_FILL_RULE_MAX_VALUE = 1, 701 BL_FILL_RULE_FORCE_UINT = 0xFFFFFFFFu 702 } 703 704 enum BLHitTest 705 { 706 BL_HIT_TEST_IN = 0, 707 BL_HIT_TEST_PART = 1, 708 BL_HIT_TEST_OUT = 2, 709 BL_HIT_TEST_INVALID = 0xFFFFFFFFu, 710 BL_HIT_TEST_FORCE_UINT = 0xFFFFFFFFu 711 } 712 713 struct BLPointI 714 { 715 int x; 716 int y; 717 } 718 719 struct BLSizeI 720 { 721 int w; 722 int h; 723 } 724 725 struct BLBoxI 726 { 727 int x0; 728 int y0; 729 int x1; 730 int y1; 731 } 732 733 struct BLRectI 734 { 735 int x; 736 int y; 737 int w; 738 int h; 739 } 740 741 struct BLPoint 742 { 743 double x; 744 double y; 745 } 746 747 struct BLSize 748 { 749 double w; 750 double h; 751 } 752 753 struct BLBox 754 { 755 double x0; 756 double y0; 757 double x1; 758 double y1; 759 } 760 761 struct BLRect 762 { 763 double x; 764 double y; 765 double w; 766 double h; 767 } 768 769 struct BLLine 770 { 771 double x0; 772 double y0; 773 double x1; 774 double y1; 775 } 776 777 struct BLTriangle 778 { 779 double x0; 780 double y0; 781 double x1; 782 double y1; 783 double x2; 784 double y2; 785 } 786 787 struct BLRoundRect 788 { 789 double x; 790 double y; 791 double w; 792 double h; 793 double rx; 794 double ry; 795 } 796 797 struct BLCircle 798 { 799 double cx; 800 double cy; 801 double r; 802 } 803 804 struct BLEllipse 805 { 806 double cx; 807 double cy; 808 double rx; 809 double ry; 810 } 811 812 struct BLArc 813 { 814 double cx; 815 double cy; 816 double rx; 817 double ry; 818 double start; 819 double sweep; 820 } 821 822 enum BLOrientation 823 { 824 BL_ORIENTATION_HORIZONTAL = 0, 825 BL_ORIENTATION_VERTICAL = 1, 826 BL_ORIENTATION_MAX_VALUE = 1, 827 BL_ORIENTATION_FORCE_UINT = 0xFFFFFFFFu 828 } 829 830 enum BLGlyphPlacementType 831 { 832 BL_GLYPH_PLACEMENT_TYPE_NONE = 0, 833 BL_GLYPH_PLACEMENT_TYPE_ADVANCE_OFFSET = 1, 834 BL_GLYPH_PLACEMENT_TYPE_DESIGN_UNITS = 2, 835 BL_GLYPH_PLACEMENT_TYPE_USER_UNITS = 3, 836 BL_GLYPH_PLACEMENT_TYPE_ABSOLUTE_UNITS = 4, 837 BL_GLYPH_PLACEMENT_TYPE_MAX_VALUE = 4, 838 BL_GLYPH_PLACEMENT_TYPE_FORCE_UINT = 0xFFFFFFFFu 839 } 840 841 enum BLGlyphRunFlags 842 { 843 BL_GLYPH_RUN_NO_FLAGS = 0u, 844 BL_GLYPH_RUN_FLAG_UCS4_CONTENT = 0x10000000u, 845 BL_GLYPH_RUN_FLAG_INVALID_TEXT = 0x20000000u, 846 BL_GLYPH_RUN_FLAG_UNDEFINED_GLYPHS = 0x40000000u, 847 BL_GLYPH_RUN_FLAG_INVALID_FONT_DATA = 0x80000000u, 848 BL_GLYPH_RUN_FLAG_FORCE_UINT = 0xFFFFFFFFu 849 } 850 851 enum BLFontDataFlags 852 { 853 BL_FONT_DATA_NO_FLAGS = 0u, 854 BL_FONT_DATA_FLAG_COLLECTION = 0x00000001u, 855 BL_FONT_DATA_FLAG_FORCE_UINT = 0xFFFFFFFFu 856 } 857 858 enum BLFontFaceType 859 { 860 BL_FONT_FACE_TYPE_NONE = 0, 861 BL_FONT_FACE_TYPE_OPENTYPE = 1, 862 BL_FONT_FACE_TYPE_MAX_VALUE = 1, 863 BL_FONT_FACE_TYPE_FORCE_UINT = 0xFFFFFFFFu 864 } 865 866 enum BLFontFaceFlags 867 { 868 BL_FONT_FACE_NO_FLAGS = 0u, 869 BL_FONT_FACE_FLAG_TYPOGRAPHIC_NAMES = 0x00000001u, 870 BL_FONT_FACE_FLAG_TYPOGRAPHIC_METRICS = 0x00000002u, 871 BL_FONT_FACE_FLAG_CHAR_TO_GLYPH_MAPPING = 0x00000004u, 872 BL_FONT_FACE_FLAG_HORIZONTAL_METIRCS = 0x00000010u, 873 BL_FONT_FACE_FLAG_VERTICAL_METRICS = 0x00000020u, 874 BL_FONT_FACE_FLAG_HORIZONTAL_KERNING = 0x00000040u, 875 BL_FONT_FACE_FLAG_VERTICAL_KERNING = 0x00000080u, 876 BL_FONT_FACE_FLAG_OPENTYPE_FEATURES = 0x00000100u, 877 BL_FONT_FACE_FLAG_PANOSE_DATA = 0x00000200u, 878 BL_FONT_FACE_FLAG_UNICODE_COVERAGE = 0x00000400u, 879 BL_FONT_FACE_FLAG_BASELINE_Y_EQUALS_0 = 0x00001000u, 880 BL_FONT_FACE_FLAG_LSB_POINT_X_EQUALS_0 = 0x00002000u, 881 BL_FONT_FACE_FLAG_VARIATION_SEQUENCES = 0x10000000u, 882 BL_FONT_FACE_FLAG_OPENTYPE_VARIATIONS = 0x20000000u, 883 BL_FONT_FACE_FLAG_SYMBOL_FONT = 0x40000000u, 884 BL_FONT_FACE_FLAG_LAST_RESORT_FONT = 0x80000000u, 885 BL_FONT_FACE_FLAG_FORCE_UINT = 0xFFFFFFFFu 886 } 887 888 enum BLFontFaceDiagFlags 889 { 890 BL_FONT_FACE_DIAG_NO_FLAGS = 0u, 891 BL_FONT_FACE_DIAG_WRONG_NAME_DATA = 0x00000001u, 892 BL_FONT_FACE_DIAG_FIXED_NAME_DATA = 0x00000002u, 893 BL_FONT_FACE_DIAG_WRONG_KERN_DATA = 0x00000004u, 894 BL_FONT_FACE_DIAG_FIXED_KERN_DATA = 0x00000008u, 895 BL_FONT_FACE_DIAG_WRONG_CMAP_DATA = 0x00000010u, 896 BL_FONT_FACE_DIAG_WRONG_CMAP_FORMAT = 0x00000020u, 897 BL_FONT_FACE_DIAG_WRONG_GDEF_DATA = 0x00000100u, 898 BL_FONT_FACE_DIAG_WRONG_GPOS_DATA = 0x00000400u, 899 BL_FONT_FACE_DIAG_WRONG_GSUB_DATA = 0x00001000u, 900 BL_FONT_FACE_DIAG_FORCE_UINT = 0xFFFFFFFFu 901 } 902 903 enum BLFontOutlineType 904 { 905 BL_FONT_OUTLINE_TYPE_NONE = 0, 906 BL_FONT_OUTLINE_TYPE_TRUETYPE = 1, 907 BL_FONT_OUTLINE_TYPE_CFF = 2, 908 BL_FONT_OUTLINE_TYPE_CFF2 = 3, 909 BL_FONT_OUTLINE_TYPE_MAX_VALUE = 3, 910 BL_FONT_OUTLINE_TYPE_FORCE_UINT = 0xFFFFFFFFu 911 } 912 913 enum BLFontStretch 914 { 915 BL_FONT_STRETCH_ULTRA_CONDENSED = 1, 916 BL_FONT_STRETCH_EXTRA_CONDENSED = 2, 917 BL_FONT_STRETCH_CONDENSED = 3, 918 BL_FONT_STRETCH_SEMI_CONDENSED = 4, 919 BL_FONT_STRETCH_NORMAL = 5, 920 BL_FONT_STRETCH_SEMI_EXPANDED = 6, 921 BL_FONT_STRETCH_EXPANDED = 7, 922 BL_FONT_STRETCH_EXTRA_EXPANDED = 8, 923 BL_FONT_STRETCH_ULTRA_EXPANDED = 9, 924 BL_FONT_STRETCH_MAX_VALUE = 9, 925 BL_FONT_STRETCH_FORCE_UINT = 0xFFFFFFFFu 926 } 927 928 enum BLFontStyle 929 { 930 BL_FONT_STYLE_NORMAL = 0, 931 BL_FONT_STYLE_OBLIQUE = 1, 932 BL_FONT_STYLE_ITALIC = 2, 933 BL_FONT_STYLE_MAX_VALUE = 2, 934 BL_FONT_STYLE_FORCE_UINT = 0xFFFFFFFFu 935 } 936 937 enum BLFontWeight 938 { 939 BL_FONT_WEIGHT_THIN = 100, 940 BL_FONT_WEIGHT_EXTRA_LIGHT = 200, 941 BL_FONT_WEIGHT_LIGHT = 300, 942 BL_FONT_WEIGHT_SEMI_LIGHT = 350, 943 BL_FONT_WEIGHT_NORMAL = 400, 944 BL_FONT_WEIGHT_MEDIUM = 500, 945 BL_FONT_WEIGHT_SEMI_BOLD = 600, 946 BL_FONT_WEIGHT_BOLD = 700, 947 BL_FONT_WEIGHT_EXTRA_BOLD = 800, 948 BL_FONT_WEIGHT_BLACK = 900, 949 BL_FONT_WEIGHT_EXTRA_BLACK = 950, 950 BL_FONT_WEIGHT_FORCE_UINT = 0xFFFFFFFFu 951 } 952 953 enum BLFontStringId 954 { 955 BL_FONT_STRING_ID_COPYRIGHT_NOTICE = 0, 956 BL_FONT_STRING_ID_FAMILY_NAME = 1, 957 BL_FONT_STRING_ID_SUBFAMILY_NAME = 2, 958 BL_FONT_STRING_ID_UNIQUE_IDENTIFIER = 3, 959 BL_FONT_STRING_ID_FULL_NAME = 4, 960 BL_FONT_STRING_ID_VERSION_STRING = 5, 961 BL_FONT_STRING_ID_POST_SCRIPT_NAME = 6, 962 BL_FONT_STRING_ID_TRADEMARK = 7, 963 BL_FONT_STRING_ID_MANUFACTURER_NAME = 8, 964 BL_FONT_STRING_ID_DESIGNER_NAME = 9, 965 BL_FONT_STRING_ID_DESCRIPTION = 10, 966 BL_FONT_STRING_ID_VENDOR_URL = 11, 967 BL_FONT_STRING_ID_DESIGNER_URL = 12, 968 BL_FONT_STRING_ID_LICENSE_DESCRIPTION = 13, 969 BL_FONT_STRING_ID_LICENSE_INFO_URL = 14, 970 BL_FONT_STRING_ID_RESERVED = 15, 971 BL_FONT_STRING_ID_TYPOGRAPHIC_FAMILY_NAME = 16, 972 BL_FONT_STRING_ID_TYPOGRAPHIC_SUBFAMILY_NAME = 17, 973 BL_FONT_STRING_ID_COMPATIBLE_FULL_NAME = 18, 974 BL_FONT_STRING_ID_SAMPLE_TEXT = 19, 975 BL_FONT_STRING_ID_POST_SCRIPT_CID_NAME = 20, 976 BL_FONT_STRING_ID_WWS_FAMILY_NAME = 21, 977 BL_FONT_STRING_ID_WWS_SUBFAMILY_NAME = 22, 978 BL_FONT_STRING_ID_LIGHT_BACKGROUND_PALETTE = 23, 979 BL_FONT_STRING_ID_DARK_BACKGROUND_PALETTE = 24, 980 BL_FONT_STRING_ID_VARIATIONS_POST_SCRIPT_PREFIX = 25, 981 BL_FONT_STRING_ID_COMMON_MAX_VALUE = 26, 982 BL_FONT_STRING_ID_CUSTOM_START_INDEX = 255, 983 BL_FONT_STRING_ID_FORCE_UINT = 0xFFFFFFFFu 984 } 985 986 enum BLFontUnicodeCoverageIndex 987 { 988 BL_FONT_UC_INDEX_BASIC_LATIN = 0, 989 BL_FONT_UC_INDEX_LATIN1_SUPPLEMENT = 1, 990 BL_FONT_UC_INDEX_LATIN_EXTENDED_A = 2, 991 BL_FONT_UC_INDEX_LATIN_EXTENDED_B = 3, 992 BL_FONT_UC_INDEX_IPA_EXTENSIONS = 4, 993 BL_FONT_UC_INDEX_SPACING_MODIFIER_LETTERS = 5, 994 BL_FONT_UC_INDEX_COMBINING_DIACRITICAL_MARKS = 6, 995 BL_FONT_UC_INDEX_GREEK_AND_COPTIC = 7, 996 BL_FONT_UC_INDEX_COPTIC = 8, 997 BL_FONT_UC_INDEX_CYRILLIC = 9, 998 BL_FONT_UC_INDEX_ARMENIAN = 10, 999 BL_FONT_UC_INDEX_HEBREW = 11, 1000 BL_FONT_UC_INDEX_VAI = 12, 1001 BL_FONT_UC_INDEX_ARABIC = 13, 1002 BL_FONT_UC_INDEX_NKO = 14, 1003 BL_FONT_UC_INDEX_DEVANAGARI = 15, 1004 BL_FONT_UC_INDEX_BENGALI = 16, 1005 BL_FONT_UC_INDEX_GURMUKHI = 17, 1006 BL_FONT_UC_INDEX_GUJARATI = 18, 1007 BL_FONT_UC_INDEX_ORIYA = 19, 1008 BL_FONT_UC_INDEX_TAMIL = 20, 1009 BL_FONT_UC_INDEX_TELUGU = 21, 1010 BL_FONT_UC_INDEX_KANNADA = 22, 1011 BL_FONT_UC_INDEX_MALAYALAM = 23, 1012 BL_FONT_UC_INDEX_THAI = 24, 1013 BL_FONT_UC_INDEX_LAO = 25, 1014 BL_FONT_UC_INDEX_GEORGIAN = 26, 1015 BL_FONT_UC_INDEX_BALINESE = 27, 1016 BL_FONT_UC_INDEX_HANGUL_JAMO = 28, 1017 BL_FONT_UC_INDEX_LATIN_EXTENDED_ADDITIONAL = 29, 1018 BL_FONT_UC_INDEX_GREEK_EXTENDED = 30, 1019 BL_FONT_UC_INDEX_GENERAL_PUNCTUATION = 31, 1020 BL_FONT_UC_INDEX_SUPERSCRIPTS_AND_SUBSCRIPTS = 32, 1021 BL_FONT_UC_INDEX_CURRENCY_SYMBOLS = 33, 1022 BL_FONT_UC_INDEX_COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS = 34, 1023 BL_FONT_UC_INDEX_LETTERLIKE_SYMBOLS = 35, 1024 BL_FONT_UC_INDEX_NUMBER_FORMS = 36, 1025 BL_FONT_UC_INDEX_ARROWS = 37, 1026 BL_FONT_UC_INDEX_MATHEMATICAL_OPERATORS = 38, 1027 BL_FONT_UC_INDEX_MISCELLANEOUS_TECHNICAL = 39, 1028 BL_FONT_UC_INDEX_CONTROL_PICTURES = 40, 1029 BL_FONT_UC_INDEX_OPTICAL_CHARACTER_RECOGNITION = 41, 1030 BL_FONT_UC_INDEX_ENCLOSED_ALPHANUMERICS = 42, 1031 BL_FONT_UC_INDEX_BOX_DRAWING = 43, 1032 BL_FONT_UC_INDEX_BLOCK_ELEMENTS = 44, 1033 BL_FONT_UC_INDEX_GEOMETRIC_SHAPES = 45, 1034 BL_FONT_UC_INDEX_MISCELLANEOUS_SYMBOLS = 46, 1035 BL_FONT_UC_INDEX_DINGBATS = 47, 1036 BL_FONT_UC_INDEX_CJK_SYMBOLS_AND_PUNCTUATION = 48, 1037 BL_FONT_UC_INDEX_HIRAGANA = 49, 1038 BL_FONT_UC_INDEX_KATAKANA = 50, 1039 BL_FONT_UC_INDEX_BOPOMOFO = 51, 1040 BL_FONT_UC_INDEX_HANGUL_COMPATIBILITY_JAMO = 52, 1041 BL_FONT_UC_INDEX_PHAGS_PA = 53, 1042 BL_FONT_UC_INDEX_ENCLOSED_CJK_LETTERS_AND_MONTHS = 54, 1043 BL_FONT_UC_INDEX_CJK_COMPATIBILITY = 55, 1044 BL_FONT_UC_INDEX_HANGUL_SYLLABLES = 56, 1045 BL_FONT_UC_INDEX_NON_PLANE = 57, 1046 BL_FONT_UC_INDEX_PHOENICIAN = 58, 1047 BL_FONT_UC_INDEX_CJK_UNIFIED_IDEOGRAPHS = 59, 1048 BL_FONT_UC_INDEX_PRIVATE_USE_PLANE0 = 60, 1049 BL_FONT_UC_INDEX_CJK_STROKES = 61, 1050 BL_FONT_UC_INDEX_ALPHABETIC_PRESENTATION_FORMS = 62, 1051 BL_FONT_UC_INDEX_ARABIC_PRESENTATION_FORMS_A = 63, 1052 BL_FONT_UC_INDEX_COMBINING_HALF_MARKS = 64, 1053 BL_FONT_UC_INDEX_VERTICAL_FORMS = 65, 1054 BL_FONT_UC_INDEX_SMALL_FORM_VARIANTS = 66, 1055 BL_FONT_UC_INDEX_ARABIC_PRESENTATION_FORMS_B = 67, 1056 BL_FONT_UC_INDEX_HALFWIDTH_AND_FULLWIDTH_FORMS = 68, 1057 BL_FONT_UC_INDEX_SPECIALS = 69, 1058 BL_FONT_UC_INDEX_TIBETAN = 70, 1059 BL_FONT_UC_INDEX_SYRIAC = 71, 1060 BL_FONT_UC_INDEX_THAANA = 72, 1061 BL_FONT_UC_INDEX_SINHALA = 73, 1062 BL_FONT_UC_INDEX_MYANMAR = 74, 1063 BL_FONT_UC_INDEX_ETHIOPIC = 75, 1064 BL_FONT_UC_INDEX_CHEROKEE = 76, 1065 BL_FONT_UC_INDEX_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS = 77, 1066 BL_FONT_UC_INDEX_OGHAM = 78, 1067 BL_FONT_UC_INDEX_RUNIC = 79, 1068 BL_FONT_UC_INDEX_KHMER = 80, 1069 BL_FONT_UC_INDEX_MONGOLIAN = 81, 1070 BL_FONT_UC_INDEX_BRAILLE_PATTERNS = 82, 1071 BL_FONT_UC_INDEX_YI_SYLLABLES_AND_RADICALS = 83, 1072 BL_FONT_UC_INDEX_TAGALOG_HANUNOO_BUHID_TAGBANWA = 84, 1073 BL_FONT_UC_INDEX_OLD_ITALIC = 85, 1074 BL_FONT_UC_INDEX_GOTHIC = 86, 1075 BL_FONT_UC_INDEX_DESERET = 87, 1076 BL_FONT_UC_INDEX_MUSICAL_SYMBOLS = 88, 1077 BL_FONT_UC_INDEX_MATHEMATICAL_ALPHANUMERIC_SYMBOLS = 89, 1078 BL_FONT_UC_INDEX_PRIVATE_USE_PLANE_15_16 = 90, 1079 BL_FONT_UC_INDEX_VARIATION_SELECTORS = 91, 1080 BL_FONT_UC_INDEX_TAGS = 92, 1081 BL_FONT_UC_INDEX_LIMBU = 93, 1082 BL_FONT_UC_INDEX_TAI_LE = 94, 1083 BL_FONT_UC_INDEX_NEW_TAI_LUE = 95, 1084 BL_FONT_UC_INDEX_BUGINESE = 96, 1085 BL_FONT_UC_INDEX_GLAGOLITIC = 97, 1086 BL_FONT_UC_INDEX_TIFINAGH = 98, 1087 BL_FONT_UC_INDEX_YIJING_HEXAGRAM_SYMBOLS = 99, 1088 BL_FONT_UC_INDEX_SYLOTI_NAGRI = 100, 1089 BL_FONT_UC_INDEX_LINEAR_B_SYLLABARY_AND_IDEOGRAMS = 101, 1090 BL_FONT_UC_INDEX_ANCIENT_GREEK_NUMBERS = 102, 1091 BL_FONT_UC_INDEX_UGARITIC = 103, 1092 BL_FONT_UC_INDEX_OLD_PERSIAN = 104, 1093 BL_FONT_UC_INDEX_SHAVIAN = 105, 1094 BL_FONT_UC_INDEX_OSMANYA = 106, 1095 BL_FONT_UC_INDEX_CYPRIOT_SYLLABARY = 107, 1096 BL_FONT_UC_INDEX_KHAROSHTHI = 108, 1097 BL_FONT_UC_INDEX_TAI_XUAN_JING_SYMBOLS = 109, 1098 BL_FONT_UC_INDEX_CUNEIFORM = 110, 1099 BL_FONT_UC_INDEX_COUNTING_ROD_NUMERALS = 111, 1100 BL_FONT_UC_INDEX_SUNDANESE = 112, 1101 BL_FONT_UC_INDEX_LEPCHA = 113, 1102 BL_FONT_UC_INDEX_OL_CHIKI = 114, 1103 BL_FONT_UC_INDEX_SAURASHTRA = 115, 1104 BL_FONT_UC_INDEX_KAYAH_LI = 116, 1105 BL_FONT_UC_INDEX_REJANG = 117, 1106 BL_FONT_UC_INDEX_CHAM = 118, 1107 BL_FONT_UC_INDEX_ANCIENT_SYMBOLS = 119, 1108 BL_FONT_UC_INDEX_PHAISTOS_DISC = 120, 1109 BL_FONT_UC_INDEX_CARIAN_LYCIAN_LYDIAN = 121, 1110 BL_FONT_UC_INDEX_DOMINO_AND_MAHJONG_TILES = 122, 1111 BL_FONT_UC_INDEX_INTERNAL_USAGE_123 = 123, 1112 BL_FONT_UC_INDEX_INTERNAL_USAGE_124 = 124, 1113 BL_FONT_UC_INDEX_INTERNAL_USAGE_125 = 125, 1114 BL_FONT_UC_INDEX_INTERNAL_USAGE_126 = 126, 1115 BL_FONT_UC_INDEX_INTERNAL_USAGE_127 = 127, 1116 BL_FONT_UC_INDEX_MAX_VALUE = 128, 1117 BL_FONT_UC_INDEX_FORCE_UINT = 0xFFFFFFFFu 1118 } 1119 1120 enum BLTextDirection 1121 { 1122 BL_TEXT_DIRECTION_LTR = 0, 1123 BL_TEXT_DIRECTION_RTL = 1, 1124 BL_TEXT_DIRECTION_MAX_VALUE = 1, 1125 BL_TEXT_DIRECTION_FORCE_UINT = 0xFFFFFFFFu 1126 } 1127 1128 struct BLGlyphInfo 1129 { 1130 uint cluster; 1131 uint[2] reserved; 1132 } 1133 1134 struct BLGlyphPlacement 1135 { 1136 BLPointI placement; 1137 BLPointI advance; 1138 } 1139 1140 struct BLGlyphMappingState 1141 { 1142 size_t glyphCount; 1143 size_t undefinedFirst; 1144 size_t undefinedCount; 1145 } 1146 1147 struct BLGlyphOutlineSinkInfo 1148 { 1149 size_t glyphIndex; 1150 size_t contourCount; 1151 } 1152 1153 struct BLGlyphRun 1154 { 1155 void* glyphData; 1156 void* placementData; 1157 size_t size; 1158 ubyte glyphSize; 1159 ubyte placementType; 1160 byte glyphAdvance; 1161 byte placementAdvance; 1162 uint flags; 1163 } 1164 1165 struct BLFontFaceInfo 1166 { 1167 ubyte faceType; 1168 ubyte outlineType; 1169 ushort glyphCount; 1170 uint revision; 1171 uint faceIndex; 1172 uint faceFlags; 1173 uint diagFlags; 1174 uint[3] reserved; 1175 } 1176 1177 struct BLFontQueryProperties 1178 { 1179 uint style; 1180 uint weight; 1181 uint stretch; 1182 } 1183 1184 struct BLFontTable 1185 { 1186 const(ubyte)* data; 1187 size_t size; 1188 } 1189 1190 struct BLFontFeatureItem 1191 { 1192 BLTag tag; 1193 uint value; 1194 } 1195 1196 struct BLFontVariationItem 1197 { 1198 BLTag tag; 1199 float value; 1200 } 1201 1202 struct BLFontUnicodeCoverage 1203 { 1204 uint[4] data; 1205 } 1206 1207 struct BLFontPanose 1208 { 1209 union 1210 { 1211 ubyte[10] data; 1212 ubyte familyKind; 1213 1214 struct _Anonymous_0 1215 { 1216 ubyte familyKind; 1217 ubyte serifStyle; 1218 ubyte weight; 1219 ubyte proportion; 1220 ubyte contrast; 1221 ubyte strokeVariation; 1222 ubyte armStyle; 1223 ubyte letterform; 1224 ubyte midline; 1225 ubyte xHeight; 1226 } 1227 1228 _Anonymous_0 text; 1229 1230 struct _Anonymous_1 1231 { 1232 ubyte familyKind; 1233 ubyte toolKind; 1234 ubyte weight; 1235 ubyte spacing; 1236 ubyte aspectRatio; 1237 ubyte contrast; 1238 ubyte topology; 1239 ubyte form; 1240 ubyte finials; 1241 ubyte xAscent; 1242 } 1243 1244 _Anonymous_1 script; 1245 1246 struct _Anonymous_2 1247 { 1248 ubyte familyKind; 1249 ubyte decorativeClass; 1250 ubyte weight; 1251 ubyte aspect; 1252 ubyte contrast; 1253 ubyte serifVariant; 1254 ubyte treatment; 1255 ubyte lining; 1256 ubyte topology; 1257 ubyte characterRange; 1258 } 1259 1260 _Anonymous_2 decorative; 1261 1262 struct _Anonymous_3 1263 { 1264 ubyte familyKind; 1265 ubyte symbolKind; 1266 ubyte weight; 1267 ubyte spacing; 1268 ubyte aspectRatioAndContrast; 1269 ubyte aspectRatio94; 1270 ubyte aspectRatio119; 1271 ubyte aspectRatio157; 1272 ubyte aspectRatio163; 1273 ubyte aspectRatio211; 1274 } 1275 1276 _Anonymous_3 symbol; 1277 } 1278 } 1279 1280 struct BLFontMatrix 1281 { 1282 union 1283 { 1284 double[4] m; 1285 1286 struct 1287 { 1288 double m00; 1289 double m01; 1290 double m10; 1291 double m11; 1292 } 1293 } 1294 } 1295 1296 struct BLFontMetrics 1297 { 1298 float size; 1299 1300 union 1301 { 1302 struct 1303 { 1304 float ascent; 1305 float vAscent; 1306 float descent; 1307 float vDescent; 1308 } 1309 1310 struct 1311 { 1312 float[2] ascentByOrientation; 1313 float[2] descentByOrientation; 1314 } 1315 } 1316 1317 float lineGap; 1318 float xHeight; 1319 float capHeight; 1320 float xMin; 1321 float yMin; 1322 float xMax; 1323 float yMax; 1324 float underlinePosition; 1325 float underlineThickness; 1326 float strikethroughPosition; 1327 float strikethroughThickness; 1328 } 1329 1330 struct BLFontDesignMetrics 1331 { 1332 int unitsPerEm; 1333 int lowestPPEM; 1334 int lineGap; 1335 int xHeight; 1336 int capHeight; 1337 1338 union 1339 { 1340 struct 1341 { 1342 int ascent; 1343 int vAscent; 1344 int descent; 1345 int vDescent; 1346 int hMinLSB; 1347 int vMinLSB; 1348 int hMinTSB; 1349 int vMinTSB; 1350 int hMaxAdvance; 1351 int vMaxAdvance; 1352 } 1353 1354 struct 1355 { 1356 int[2] ascentByOrientation; 1357 int[2] descentByOrientation; 1358 int[2] minLSBByOrientation; 1359 int[2] minTSBByOrientation; 1360 int[2] maxAdvanceByOrientation; 1361 } 1362 } 1363 1364 BLBoxI glyphBoundingBox; 1365 int underlinePosition; 1366 int underlineThickness; 1367 int strikethroughPosition; 1368 int strikethroughThickness; 1369 } 1370 1371 struct BLTextMetrics 1372 { 1373 BLPoint advance; 1374 BLPoint leadingBearing; 1375 BLPoint trailingBearing; 1376 BLBox boundingBox; 1377 } 1378 1379 version(BindBlend2D_Static) BLResult blStringInit(BLStringCore* self); 1380 version(BindBlend2D_Static) BLResult blStringInitMove(BLStringCore* self, BLStringCore* other); 1381 version(BindBlend2D_Static) BLResult blStringInitWeak(BLStringCore* self, const(BLStringCore)* other); 1382 version(BindBlend2D_Static) BLResult blStringInitWithData(BLStringCore* self, const(char)* str, size_t size); 1383 version(BindBlend2D_Static) BLResult blStringDestroy(BLStringCore* self); 1384 version(BindBlend2D_Static) BLResult blStringReset(BLStringCore* self); 1385 version(BindBlend2D_Static) const(char)* blStringGetData(const(BLStringCore)* self); 1386 version(BindBlend2D_Static) size_t blStringGetSize(const(BLStringCore)* self); 1387 version(BindBlend2D_Static) size_t blStringGetCapacity(const(BLStringCore)* self); 1388 version(BindBlend2D_Static) BLResult blStringClear(BLStringCore* self); 1389 version(BindBlend2D_Static) BLResult blStringShrink(BLStringCore* self); 1390 version(BindBlend2D_Static) BLResult blStringReserve(BLStringCore* self, size_t n); 1391 version(BindBlend2D_Static) BLResult blStringResize(BLStringCore* self, size_t n, char fill); 1392 version(BindBlend2D_Static) BLResult blStringMakeMutable(BLStringCore* self, char** dataOut); 1393 version(BindBlend2D_Static) BLResult blStringModifyOp(BLStringCore* self, BLModifyOp op, size_t n, char** dataOut); 1394 version(BindBlend2D_Static) BLResult blStringInsertOp(BLStringCore* self, size_t index, size_t n, char** dataOut); 1395 version(BindBlend2D_Static) BLResult blStringAssignMove(BLStringCore* self, BLStringCore* other); 1396 version(BindBlend2D_Static) BLResult blStringAssignWeak(BLStringCore* self, const(BLStringCore)* other); 1397 version(BindBlend2D_Static) BLResult blStringAssignDeep(BLStringCore* self, const(BLStringCore)* other); 1398 version(BindBlend2D_Static) BLResult blStringAssignData(BLStringCore* self, const(char)* str, size_t n); 1399 version(BindBlend2D_Static) BLResult blStringApplyOpChar(BLStringCore* self, BLModifyOp op, char c, size_t n); 1400 version(BindBlend2D_Static) BLResult blStringApplyOpData(BLStringCore* self, BLModifyOp op, const(char)* str, size_t n); 1401 version(BindBlend2D_Static) BLResult blStringApplyOpString(BLStringCore* self, BLModifyOp op, const(BLStringCore)* other); 1402 version(BindBlend2D_Static) BLResult blStringApplyOpFormat(BLStringCore* self, BLModifyOp op, const(char)* fmt, ...); 1403 version(BindBlend2D_Static) BLResult blStringApplyOpFormatV(BLStringCore* self, BLModifyOp op, const(char)* fmt, va_list ap); 1404 version(BindBlend2D_Static) BLResult blStringInsertChar(BLStringCore* self, size_t index, char c, size_t n); 1405 version(BindBlend2D_Static) BLResult blStringInsertData(BLStringCore* self, size_t index, const(char)* str, size_t n); 1406 version(BindBlend2D_Static) BLResult blStringInsertString(BLStringCore* self, size_t index, const(BLStringCore)* other); 1407 version(BindBlend2D_Static) BLResult blStringRemoveIndex(BLStringCore* self, size_t index); 1408 version(BindBlend2D_Static) BLResult blStringRemoveRange(BLStringCore* self, size_t rStart, size_t rEnd); 1409 version(BindBlend2D_Static) bool blStringEquals(const(BLStringCore)* a, const(BLStringCore)* b); 1410 version(BindBlend2D_Static) bool blStringEqualsData(const(BLStringCore)* self, const(char)* str, size_t n); 1411 version(BindBlend2D_Static) int blStringCompare(const(BLStringCore)* a, const(BLStringCore)* b); 1412 version(BindBlend2D_Static) int blStringCompareData(const(BLStringCore)* self, const(char)* str, size_t n); 1413 1414 struct BLStringCore 1415 { 1416 BLObjectDetail _d; 1417 } 1418 1419 struct BLStringImpl 1420 { 1421 size_t size; 1422 size_t capacity; 1423 } 1424 1425 version(BindBlend2D_Static) BLResult blFontDataInit(BLFontDataCore* self); 1426 version(BindBlend2D_Static) BLResult blFontDataInitMove(BLFontDataCore* self, BLFontDataCore* other); 1427 version(BindBlend2D_Static) BLResult blFontDataInitWeak(BLFontDataCore* self, const(BLFontDataCore)* other); 1428 version(BindBlend2D_Static) BLResult blFontDataDestroy(BLFontDataCore* self); 1429 version(BindBlend2D_Static) BLResult blFontDataReset(BLFontDataCore* self); 1430 version(BindBlend2D_Static) BLResult blFontDataAssignMove(BLFontDataCore* self, BLFontDataCore* other); 1431 version(BindBlend2D_Static) BLResult blFontDataAssignWeak(BLFontDataCore* self, const(BLFontDataCore)* other); 1432 version(BindBlend2D_Static) BLResult blFontDataCreateFromFile(BLFontDataCore* self, const(char)* fileName, BLFileReadFlags readFlags); 1433 version(BindBlend2D_Static) BLResult blFontDataCreateFromDataArray(BLFontDataCore* self, const(BLArrayCore)* dataArray); 1434 version(BindBlend2D_Static) BLResult blFontDataCreateFromData(BLFontDataCore* self, const(void)* data, size_t dataSize, BLDestroyExternalDataFunc destroyFunc, void* userData); 1435 version(BindBlend2D_Static) bool blFontDataEquals(const(BLFontDataCore)* a, const(BLFontDataCore)* b); 1436 version(BindBlend2D_Static) BLResult blFontDataListTags(const(BLFontDataCore)* self, uint faceIndex, BLArrayCore* dst); 1437 version(BindBlend2D_Static) size_t blFontDataQueryTables(const(BLFontDataCore)* self, uint faceIndex, BLFontTable* dst, const(BLTag)* tags, size_t count); 1438 1439 struct BLFontDataCore 1440 { 1441 BLObjectDetail _d; 1442 } 1443 1444 struct BLFontDataVirt 1445 { 1446 BLObjectVirtBase base; 1447 BLResult function(const(BLFontDataImpl)* impl, uint faceIndex, BLArrayCore* out_) listTags; 1448 size_t function(const(BLFontDataImpl)* impl, uint faceIndex, BLFontTable* dst, const(BLTag)* tags, size_t n) queryTables; 1449 } 1450 1451 struct BLFontDataImpl 1452 { 1453 const(BLFontDataVirt)* virt; 1454 ubyte faceType; 1455 uint faceCount; 1456 uint flags; 1457 } 1458 1459 struct BLGlyphBufferImpl 1460 { 1461 union 1462 { 1463 struct 1464 { 1465 uint* content; 1466 BLGlyphPlacement* placementData; 1467 size_t size; 1468 uint reserved; 1469 uint flags; 1470 } 1471 1472 BLGlyphRun glyphRun; 1473 } 1474 1475 BLGlyphInfo* infoData; 1476 } 1477 1478 struct BLGlyphBufferCore 1479 { 1480 BLGlyphBufferImpl* impl; 1481 } 1482 1483 version(BindBlend2D_Static) BLResult blGlyphBufferInit(BLGlyphBufferCore* self); 1484 version(BindBlend2D_Static) BLResult blGlyphBufferInitMove(BLGlyphBufferCore* self, BLGlyphBufferCore* other); 1485 version(BindBlend2D_Static) BLResult blGlyphBufferDestroy(BLGlyphBufferCore* self); 1486 version(BindBlend2D_Static) BLResult blGlyphBufferReset(BLGlyphBufferCore* self); 1487 version(BindBlend2D_Static) BLResult blGlyphBufferClear(BLGlyphBufferCore* self); 1488 version(BindBlend2D_Static) size_t blGlyphBufferGetSize(const(BLGlyphBufferCore)* self); 1489 version(BindBlend2D_Static) uint blGlyphBufferGetFlags(const(BLGlyphBufferCore)* self); 1490 version(BindBlend2D_Static) const(BLGlyphRun)* blGlyphBufferGetGlyphRun(const(BLGlyphBufferCore)* self); 1491 version(BindBlend2D_Static) const(uint)* blGlyphBufferGetContent(const(BLGlyphBufferCore)* self); 1492 version(BindBlend2D_Static) const(BLGlyphInfo)* blGlyphBufferGetInfoData(const(BLGlyphBufferCore)* self); 1493 version(BindBlend2D_Static) const(BLGlyphPlacement)* blGlyphBufferGetPlacementData(const(BLGlyphBufferCore)* self); 1494 version(BindBlend2D_Static) BLResult blGlyphBufferSetText(BLGlyphBufferCore* self, const(void)* textData, size_t size, BLTextEncoding encoding); 1495 version(BindBlend2D_Static) BLResult blGlyphBufferSetGlyphs(BLGlyphBufferCore* self, const(uint)* glyphData, size_t size); 1496 version(BindBlend2D_Static) BLResult blGlyphBufferSetGlyphsFromStruct(BLGlyphBufferCore* self, const(void)* glyphData, size_t size, size_t glyphIdSize, intptr_t glyphIdAdvance); 1497 1498 enum BLPathCmd 1499 { 1500 BL_PATH_CMD_MOVE = 0, 1501 BL_PATH_CMD_ON = 1, 1502 BL_PATH_CMD_QUAD = 2, 1503 BL_PATH_CMD_CUBIC = 3, 1504 BL_PATH_CMD_CLOSE = 4, 1505 BL_PATH_CMD_MAX_VALUE = 4, 1506 BL_PATH_CMD_FORCE_UINT = 0xFFFFFFFFu 1507 } 1508 1509 enum BLPathCmdExtra 1510 { 1511 BL_PATH_CMD_PRESERVE = 0xFFFFFFFFu 1512 } 1513 1514 enum BLPathFlags 1515 { 1516 BL_PATH_NO_FLAGS = 0u, 1517 BL_PATH_FLAG_EMPTY = 0x00000001u, 1518 BL_PATH_FLAG_MULTIPLE = 0x00000002u, 1519 BL_PATH_FLAG_QUADS = 0x00000004u, 1520 BL_PATH_FLAG_CUBICS = 0x00000008u, 1521 BL_PATH_FLAG_INVALID = 0x40000000u, 1522 BL_PATH_FLAG_DIRTY = 0x80000000u, 1523 BL_PATH_FLAG_FORCE_UINT = 0xFFFFFFFFu 1524 } 1525 1526 enum BLPathReverseMode 1527 { 1528 BL_PATH_REVERSE_MODE_COMPLETE = 0, 1529 BL_PATH_REVERSE_MODE_SEPARATE = 1, 1530 BL_PATH_REVERSE_MODE_MAX_VALUE = 1, 1531 BL_PATH_REVERSE_MODE_FORCE_UINT = 0xFFFFFFFFu 1532 } 1533 1534 enum BLStrokeJoin 1535 { 1536 BL_STROKE_JOIN_MITER_CLIP = 0, 1537 BL_STROKE_JOIN_MITER_BEVEL = 1, 1538 BL_STROKE_JOIN_MITER_ROUND = 2, 1539 BL_STROKE_JOIN_BEVEL = 3, 1540 BL_STROKE_JOIN_ROUND = 4, 1541 BL_STROKE_JOIN_MAX_VALUE = 4, 1542 BL_STROKE_JOIN_FORCE_UINT = 0xFFFFFFFFu 1543 } 1544 1545 enum BLStrokeCapPosition 1546 { 1547 BL_STROKE_CAP_POSITION_START = 0, 1548 BL_STROKE_CAP_POSITION_END = 1, 1549 BL_STROKE_CAP_POSITION_MAX_VALUE = 1, 1550 BL_STROKE_CAP_POSITION_FORCE_UINT = 0xFFFFFFFFu 1551 } 1552 1553 enum BLStrokeCap 1554 { 1555 BL_STROKE_CAP_BUTT = 0, 1556 BL_STROKE_CAP_SQUARE = 1, 1557 BL_STROKE_CAP_ROUND = 2, 1558 BL_STROKE_CAP_ROUND_REV = 3, 1559 BL_STROKE_CAP_TRIANGLE = 4, 1560 BL_STROKE_CAP_TRIANGLE_REV = 5, 1561 BL_STROKE_CAP_MAX_VALUE = 5, 1562 BL_STROKE_CAP_FORCE_UINT = 0xFFFFFFFFu 1563 } 1564 1565 enum BLStrokeTransformOrder 1566 { 1567 BL_STROKE_TRANSFORM_ORDER_AFTER = 0, 1568 BL_STROKE_TRANSFORM_ORDER_BEFORE = 1, 1569 BL_STROKE_TRANSFORM_ORDER_MAX_VALUE = 1, 1570 BL_STROKE_TRANSFORM_ORDER_FORCE_UINT = 0xFFFFFFFFu 1571 } 1572 1573 enum BLFlattenMode 1574 { 1575 BL_FLATTEN_MODE_DEFAULT = 0, 1576 BL_FLATTEN_MODE_RECURSIVE = 1, 1577 BL_FLATTEN_MODE_MAX_VALUE = 1, 1578 BL_FLATTEN_MODE_FORCE_UINT = 0xFFFFFFFFu 1579 } 1580 1581 enum BLOffsetMode 1582 { 1583 BL_OFFSET_MODE_DEFAULT = 0, 1584 BL_OFFSET_MODE_ITERATIVE = 1, 1585 BL_OFFSET_MODE_MAX_VALUE = 1, 1586 BL_OFFSET_MODE_FORCE_UINT = 0xFFFFFFFFu 1587 } 1588 1589 struct BLApproximationOptions 1590 { 1591 ubyte flattenMode; 1592 ubyte offsetMode; 1593 ubyte[6] reservedFlags; 1594 double flattenTolerance; 1595 double simplifyTolerance; 1596 double offsetParameter; 1597 } 1598 1599 struct BLPathView 1600 { 1601 const(ubyte)* commandData; 1602 const(BLPoint)* vertexData; 1603 size_t size; 1604 } 1605 1606 extern __gshared const BLApproximationOptions blDefaultApproximationOptions; 1607 1608 alias BLPathSinkFunc = uint function(BLPathCore* path, const(void)* info, void* closure); 1609 1610 version(BindBlend2D_Static) BLResult blPathInit(BLPathCore* self); 1611 version(BindBlend2D_Static) BLResult blPathInitMove(BLPathCore* self, BLPathCore* other); 1612 version(BindBlend2D_Static) BLResult blPathInitWeak(BLPathCore* self, const(BLPathCore)* other); 1613 version(BindBlend2D_Static) BLResult blPathDestroy(BLPathCore* self); 1614 version(BindBlend2D_Static) BLResult blPathReset(BLPathCore* self); 1615 version(BindBlend2D_Static) size_t blPathGetSize(const(BLPathCore)* self); 1616 version(BindBlend2D_Static) size_t blPathGetCapacity(const(BLPathCore)* self); 1617 version(BindBlend2D_Static) const(ubyte)* blPathGetCommandData(const(BLPathCore)* self); 1618 version(BindBlend2D_Static) const(BLPoint)* blPathGetVertexData(const(BLPathCore)* self); 1619 version(BindBlend2D_Static) BLResult blPathClear(BLPathCore* self); 1620 version(BindBlend2D_Static) BLResult blPathShrink(BLPathCore* self); 1621 version(BindBlend2D_Static) BLResult blPathReserve(BLPathCore* self, size_t n); 1622 version(BindBlend2D_Static) BLResult blPathModifyOp(BLPathCore* self, BLModifyOp op, size_t n, ubyte** cmdDataOut, BLPoint** vtxDataOut); 1623 version(BindBlend2D_Static) BLResult blPathAssignMove(BLPathCore* self, BLPathCore* other); 1624 version(BindBlend2D_Static) BLResult blPathAssignWeak(BLPathCore* self, const(BLPathCore)* other); 1625 version(BindBlend2D_Static) BLResult blPathAssignDeep(BLPathCore* self, const(BLPathCore)* other); 1626 version(BindBlend2D_Static) BLResult blPathSetVertexAt(BLPathCore* self, size_t index, uint cmd, double x, double y); 1627 version(BindBlend2D_Static) BLResult blPathMoveTo(BLPathCore* self, double x0, double y0); 1628 version(BindBlend2D_Static) BLResult blPathLineTo(BLPathCore* self, double x1, double y1); 1629 version(BindBlend2D_Static) BLResult blPathPolyTo(BLPathCore* self, const(BLPoint)* poly, size_t count); 1630 version(BindBlend2D_Static) BLResult blPathQuadTo(BLPathCore* self, double x1, double y1, double x2, double y2); 1631 version(BindBlend2D_Static) BLResult blPathCubicTo(BLPathCore* self, double x1, double y1, double x2, double y2, double x3, double y3); 1632 version(BindBlend2D_Static) BLResult blPathSmoothQuadTo(BLPathCore* self, double x2, double y2); 1633 version(BindBlend2D_Static) BLResult blPathSmoothCubicTo(BLPathCore* self, double x2, double y2, double x3, double y3); 1634 version(BindBlend2D_Static) BLResult blPathArcTo(BLPathCore* self, double x, double y, double rx, double ry, double start, double sweep, bool forceMoveTo); 1635 version(BindBlend2D_Static) BLResult blPathArcQuadrantTo(BLPathCore* self, double x1, double y1, double x2, double y2); 1636 version(BindBlend2D_Static) BLResult blPathEllipticArcTo(BLPathCore* self, double rx, double ry, double xAxisRotation, bool largeArcFlag, bool sweepFlag, double x1, double y1); 1637 version(BindBlend2D_Static) BLResult blPathClose(BLPathCore* self); 1638 version(BindBlend2D_Static) BLResult blPathAddGeometry(BLPathCore* self, BLGeometryType geometryType, const(void)* geometryData, const(BLMatrix2D)* m, BLGeometryDirection dir); 1639 version(BindBlend2D_Static) BLResult blPathAddBoxI(BLPathCore* self, const(BLBoxI)* box, BLGeometryDirection dir); 1640 version(BindBlend2D_Static) BLResult blPathAddBoxD(BLPathCore* self, const(BLBox)* box, BLGeometryDirection dir); 1641 version(BindBlend2D_Static) BLResult blPathAddRectI(BLPathCore* self, const(BLRectI)* rect, BLGeometryDirection dir); 1642 version(BindBlend2D_Static) BLResult blPathAddRectD(BLPathCore* self, const(BLRect)* rect, BLGeometryDirection dir); 1643 version(BindBlend2D_Static) BLResult blPathAddPath(BLPathCore* self, const(BLPathCore)* other, const(BLRange)* range); 1644 version(BindBlend2D_Static) BLResult blPathAddTranslatedPath(BLPathCore* self, const(BLPathCore)* other, const(BLRange)* range, const(BLPoint)* p); 1645 version(BindBlend2D_Static) BLResult blPathAddTransformedPath(BLPathCore* self, const(BLPathCore)* other, const(BLRange)* range, const(BLMatrix2D)* m); 1646 version(BindBlend2D_Static) BLResult blPathAddReversedPath(BLPathCore* self, const(BLPathCore)* other, const(BLRange)* range, BLPathReverseMode reverseMode); 1647 version(BindBlend2D_Static) BLResult blPathAddStrokedPath(BLPathCore* self, const(BLPathCore)* other, const(BLRange)* range, const(BLStrokeOptionsCore)* options, const(BLApproximationOptions)* approx); 1648 version(BindBlend2D_Static) BLResult blPathRemoveRange(BLPathCore* self, const(BLRange)* range); 1649 version(BindBlend2D_Static) BLResult blPathTranslate(BLPathCore* self, const(BLRange)* range, const(BLPoint)* p); 1650 version(BindBlend2D_Static) BLResult blPathTransform(BLPathCore* self, const(BLRange)* range, const(BLMatrix2D)* m); 1651 version(BindBlend2D_Static) BLResult blPathFitTo(BLPathCore* self, const(BLRange)* range, const(BLRect)* rect, uint fitFlags); 1652 version(BindBlend2D_Static) bool blPathEquals(const(BLPathCore)* a, const(BLPathCore)* b); 1653 version(BindBlend2D_Static) BLResult blPathGetInfoFlags(const(BLPathCore)* self, uint* flagsOut); 1654 version(BindBlend2D_Static) BLResult blPathGetControlBox(const(BLPathCore)* self, BLBox* boxOut); 1655 version(BindBlend2D_Static) BLResult blPathGetBoundingBox(const(BLPathCore)* self, BLBox* boxOut); 1656 version(BindBlend2D_Static) BLResult blPathGetFigureRange(const(BLPathCore)* self, size_t index, BLRange* rangeOut); 1657 version(BindBlend2D_Static) BLResult blPathGetLastVertex(const(BLPathCore)* self, BLPoint* vtxOut); 1658 version(BindBlend2D_Static) BLResult blPathGetClosestVertex(const(BLPathCore)* self, const(BLPoint)* p, double maxDistance, size_t* indexOut, double* distanceOut); 1659 version(BindBlend2D_Static) BLHitTest blPathHitTest(const(BLPathCore)* self, const(BLPoint)* p, BLFillRule fillRule); 1660 version(BindBlend2D_Static) BLResult blStrokeOptionsInit(BLStrokeOptionsCore* self); 1661 version(BindBlend2D_Static) BLResult blStrokeOptionsInitMove(BLStrokeOptionsCore* self, BLStrokeOptionsCore* other); 1662 version(BindBlend2D_Static) BLResult blStrokeOptionsInitWeak(BLStrokeOptionsCore* self, const(BLStrokeOptionsCore)* other); 1663 version(BindBlend2D_Static) BLResult blStrokeOptionsDestroy(BLStrokeOptionsCore* self); 1664 version(BindBlend2D_Static) BLResult blStrokeOptionsReset(BLStrokeOptionsCore* self); 1665 version(BindBlend2D_Static) BLResult blStrokeOptionsAssignMove(BLStrokeOptionsCore* self, BLStrokeOptionsCore* other); 1666 version(BindBlend2D_Static) BLResult blStrokeOptionsAssignWeak(BLStrokeOptionsCore* self, const(BLStrokeOptionsCore)* other); 1667 1668 struct BLPathCore 1669 { 1670 BLObjectDetail _d; 1671 } 1672 1673 struct BLStrokeOptionsCore 1674 { 1675 union 1676 { 1677 struct 1678 { 1679 ubyte startCap; 1680 ubyte endCap; 1681 ubyte join; 1682 ubyte transformOrder; 1683 ubyte[4] reserved; 1684 } 1685 1686 ubyte[2] caps; 1687 ulong hints; 1688 } 1689 1690 double width; 1691 double miterLimit; 1692 double dashOffset; 1693 BLArrayCore dashArray; 1694 } 1695 1696 struct BLPathImpl 1697 { 1698 union 1699 { 1700 struct 1701 { 1702 ubyte* commandData; 1703 BLPoint* vertexData; 1704 size_t size; 1705 } 1706 1707 BLPathView view; 1708 } 1709 1710 size_t capacity; 1711 uint flags; 1712 } 1713 1714 version(BindBlend2D_Static) BLResult blFontFaceInit(BLFontFaceCore* self); 1715 version(BindBlend2D_Static) BLResult blFontFaceInitMove(BLFontFaceCore* self, BLFontFaceCore* other); 1716 version(BindBlend2D_Static) BLResult blFontFaceInitWeak(BLFontFaceCore* self, const(BLFontFaceCore)* other); 1717 version(BindBlend2D_Static) BLResult blFontFaceDestroy(BLFontFaceCore* self); 1718 version(BindBlend2D_Static) BLResult blFontFaceReset(BLFontFaceCore* self); 1719 version(BindBlend2D_Static) BLResult blFontFaceAssignMove(BLFontFaceCore* self, BLFontFaceCore* other); 1720 version(BindBlend2D_Static) BLResult blFontFaceAssignWeak(BLFontFaceCore* self, const(BLFontFaceCore)* other); 1721 version(BindBlend2D_Static) bool blFontFaceEquals(const(BLFontFaceCore)* a, const(BLFontFaceCore)* b); 1722 version(BindBlend2D_Static) BLResult blFontFaceCreateFromFile(BLFontFaceCore* self, const(char)* fileName, BLFileReadFlags readFlags); 1723 version(BindBlend2D_Static) BLResult blFontFaceCreateFromData(BLFontFaceCore* self, const(BLFontDataCore)* fontData, uint faceIndex); 1724 version(BindBlend2D_Static) BLResult blFontFaceGetFaceInfo(const(BLFontFaceCore)* self, BLFontFaceInfo* out_); 1725 version(BindBlend2D_Static) BLResult blFontFaceGetScriptTags(const(BLFontFaceCore)* self, BLArrayCore* out_); 1726 version(BindBlend2D_Static) BLResult blFontFaceGetFeatureTags(const(BLFontFaceCore)* self, BLArrayCore* out_); 1727 version(BindBlend2D_Static) BLResult blFontFaceGetDesignMetrics(const(BLFontFaceCore)* self, BLFontDesignMetrics* out_); 1728 version(BindBlend2D_Static) BLResult blFontFaceGetUnicodeCoverage(const(BLFontFaceCore)* self, BLFontUnicodeCoverage* out_); 1729 version(BindBlend2D_Static) BLResult blFontFaceGetCharacterCoverage(const(BLFontFaceCore)* self, BLBitSetCore* out_); 1730 1731 struct BLFontFaceCore 1732 { 1733 BLObjectDetail _d; 1734 } 1735 1736 struct BLFontFaceVirt 1737 { 1738 BLObjectVirtBase base; 1739 } 1740 1741 struct BLFontFaceImpl 1742 { 1743 const(BLFontFaceVirt)* virt; 1744 ushort weight; 1745 ubyte stretch; 1746 ubyte style; 1747 BLFontFaceInfo faceInfo; 1748 BLUniqueId uniqueId; 1749 BLFontDataCore data; 1750 BLStringCore fullName; 1751 BLStringCore familyName; 1752 BLStringCore subfamilyName; 1753 BLStringCore postScriptName; 1754 BLArrayCore scriptTags; 1755 BLArrayCore featureTags; 1756 BLFontDesignMetrics designMetrics; 1757 BLFontUnicodeCoverage unicodeCoverage; 1758 BLFontPanose panose; 1759 } 1760 1761 extern __gshared const uint BL_FONT_FEATURE_INVALID_VALUE; 1762 1763 struct BLFontFeatureSettingsView 1764 { 1765 const(BLFontFeatureItem)* data; 1766 size_t size; 1767 BLFontFeatureItem[12] ssoData; 1768 } 1769 1770 version(BindBlend2D_Static) BLResult blFontFeatureSettingsInit(BLFontFeatureSettingsCore* self); 1771 version(BindBlend2D_Static) BLResult blFontFeatureSettingsInitMove(BLFontFeatureSettingsCore* self, BLFontFeatureSettingsCore* other); 1772 version(BindBlend2D_Static) BLResult blFontFeatureSettingsInitWeak(BLFontFeatureSettingsCore* self, const(BLFontFeatureSettingsCore)* other); 1773 version(BindBlend2D_Static) BLResult blFontFeatureSettingsDestroy(BLFontFeatureSettingsCore* self); 1774 version(BindBlend2D_Static) BLResult blFontFeatureSettingsReset(BLFontFeatureSettingsCore* self); 1775 version(BindBlend2D_Static) BLResult blFontFeatureSettingsClear(BLFontFeatureSettingsCore* self); 1776 version(BindBlend2D_Static) BLResult blFontFeatureSettingsShrink(BLFontFeatureSettingsCore* self); 1777 version(BindBlend2D_Static) BLResult blFontFeatureSettingsAssignMove(BLFontFeatureSettingsCore* self, BLFontFeatureSettingsCore* other); 1778 version(BindBlend2D_Static) BLResult blFontFeatureSettingsAssignWeak(BLFontFeatureSettingsCore* self, const(BLFontFeatureSettingsCore)* other); 1779 version(BindBlend2D_Static) size_t blFontFeatureSettingsGetSize(const(BLFontFeatureSettingsCore)* self); 1780 version(BindBlend2D_Static) size_t blFontFeatureSettingsGetCapacity(const(BLFontFeatureSettingsCore)* self); 1781 version(BindBlend2D_Static) BLResult blFontFeatureSettingsGetView(const(BLFontFeatureSettingsCore)* self, BLFontFeatureSettingsView* out_); 1782 version(BindBlend2D_Static) bool blFontFeatureSettingsHasKey(const(BLFontFeatureSettingsCore)* self, BLTag key); 1783 version(BindBlend2D_Static) uint blFontFeatureSettingsGetKey(const(BLFontFeatureSettingsCore)* self, BLTag key); 1784 version(BindBlend2D_Static) BLResult blFontFeatureSettingsSetKey(BLFontFeatureSettingsCore* self, BLTag key, uint value); 1785 version(BindBlend2D_Static) BLResult blFontFeatureSettingsRemoveKey(BLFontFeatureSettingsCore* self, BLTag key); 1786 version(BindBlend2D_Static) bool blFontFeatureSettingsEquals(const(BLFontFeatureSettingsCore)* a, const(BLFontFeatureSettingsCore)* b); 1787 1788 struct BLFontFeatureSettingsCore 1789 { 1790 BLObjectDetail _d; 1791 } 1792 1793 struct BLFontFeatureSettingsImpl 1794 { 1795 BLFontFeatureItem* data; 1796 size_t size; 1797 size_t capacity; 1798 } 1799 1800 struct BLFontVariationSettingsView 1801 { 1802 const(BLFontVariationItem)* data; 1803 size_t size; 1804 BLFontVariationItem[3] ssoData; 1805 } 1806 1807 version(BindBlend2D_Static) BLResult blFontVariationSettingsInit(BLFontVariationSettingsCore* self); 1808 version(BindBlend2D_Static) BLResult blFontVariationSettingsInitMove(BLFontVariationSettingsCore* self, BLFontVariationSettingsCore* other); 1809 version(BindBlend2D_Static) BLResult blFontVariationSettingsInitWeak(BLFontVariationSettingsCore* self, const(BLFontVariationSettingsCore)* other); 1810 version(BindBlend2D_Static) BLResult blFontVariationSettingsDestroy(BLFontVariationSettingsCore* self); 1811 version(BindBlend2D_Static) BLResult blFontVariationSettingsReset(BLFontVariationSettingsCore* self); 1812 version(BindBlend2D_Static) BLResult blFontVariationSettingsClear(BLFontVariationSettingsCore* self); 1813 version(BindBlend2D_Static) BLResult blFontVariationSettingsShrink(BLFontVariationSettingsCore* self); 1814 version(BindBlend2D_Static) BLResult blFontVariationSettingsAssignMove(BLFontVariationSettingsCore* self, BLFontVariationSettingsCore* other); 1815 version(BindBlend2D_Static) BLResult blFontVariationSettingsAssignWeak(BLFontVariationSettingsCore* self, const(BLFontVariationSettingsCore)* other); 1816 version(BindBlend2D_Static) size_t blFontVariationSettingsGetSize(const(BLFontVariationSettingsCore)* self); 1817 version(BindBlend2D_Static) size_t blFontVariationSettingsGetCapacity(const(BLFontVariationSettingsCore)* self); 1818 version(BindBlend2D_Static) BLResult blFontVariationSettingsGetView(const(BLFontVariationSettingsCore)* self, BLFontVariationSettingsView* out_); 1819 version(BindBlend2D_Static) bool blFontVariationSettingsHasKey(const(BLFontVariationSettingsCore)* self, BLTag key); 1820 version(BindBlend2D_Static) float blFontVariationSettingsGetKey(const(BLFontVariationSettingsCore)* self, BLTag key); 1821 version(BindBlend2D_Static) BLResult blFontVariationSettingsSetKey(BLFontVariationSettingsCore* self, BLTag key, float value); 1822 version(BindBlend2D_Static) BLResult blFontVariationSettingsRemoveKey(BLFontVariationSettingsCore* self, BLTag key); 1823 version(BindBlend2D_Static) bool blFontVariationSettingsEquals(const(BLFontVariationSettingsCore)* a, const(BLFontVariationSettingsCore)* b); 1824 1825 struct BLFontVariationSettingsCore 1826 { 1827 BLObjectDetail _d; 1828 } 1829 1830 struct BLFontVariationSettingsImpl 1831 { 1832 BLFontVariationItem* data; 1833 size_t size; 1834 size_t capacity; 1835 } 1836 1837 version(BindBlend2D_Static) BLResult blFontInit(BLFontCore* self); 1838 version(BindBlend2D_Static) BLResult blFontInitMove(BLFontCore* self, BLFontCore* other); 1839 version(BindBlend2D_Static) BLResult blFontInitWeak(BLFontCore* self, const(BLFontCore)* other); 1840 version(BindBlend2D_Static) BLResult blFontDestroy(BLFontCore* self); 1841 version(BindBlend2D_Static) BLResult blFontReset(BLFontCore* self); 1842 version(BindBlend2D_Static) BLResult blFontAssignMove(BLFontCore* self, BLFontCore* other); 1843 version(BindBlend2D_Static) BLResult blFontAssignWeak(BLFontCore* self, const(BLFontCore)* other); 1844 version(BindBlend2D_Static) bool blFontEquals(const(BLFontCore)* a, const(BLFontCore)* b); 1845 version(BindBlend2D_Static) BLResult blFontCreateFromFace(BLFontCore* self, const(BLFontFaceCore)* face, float size); 1846 version(BindBlend2D_Static) float blFontGetSize(const(BLFontCore)* self); 1847 version(BindBlend2D_Static) BLResult blFontSetSize(BLFontCore* self, float size); 1848 version(BindBlend2D_Static) BLResult blFontGetMetrics(const(BLFontCore)* self, BLFontMetrics* out_); 1849 version(BindBlend2D_Static) BLResult blFontGetMatrix(const(BLFontCore)* self, BLFontMatrix* out_); 1850 version(BindBlend2D_Static) BLResult blFontGetDesignMetrics(const(BLFontCore)* self, BLFontDesignMetrics* out_); 1851 version(BindBlend2D_Static) BLResult blFontGetFeatureSettings(const(BLFontCore)* self, BLFontFeatureSettingsCore* out_); 1852 version(BindBlend2D_Static) BLResult blFontSetFeatureSettings(BLFontCore* self, const(BLFontFeatureSettingsCore)* featureSettings); 1853 version(BindBlend2D_Static) BLResult blFontResetFeatureSettings(BLFontCore* self); 1854 version(BindBlend2D_Static) BLResult blFontShape(const(BLFontCore)* self, BLGlyphBufferCore* gb); 1855 version(BindBlend2D_Static) BLResult blFontMapTextToGlyphs(const(BLFontCore)* self, BLGlyphBufferCore* gb, BLGlyphMappingState* stateOut); 1856 version(BindBlend2D_Static) BLResult blFontPositionGlyphs(const(BLFontCore)* self, BLGlyphBufferCore* gb, uint positioningFlags); 1857 version(BindBlend2D_Static) BLResult blFontApplyKerning(const(BLFontCore)* self, BLGlyphBufferCore* gb); 1858 version(BindBlend2D_Static) BLResult blFontApplyGSub(const(BLFontCore)* self, BLGlyphBufferCore* gb, const(BLBitSetCore)* lookups); 1859 version(BindBlend2D_Static) BLResult blFontApplyGPos(const(BLFontCore)* self, BLGlyphBufferCore* gb, const(BLBitSetCore)* lookups); 1860 version(BindBlend2D_Static) BLResult blFontGetTextMetrics(const(BLFontCore)* self, BLGlyphBufferCore* gb, BLTextMetrics* out_); 1861 version(BindBlend2D_Static) BLResult blFontGetGlyphBounds(const(BLFontCore)* self, const(uint)* glyphData, intptr_t glyphAdvance, BLBoxI* out_, size_t count); 1862 version(BindBlend2D_Static) BLResult blFontGetGlyphAdvances(const(BLFontCore)* self, const(uint)* glyphData, intptr_t glyphAdvance, BLGlyphPlacement* out_, size_t count); 1863 version(BindBlend2D_Static) BLResult blFontGetGlyphOutlines(const(BLFontCore)* self, uint glyphId, const(BLMatrix2D)* userMatrix, BLPathCore* out_, BLPathSinkFunc sink, void* closure); 1864 version(BindBlend2D_Static) BLResult blFontGetGlyphRunOutlines(const(BLFontCore)* self, const(BLGlyphRun)* glyphRun, const(BLMatrix2D)* userMatrix, BLPathCore* out_, BLPathSinkFunc sink, void* closure); 1865 1866 struct BLFontCore 1867 { 1868 BLObjectDetail _d; 1869 } 1870 1871 struct BLFontImpl 1872 { 1873 BLFontFaceCore face; 1874 ushort weight; 1875 ubyte stretch; 1876 ubyte style; 1877 uint reserved; 1878 BLFontMetrics metrics; 1879 BLFontMatrix matrix; 1880 BLFontFeatureSettingsCore featureSettings; 1881 BLFontVariationSettingsCore variationSettings; 1882 } 1883 1884 enum BLFormat 1885 { 1886 BL_FORMAT_NONE = 0, 1887 BL_FORMAT_PRGB32 = 1, 1888 BL_FORMAT_XRGB32 = 2, 1889 BL_FORMAT_A8 = 3, 1890 BL_FORMAT_MAX_VALUE = 3, 1891 BL_FORMAT_RESERVED_COUNT = 16, 1892 BL_FORMAT_FORCE_UINT = 0xFFFFFFFFu 1893 } 1894 1895 enum BLFormatFlags 1896 { 1897 BL_FORMAT_NO_FLAGS = 0u, 1898 BL_FORMAT_FLAG_RGB = 0x00000001u, 1899 BL_FORMAT_FLAG_ALPHA = 0x00000002u, 1900 BL_FORMAT_FLAG_RGBA = 0x00000003u, 1901 BL_FORMAT_FLAG_LUM = 0x00000004u, 1902 BL_FORMAT_FLAG_LUMA = 0x00000006u, 1903 BL_FORMAT_FLAG_INDEXED = 0x00000010u, 1904 BL_FORMAT_FLAG_PREMULTIPLIED = 0x00000100u, 1905 BL_FORMAT_FLAG_BYTE_SWAP = 0x00000200u, 1906 BL_FORMAT_FLAG_BYTE_ALIGNED = 0x00010000u, 1907 BL_FORMAT_FLAG_UNDEFINED_BITS = 0x00020000u, 1908 BL_FORMAT_FLAG_LE = (1234 == 1234) ? cast(uint) 0 : cast(uint) BL_FORMAT_FLAG_BYTE_SWAP, 1909 BL_FORMAT_FLAG_BE = (1234 == 4321) ? cast(uint) 0 : cast(uint) BL_FORMAT_FLAG_BYTE_SWAP, 1910 BL_FORMAT_FLAG_FORCE_UINT = 0xFFFFFFFFu 1911 } 1912 1913 version(BindBlend2D_Static) BLResult blFormatInfoQuery(BLFormatInfo* self, BLFormat format); 1914 version(BindBlend2D_Static) BLResult blFormatInfoSanitize(BLFormatInfo* self); 1915 1916 struct BLFormatInfo 1917 { 1918 uint depth; 1919 uint flags; 1920 1921 union 1922 { 1923 struct 1924 { 1925 ubyte[4] sizes; 1926 ubyte[4] shifts; 1927 } 1928 1929 struct 1930 { 1931 ubyte rSize; 1932 ubyte gSize; 1933 ubyte bSize; 1934 ubyte aSize; 1935 ubyte rShift; 1936 ubyte gShift; 1937 ubyte bShift; 1938 ubyte aShift; 1939 } 1940 1941 BLRgba32* palette; 1942 } 1943 } 1944 1945 extern __gshared const(BLFormatInfo)[BL_FORMAT_RESERVED_COUNT] blFormatInfo; 1946 1947 enum BLImageCodecFeatures 1948 { 1949 BL_IMAGE_CODEC_NO_FEATURES = 0u, 1950 BL_IMAGE_CODEC_FEATURE_READ = 0x00000001u, 1951 BL_IMAGE_CODEC_FEATURE_WRITE = 0x00000002u, 1952 BL_IMAGE_CODEC_FEATURE_LOSSLESS = 0x00000004u, 1953 BL_IMAGE_CODEC_FEATURE_LOSSY = 0x00000008u, 1954 BL_IMAGE_CODEC_FEATURE_MULTI_FRAME = 0x00000010u, 1955 BL_IMAGE_CODEC_FEATURE_IPTC = 0x10000000u, 1956 BL_IMAGE_CODEC_FEATURE_EXIF = 0x20000000u, 1957 BL_IMAGE_CODEC_FEATURE_XMP = 0x40000000u, 1958 BL_IMAGE_CODEC_FEATURE_FORCE_UINT = 0xFFFFFFFFu 1959 } 1960 1961 version(BindBlend2D_Static) BLResult blImageCodecInit(BLImageCodecCore* self); 1962 version(BindBlend2D_Static) BLResult blImageCodecInitMove(BLImageCodecCore* self, BLImageCodecCore* other); 1963 version(BindBlend2D_Static) BLResult blImageCodecInitWeak(BLImageCodecCore* self, const(BLImageCodecCore)* other); 1964 version(BindBlend2D_Static) BLResult blImageCodecInitByName(BLImageCodecCore* self, const(char)* name, size_t size, const(BLArrayCore)* codecs); 1965 version(BindBlend2D_Static) BLResult blImageCodecDestroy(BLImageCodecCore* self); 1966 version(BindBlend2D_Static) BLResult blImageCodecReset(BLImageCodecCore* self); 1967 version(BindBlend2D_Static) BLResult blImageCodecAssignMove(BLImageCodecCore* self, BLImageCodecCore* other); 1968 version(BindBlend2D_Static) BLResult blImageCodecAssignWeak(BLImageCodecCore* self, const(BLImageCodecCore)* other); 1969 version(BindBlend2D_Static) BLResult blImageCodecFindByName(BLImageCodecCore* self, const(char)* name, size_t size, const(BLArrayCore)* codecs); 1970 version(BindBlend2D_Static) BLResult blImageCodecFindByExtension(BLImageCodecCore* self, const(char)* name, size_t size, const(BLArrayCore)* codecs); 1971 version(BindBlend2D_Static) BLResult blImageCodecFindByData(BLImageCodecCore* self, const(void)* data, size_t size, const(BLArrayCore)* codecs); 1972 version(BindBlend2D_Static) uint blImageCodecInspectData(const(BLImageCodecCore)* self, const(void)* data, size_t size); 1973 version(BindBlend2D_Static) BLResult blImageCodecCreateDecoder(const(BLImageCodecCore)* self, BLImageDecoderCore* dst); 1974 version(BindBlend2D_Static) BLResult blImageCodecCreateEncoder(const(BLImageCodecCore)* self, BLImageEncoderCore* dst); 1975 version(BindBlend2D_Static) BLResult blImageCodecArrayInitBuiltInCodecs(BLArrayCore* self); 1976 version(BindBlend2D_Static) BLResult blImageCodecArrayAssignBuiltInCodecs(BLArrayCore* self); 1977 version(BindBlend2D_Static) BLResult blImageCodecAddToBuiltIn(const(BLImageCodecCore)* codec); 1978 version(BindBlend2D_Static) BLResult blImageCodecRemoveFromBuiltIn(const(BLImageCodecCore)* codec); 1979 1980 struct BLImageCodecCore 1981 { 1982 BLObjectDetail _d; 1983 } 1984 1985 struct BLImageCodecVirt 1986 { 1987 BLObjectVirtBase base; 1988 uint function(const(BLImageCodecImpl)* impl, const(ubyte)* data, size_t size) inspectData; 1989 BLResult function(const(BLImageCodecImpl)* impl, BLImageDecoderCore* dst) createDecoder; 1990 BLResult function(const(BLImageCodecImpl)* impl, BLImageEncoderCore* dst) createEncoder; 1991 } 1992 1993 struct BLImageCodecImpl 1994 { 1995 const(BLImageCodecVirt)* virt; 1996 BLStringCore name; 1997 BLStringCore vendor; 1998 BLStringCore mimeType; 1999 BLStringCore extensions; 2000 uint features; 2001 } 2002 2003 enum BLImageInfoFlags 2004 { 2005 BL_IMAGE_INFO_FLAG_NO_FLAGS = 0u, 2006 BL_IMAGE_INFO_FLAG_PROGRESSIVE = 0x00000001u, 2007 BL_IMAGE_INFO_FLAG_FORCE_UINT = 0xFFFFFFFFu 2008 } 2009 2010 enum BLImageScaleFilter 2011 { 2012 BL_IMAGE_SCALE_FILTER_NONE = 0, 2013 BL_IMAGE_SCALE_FILTER_NEAREST = 1, 2014 BL_IMAGE_SCALE_FILTER_BILINEAR = 2, 2015 BL_IMAGE_SCALE_FILTER_BICUBIC = 3, 2016 BL_IMAGE_SCALE_FILTER_BELL = 4, 2017 BL_IMAGE_SCALE_FILTER_GAUSS = 5, 2018 BL_IMAGE_SCALE_FILTER_HERMITE = 6, 2019 BL_IMAGE_SCALE_FILTER_HANNING = 7, 2020 BL_IMAGE_SCALE_FILTER_CATROM = 8, 2021 BL_IMAGE_SCALE_FILTER_BESSEL = 9, 2022 BL_IMAGE_SCALE_FILTER_SINC = 10, 2023 BL_IMAGE_SCALE_FILTER_LANCZOS = 11, 2024 BL_IMAGE_SCALE_FILTER_BLACKMAN = 12, 2025 BL_IMAGE_SCALE_FILTER_MITCHELL = 13, 2026 BL_IMAGE_SCALE_FILTER_USER = 14, 2027 BL_IMAGE_SCALE_FILTER_MAX_VALUE = 14, 2028 BL_IMAGE_SCALE_FILTER_FORCE_UINT = 0xFFFFFFFFu 2029 } 2030 2031 alias BLImageScaleUserFunc = uint function(double* dst, const(double)* tArray, size_t n, const(void)* data); 2032 2033 struct BLImageData 2034 { 2035 void* pixelData; 2036 intptr_t stride; 2037 BLSizeI size; 2038 uint format; 2039 uint flags; 2040 } 2041 2042 struct BLImageInfo 2043 { 2044 BLSizeI size; 2045 BLSize density; 2046 uint flags; 2047 ushort depth; 2048 ushort planeCount; 2049 ulong frameCount; 2050 char[16] format; 2051 char[16] compression; 2052 } 2053 2054 struct BLImageScaleOptions 2055 { 2056 BLImageScaleUserFunc userFunc; 2057 void* userData; 2058 double radius; 2059 2060 union 2061 { 2062 double[3] data; 2063 2064 struct _Anonymous_4 2065 { 2066 double b; 2067 double c; 2068 } 2069 2070 _Anonymous_4 mitchell; 2071 } 2072 } 2073 2074 version(BindBlend2D_Static) BLResult blImageInit(BLImageCore* self); 2075 version(BindBlend2D_Static) BLResult blImageInitMove(BLImageCore* self, BLImageCore* other); 2076 version(BindBlend2D_Static) BLResult blImageInitWeak(BLImageCore* self, const(BLImageCore)* other); 2077 version(BindBlend2D_Static) BLResult blImageInitAs(BLImageCore* self, int w, int h, BLFormat format); 2078 version(BindBlend2D_Static) BLResult blImageInitAsFromData(BLImageCore* self, int w, int h, BLFormat format, void* pixelData, intptr_t stride, BLDestroyExternalDataFunc destroyFunc, void* userData); 2079 version(BindBlend2D_Static) BLResult blImageDestroy(BLImageCore* self); 2080 version(BindBlend2D_Static) BLResult blImageReset(BLImageCore* self); 2081 version(BindBlend2D_Static) BLResult blImageAssignMove(BLImageCore* self, BLImageCore* other); 2082 version(BindBlend2D_Static) BLResult blImageAssignWeak(BLImageCore* self, const(BLImageCore)* other); 2083 version(BindBlend2D_Static) BLResult blImageAssignDeep(BLImageCore* self, const(BLImageCore)* other); 2084 version(BindBlend2D_Static) BLResult blImageCreate(BLImageCore* self, int w, int h, BLFormat format); 2085 version(BindBlend2D_Static) BLResult blImageCreateFromData(BLImageCore* self, int w, int h, BLFormat format, void* pixelData, intptr_t stride, BLDestroyExternalDataFunc destroyFunc, void* userData); 2086 version(BindBlend2D_Static) BLResult blImageGetData(const(BLImageCore)* self, BLImageData* dataOut); 2087 version(BindBlend2D_Static) BLResult blImageMakeMutable(BLImageCore* self, BLImageData* dataOut); 2088 version(BindBlend2D_Static) BLResult blImageConvert(BLImageCore* self, BLFormat format); 2089 version(BindBlend2D_Static) bool blImageEquals(const(BLImageCore)* a, const(BLImageCore)* b); 2090 version(BindBlend2D_Static) BLResult blImageScale(BLImageCore* dst, const(BLImageCore)* src, const(BLSizeI)* size, uint filter, const(BLImageScaleOptions)* options); 2091 version(BindBlend2D_Static) BLResult blImageReadFromFile(BLImageCore* self, const(char)* fileName, const(BLArrayCore)* codecs); 2092 version(BindBlend2D_Static) BLResult blImageReadFromData(BLImageCore* self, const(void)* data, size_t size, const(BLArrayCore)* codecs); 2093 version(BindBlend2D_Static) BLResult blImageWriteToFile(const(BLImageCore)* self, const(char)* fileName, const(BLImageCodecCore)* codec); 2094 version(BindBlend2D_Static) BLResult blImageWriteToData(const(BLImageCore)* self, BLArrayCore* dst, const(BLImageCodecCore)* codec); 2095 2096 struct BLImageCore 2097 { 2098 BLObjectDetail _d; 2099 } 2100 2101 struct BLImageImpl 2102 { 2103 void* pixelData; 2104 intptr_t stride; 2105 BLSizeI size; 2106 ubyte format; 2107 ubyte flags; 2108 ushort depth; 2109 ubyte[4] reserved; 2110 } 2111 2112 alias BLMapPointDArrayFunc = uint function(const(void)* ctx, BLPoint* dst, const(BLPoint)* src, size_t count); 2113 2114 enum BLMatrix2DType 2115 { 2116 BL_MATRIX2D_TYPE_IDENTITY = 0, 2117 BL_MATRIX2D_TYPE_TRANSLATE = 1, 2118 BL_MATRIX2D_TYPE_SCALE = 2, 2119 BL_MATRIX2D_TYPE_SWAP = 3, 2120 BL_MATRIX2D_TYPE_AFFINE = 4, 2121 BL_MATRIX2D_TYPE_INVALID = 5, 2122 BL_MATRIX2D_TYPE_MAX_VALUE = 5, 2123 BL_MATRIX2D_TYPE_FORCE_UINT = 0xFFFFFFFFu 2124 } 2125 2126 enum BLMatrix2DValue 2127 { 2128 BL_MATRIX2D_VALUE_00 = 0, 2129 BL_MATRIX2D_VALUE_01 = 1, 2130 BL_MATRIX2D_VALUE_10 = 2, 2131 BL_MATRIX2D_VALUE_11 = 3, 2132 BL_MATRIX2D_VALUE_20 = 4, 2133 BL_MATRIX2D_VALUE_21 = 5, 2134 BL_MATRIX2D_VALUE_MAX_VALUE = 5, 2135 BL_MATRIX2D_VALUE_FORCE_UINT = 0xFFFFFFFFu 2136 } 2137 2138 enum BLMatrix2DOp 2139 { 2140 BL_MATRIX2D_OP_RESET = 0, 2141 BL_MATRIX2D_OP_ASSIGN = 1, 2142 BL_MATRIX2D_OP_TRANSLATE = 2, 2143 BL_MATRIX2D_OP_SCALE = 3, 2144 BL_MATRIX2D_OP_SKEW = 4, 2145 BL_MATRIX2D_OP_ROTATE = 5, 2146 BL_MATRIX2D_OP_ROTATE_PT = 6, 2147 BL_MATRIX2D_OP_TRANSFORM = 7, 2148 BL_MATRIX2D_OP_POST_TRANSLATE = 8, 2149 BL_MATRIX2D_OP_POST_SCALE = 9, 2150 BL_MATRIX2D_OP_POST_SKEW = 10, 2151 BL_MATRIX2D_OP_POST_ROTATE = 11, 2152 BL_MATRIX2D_OP_POST_ROTATE_PT = 12, 2153 BL_MATRIX2D_OP_POST_TRANSFORM = 13, 2154 BL_MATRIX2D_OP_MAX_VALUE = 13, 2155 BL_MATRIX2D_OP_FORCE_UINT = 0xFFFFFFFFu 2156 } 2157 2158 version(BindBlend2D_Static) BLResult blMatrix2DSetIdentity(BLMatrix2D* self); 2159 version(BindBlend2D_Static) BLResult blMatrix2DSetTranslation(BLMatrix2D* self, double x, double y); 2160 version(BindBlend2D_Static) BLResult blMatrix2DSetScaling(BLMatrix2D* self, double x, double y); 2161 version(BindBlend2D_Static) BLResult blMatrix2DSetSkewing(BLMatrix2D* self, double x, double y); 2162 version(BindBlend2D_Static) BLResult blMatrix2DSetRotation(BLMatrix2D* self, double angle, double cx, double cy); 2163 version(BindBlend2D_Static) BLResult blMatrix2DApplyOp(BLMatrix2D* self, BLMatrix2DOp opType, const(void)* opData); 2164 version(BindBlend2D_Static) BLResult blMatrix2DInvert(BLMatrix2D* dst, const(BLMatrix2D)* src); 2165 version(BindBlend2D_Static) BLMatrix2DType blMatrix2DGetType(const(BLMatrix2D)* self); 2166 version(BindBlend2D_Static) BLResult blMatrix2DMapPointDArray(const(BLMatrix2D)* self, BLPoint* dst, const(BLPoint)* src, size_t count); 2167 extern __gshared BLMapPointDArrayFunc[6] blMatrix2DMapPointDArrayFuncs; 2168 2169 struct BLMatrix2D 2170 { 2171 union 2172 { 2173 double[6] m; 2174 2175 struct 2176 { 2177 double m00; 2178 double m01; 2179 double m10; 2180 double m11; 2181 double m20; 2182 double m21; 2183 } 2184 } 2185 } 2186 2187 struct BLRgba32 2188 { 2189 uint value; 2190 } 2191 2192 struct BLRgba64 2193 { 2194 ulong value; 2195 } 2196 2197 struct BLRgba 2198 { 2199 float r; 2200 float g; 2201 float b; 2202 float a; 2203 } 2204 2205 struct BLVarCore 2206 { 2207 BLObjectDetail _d; 2208 } 2209 2210 version(BindBlend2D_Static) BLResult blVarInitType(BLUnknown* self, BLObjectType type); 2211 version(BindBlend2D_Static) BLResult blVarInitNull(BLUnknown* self); 2212 version(BindBlend2D_Static) BLResult blVarInitBool(BLUnknown* self, bool value); 2213 version(BindBlend2D_Static) BLResult blVarInitInt32(BLUnknown* self, int value); 2214 version(BindBlend2D_Static) BLResult blVarInitInt64(BLUnknown* self, long value); 2215 version(BindBlend2D_Static) BLResult blVarInitUInt32(BLUnknown* self, uint value); 2216 version(BindBlend2D_Static) BLResult blVarInitUInt64(BLUnknown* self, ulong value); 2217 version(BindBlend2D_Static) BLResult blVarInitDouble(BLUnknown* self, double value); 2218 version(BindBlend2D_Static) BLResult blVarInitRgba(BLUnknown* self, const(BLRgba)* rgba); 2219 version(BindBlend2D_Static) BLResult blVarInitRgba32(BLUnknown* self, uint rgba32); 2220 version(BindBlend2D_Static) BLResult blVarInitRgba64(BLUnknown* self, ulong rgba64); 2221 version(BindBlend2D_Static) BLResult blVarInitMove(BLUnknown* self, BLUnknown* other); 2222 version(BindBlend2D_Static) BLResult blVarInitWeak(BLUnknown* self, const(BLUnknown)* other); 2223 version(BindBlend2D_Static) BLResult blVarDestroy(BLUnknown* self); 2224 version(BindBlend2D_Static) BLResult blVarReset(BLUnknown* self); 2225 version(BindBlend2D_Static) BLResult blVarAssignNull(BLUnknown* self); 2226 version(BindBlend2D_Static) BLResult blVarAssignBool(BLUnknown* self, bool value); 2227 version(BindBlend2D_Static) BLResult blVarAssignInt32(BLUnknown* self, int value); 2228 version(BindBlend2D_Static) BLResult blVarAssignInt64(BLUnknown* self, long value); 2229 version(BindBlend2D_Static) BLResult blVarAssignUInt32(BLUnknown* self, uint value); 2230 version(BindBlend2D_Static) BLResult blVarAssignUInt64(BLUnknown* self, ulong value); 2231 version(BindBlend2D_Static) BLResult blVarAssignDouble(BLUnknown* self, double value); 2232 version(BindBlend2D_Static) BLResult blVarAssignRgba(BLUnknown* self, const(BLRgba)* rgba); 2233 version(BindBlend2D_Static) BLResult blVarAssignRgba32(BLUnknown* self, uint rgba32); 2234 version(BindBlend2D_Static) BLResult blVarAssignRgba64(BLUnknown* self, ulong rgba64); 2235 version(BindBlend2D_Static) BLResult blVarAssignMove(BLUnknown* self, BLUnknown* other); 2236 version(BindBlend2D_Static) BLResult blVarAssignWeak(BLUnknown* self, const(BLUnknown)* other); 2237 version(BindBlend2D_Static) BLObjectType blVarGetType(const(BLUnknown)* self); 2238 version(BindBlend2D_Static) BLResult blVarToBool(const(BLUnknown)* self, bool* out_); 2239 version(BindBlend2D_Static) BLResult blVarToInt32(const(BLUnknown)* self, int* out_); 2240 version(BindBlend2D_Static) BLResult blVarToInt64(const(BLUnknown)* self, long* out_); 2241 version(BindBlend2D_Static) BLResult blVarToUInt32(const(BLUnknown)* self, uint* out_); 2242 version(BindBlend2D_Static) BLResult blVarToUInt64(const(BLUnknown)* self, ulong* out_); 2243 version(BindBlend2D_Static) BLResult blVarToDouble(const(BLUnknown)* self, double* out_); 2244 version(BindBlend2D_Static) BLResult blVarToRgba(const(BLUnknown)* self, BLRgba* out_); 2245 version(BindBlend2D_Static) BLResult blVarToRgba32(const(BLUnknown)* self, uint* out_); 2246 version(BindBlend2D_Static) BLResult blVarToRgba64(const(BLUnknown)* self, ulong* out_); 2247 version(BindBlend2D_Static) bool blVarEquals(const(BLUnknown)* a, const(BLUnknown)* b); 2248 version(BindBlend2D_Static) bool blVarEqualsNull(const(BLUnknown)* self); 2249 version(BindBlend2D_Static) bool blVarEqualsBool(const(BLUnknown)* self, bool value); 2250 version(BindBlend2D_Static) bool blVarEqualsInt64(const(BLUnknown)* self, long value); 2251 version(BindBlend2D_Static) bool blVarEqualsUInt64(const(BLUnknown)* self, ulong value); 2252 version(BindBlend2D_Static) bool blVarEqualsDouble(const(BLUnknown)* self, double value); 2253 version(BindBlend2D_Static) bool blVarStrictEquals(const(BLUnknown)* a, const(BLUnknown)* b); 2254 2255 enum BLContextType 2256 { 2257 BL_CONTEXT_TYPE_NONE = 0, 2258 BL_CONTEXT_TYPE_DUMMY = 1, 2259 BL_CONTEXT_TYPE_RASTER = 3, 2260 BL_CONTEXT_TYPE_MAX_VALUE = 3, 2261 BL_CONTEXT_TYPE_FORCE_UINT = 0xFFFFFFFFu 2262 } 2263 2264 enum BLContextHint 2265 { 2266 BL_CONTEXT_HINT_RENDERING_QUALITY = 0, 2267 BL_CONTEXT_HINT_GRADIENT_QUALITY = 1, 2268 BL_CONTEXT_HINT_PATTERN_QUALITY = 2, 2269 BL_CONTEXT_HINT_MAX_VALUE = 7, 2270 BL_CONTEXT_HINT_FORCE_UINT = 0xFFFFFFFFu 2271 } 2272 2273 enum BLContextOpType 2274 { 2275 BL_CONTEXT_OP_TYPE_FILL = 0, 2276 BL_CONTEXT_OP_TYPE_STROKE = 1, 2277 BL_CONTEXT_OP_TYPE_MAX_VALUE = 1, 2278 BL_CONTEXT_OP_TYPE_FORCE_UINT = 0xFFFFFFFFu 2279 } 2280 2281 enum BLContextFlushFlags 2282 { 2283 BL_CONTEXT_FLUSH_NO_FLAGS = 0u, 2284 BL_CONTEXT_FLUSH_SYNC = 0x80000000u, 2285 BL_CONTEXT_FLUSH_FORCE_UINT = 0xFFFFFFFFu 2286 } 2287 2288 enum BLContextCreateFlags 2289 { 2290 BL_CONTEXT_CREATE_NO_FLAGS = 0u, 2291 BL_CONTEXT_CREATE_FLAG_DISABLE_JIT = 0x00000001u, 2292 BL_CONTEXT_CREATE_FLAG_FALLBACK_TO_SYNC = 0x00100000u, 2293 BL_CONTEXT_CREATE_FLAG_ISOLATED_THREAD_POOL = 0x01000000u, 2294 BL_CONTEXT_CREATE_FLAG_ISOLATED_JIT_RUNTIME = 0x02000000u, 2295 BL_CONTEXT_CREATE_FLAG_ISOLATED_JIT_LOGGING = 0x04000000u, 2296 BL_CONTEXT_CREATE_FLAG_OVERRIDE_CPU_FEATURES = 0x08000000u, 2297 BL_CONTEXT_CREATE_FLAG_FORCE_UINT = 0xFFFFFFFFu 2298 } 2299 2300 enum BLContextErrorFlags 2301 { 2302 BL_CONTEXT_ERROR_NO_FLAGS = 0u, 2303 BL_CONTEXT_ERROR_FLAG_INVALID_VALUE = 0x00000001u, 2304 BL_CONTEXT_ERROR_FLAG_INVALID_STATE = 0x00000002u, 2305 BL_CONTEXT_ERROR_FLAG_INVALID_GEOMETRY = 0x00000004u, 2306 BL_CONTEXT_ERROR_FLAG_INVALID_GLYPH = 0x00000008u, 2307 BL_CONTEXT_ERROR_FLAG_INVALID_FONT = 0x00000010u, 2308 BL_CONTEXT_ERROR_FLAG_THREAD_POOL_EXHAUSTED = 0x20000000u, 2309 BL_CONTEXT_ERROR_FLAG_OUT_OF_MEMORY = 0x40000000u, 2310 BL_CONTEXT_ERROR_FLAG_UNKNOWN_ERROR = 0x80000000u, 2311 BL_CONTEXT_ERROR_FLAG_FORCE_UINT = 0xFFFFFFFFu 2312 } 2313 2314 enum BLClipMode 2315 { 2316 BL_CLIP_MODE_ALIGNED_RECT = 0, 2317 BL_CLIP_MODE_UNALIGNED_RECT = 1, 2318 BL_CLIP_MODE_MASK = 2, 2319 BL_CLIP_MODE_COUNT = 3, 2320 BL_CLIP_MODE_FORCE_UINT = 0xFFFFFFFFu 2321 } 2322 2323 enum BLCompOp 2324 { 2325 BL_COMP_OP_SRC_OVER = 0, 2326 BL_COMP_OP_SRC_COPY = 1, 2327 BL_COMP_OP_SRC_IN = 2, 2328 BL_COMP_OP_SRC_OUT = 3, 2329 BL_COMP_OP_SRC_ATOP = 4, 2330 BL_COMP_OP_DST_OVER = 5, 2331 BL_COMP_OP_DST_COPY = 6, 2332 BL_COMP_OP_DST_IN = 7, 2333 BL_COMP_OP_DST_OUT = 8, 2334 BL_COMP_OP_DST_ATOP = 9, 2335 BL_COMP_OP_XOR = 10, 2336 BL_COMP_OP_CLEAR = 11, 2337 BL_COMP_OP_PLUS = 12, 2338 BL_COMP_OP_MINUS = 13, 2339 BL_COMP_OP_MODULATE = 14, 2340 BL_COMP_OP_MULTIPLY = 15, 2341 BL_COMP_OP_SCREEN = 16, 2342 BL_COMP_OP_OVERLAY = 17, 2343 BL_COMP_OP_DARKEN = 18, 2344 BL_COMP_OP_LIGHTEN = 19, 2345 BL_COMP_OP_COLOR_DODGE = 20, 2346 BL_COMP_OP_COLOR_BURN = 21, 2347 BL_COMP_OP_LINEAR_BURN = 22, 2348 BL_COMP_OP_LINEAR_LIGHT = 23, 2349 BL_COMP_OP_PIN_LIGHT = 24, 2350 BL_COMP_OP_HARD_LIGHT = 25, 2351 BL_COMP_OP_SOFT_LIGHT = 26, 2352 BL_COMP_OP_DIFFERENCE = 27, 2353 BL_COMP_OP_EXCLUSION = 28, 2354 BL_COMP_OP_MAX_VALUE = 28, 2355 BL_COMP_OP_FORCE_UINT = 0xFFFFFFFFu 2356 } 2357 2358 enum BLGradientQuality 2359 { 2360 BL_GRADIENT_QUALITY_NEAREST = 0, 2361 BL_GRADIENT_QUALITY_MAX_VALUE = 0, 2362 BL_GRADIENT_QUALITY_FORCE_UINT = 0xFFFFFFFFu 2363 } 2364 2365 enum BLPatternQuality 2366 { 2367 BL_PATTERN_QUALITY_NEAREST = 0, 2368 BL_PATTERN_QUALITY_BILINEAR = 1, 2369 BL_PATTERN_QUALITY_MAX_VALUE = 1, 2370 BL_PATTERN_QUALITY_FORCE_UINT = 0xFFFFFFFFu 2371 } 2372 2373 enum BLRenderingQuality 2374 { 2375 BL_RENDERING_QUALITY_ANTIALIAS = 0, 2376 BL_RENDERING_QUALITY_MAX_VALUE = 0, 2377 BL_RENDERING_QUALITY_FORCE_UINT = 0xFFFFFFFFu 2378 } 2379 2380 struct BLContextCreateInfo 2381 { 2382 uint flags; 2383 uint threadCount; 2384 uint cpuFeatures; 2385 uint commandQueueLimit; 2386 uint[4] reserved; 2387 } 2388 2389 struct BLContextCookie 2390 { 2391 ulong[2] data; 2392 } 2393 2394 struct BLContextHints 2395 { 2396 union 2397 { 2398 struct 2399 { 2400 ubyte renderingQuality; 2401 ubyte gradientQuality; 2402 ubyte patternQuality; 2403 } 2404 2405 ubyte[8] hints; 2406 } 2407 } 2408 2409 struct BLContextCore 2410 { 2411 BLObjectDetail _d; 2412 } 2413 2414 version(BindBlend2D_Static) BLResult blContextInit(BLContextCore* self); 2415 version(BindBlend2D_Static) BLResult blContextInitMove(BLContextCore* self, BLContextCore* other); 2416 version(BindBlend2D_Static) BLResult blContextInitWeak(BLContextCore* self, const(BLContextCore)* other); 2417 version(BindBlend2D_Static) BLResult blContextInitAs(BLContextCore* self, BLImageCore* image, const(BLContextCreateInfo)* cci); 2418 version(BindBlend2D_Static) BLResult blContextDestroy(BLContextCore* self); 2419 version(BindBlend2D_Static) BLResult blContextReset(BLContextCore* self); 2420 version(BindBlend2D_Static) BLResult blContextAssignMove(BLContextCore* self, BLContextCore* other); 2421 version(BindBlend2D_Static) BLResult blContextAssignWeak(BLContextCore* self, const(BLContextCore)* other); 2422 version(BindBlend2D_Static) BLContextType blContextGetType(const(BLContextCore)* self); 2423 version(BindBlend2D_Static) BLResult blContextGetTargetSize(const(BLContextCore)* self, BLSize* targetSizeOut); 2424 version(BindBlend2D_Static) BLImageCore* blContextGetTargetImage(const(BLContextCore)* self); 2425 version(BindBlend2D_Static) BLResult blContextBegin(BLContextCore* self, BLImageCore* image, const(BLContextCreateInfo)* cci); 2426 version(BindBlend2D_Static) BLResult blContextEnd(BLContextCore* self); 2427 version(BindBlend2D_Static) BLResult blContextFlush(BLContextCore* self, BLContextFlushFlags flags); 2428 version(BindBlend2D_Static) BLResult blContextSave(BLContextCore* self, BLContextCookie* cookie); 2429 version(BindBlend2D_Static) BLResult blContextRestore(BLContextCore* self, const(BLContextCookie)* cookie); 2430 version(BindBlend2D_Static) BLResult blContextGetMetaMatrix(const(BLContextCore)* self, BLMatrix2D* m); 2431 version(BindBlend2D_Static) BLResult blContextGetUserMatrix(const(BLContextCore)* self, BLMatrix2D* m); 2432 version(BindBlend2D_Static) BLResult blContextUserToMeta(BLContextCore* self); 2433 version(BindBlend2D_Static) BLResult blContextMatrixOp(BLContextCore* self, BLMatrix2DOp opType, const(void)* opData); 2434 version(BindBlend2D_Static) uint blContextGetHint(const(BLContextCore)* self, BLContextHint hintType); 2435 version(BindBlend2D_Static) BLResult blContextSetHint(BLContextCore* self, BLContextHint hintType, uint value); 2436 version(BindBlend2D_Static) BLResult blContextGetHints(const(BLContextCore)* self, BLContextHints* hintsOut); 2437 version(BindBlend2D_Static) BLResult blContextSetHints(BLContextCore* self, const(BLContextHints)* hints); 2438 version(BindBlend2D_Static) BLResult blContextSetFlattenMode(BLContextCore* self, BLFlattenMode mode); 2439 version(BindBlend2D_Static) BLResult blContextSetFlattenTolerance(BLContextCore* self, double tolerance); 2440 version(BindBlend2D_Static) BLResult blContextSetApproximationOptions(BLContextCore* self, const(BLApproximationOptions)* options); 2441 version(BindBlend2D_Static) BLCompOp blContextGetCompOp(const(BLContextCore)* self); 2442 version(BindBlend2D_Static) BLResult blContextSetCompOp(BLContextCore* self, BLCompOp compOp); 2443 version(BindBlend2D_Static) double blContextGetGlobalAlpha(const(BLContextCore)* self); 2444 version(BindBlend2D_Static) BLResult blContextSetGlobalAlpha(BLContextCore* self, double alpha); 2445 version(BindBlend2D_Static) double blContextGetFillAlpha(const(BLContextCore)* self); 2446 version(BindBlend2D_Static) BLResult blContextSetFillAlpha(BLContextCore* self, double alpha); 2447 version(BindBlend2D_Static) BLResult blContextGetFillStyle(const(BLContextCore)* self, BLVarCore* varOut); 2448 version(BindBlend2D_Static) BLResult blContextSetFillStyle(BLContextCore* self, const(BLUnknown)* var); 2449 version(BindBlend2D_Static) BLResult blContextSetFillStyleRgba(BLContextCore* self, const(BLRgba)* rgba); 2450 version(BindBlend2D_Static) BLResult blContextSetFillStyleRgba32(BLContextCore* self, uint rgba32); 2451 version(BindBlend2D_Static) BLResult blContextSetFillStyleRgba64(BLContextCore* self, ulong rgba64); 2452 version(BindBlend2D_Static) BLFillRule blContextGetFillRule(const(BLContextCore)* self); 2453 version(BindBlend2D_Static) BLResult blContextSetFillRule(BLContextCore* self, BLFillRule fillRule); 2454 version(BindBlend2D_Static) double blContextGetStrokeAlpha(const(BLContextCore)* self); 2455 version(BindBlend2D_Static) BLResult blContextSetStrokeAlpha(BLContextCore* self, double alpha); 2456 version(BindBlend2D_Static) BLResult blContextGetStrokeStyle(const(BLContextCore)* self, BLVarCore* varOut); 2457 version(BindBlend2D_Static) BLResult blContextSetStrokeStyle(BLContextCore* self, const(BLUnknown)* var); 2458 version(BindBlend2D_Static) BLResult blContextSetStrokeStyleRgba(BLContextCore* self, const(BLRgba)* rgba); 2459 version(BindBlend2D_Static) BLResult blContextSetStrokeStyleRgba32(BLContextCore* self, uint rgba32); 2460 version(BindBlend2D_Static) BLResult blContextSetStrokeStyleRgba64(BLContextCore* self, ulong rgba64); 2461 version(BindBlend2D_Static) double blContextGetStrokeWidth(const(BLContextCore)* self); 2462 version(BindBlend2D_Static) BLResult blContextSetStrokeWidth(BLContextCore* self, double width); 2463 version(BindBlend2D_Static) double blContextGetStrokeMiterLimit(const(BLContextCore)* self); 2464 version(BindBlend2D_Static) BLResult blContextSetStrokeMiterLimit(BLContextCore* self, double miterLimit); 2465 version(BindBlend2D_Static) BLStrokeCap blContextGetStrokeCap(const(BLContextCore)* self, BLStrokeCapPosition position); 2466 version(BindBlend2D_Static) BLResult blContextSetStrokeCap(BLContextCore* self, BLStrokeCapPosition position, BLStrokeCap strokeCap); 2467 version(BindBlend2D_Static) BLResult blContextSetStrokeCaps(BLContextCore* self, BLStrokeCap strokeCap); 2468 version(BindBlend2D_Static) BLStrokeJoin blContextGetStrokeJoin(const(BLContextCore)* self); 2469 version(BindBlend2D_Static) BLResult blContextSetStrokeJoin(BLContextCore* self, BLStrokeJoin strokeJoin); 2470 version(BindBlend2D_Static) BLStrokeTransformOrder blContextGetStrokeTransformOrder(const(BLContextCore)* self); 2471 version(BindBlend2D_Static) BLResult blContextSetStrokeTransformOrder(BLContextCore* self, BLStrokeTransformOrder transformOrder); 2472 version(BindBlend2D_Static) double blContextGetStrokeDashOffset(const(BLContextCore)* self); 2473 version(BindBlend2D_Static) BLResult blContextSetStrokeDashOffset(BLContextCore* self, double dashOffset); 2474 version(BindBlend2D_Static) BLResult blContextGetStrokeDashArray(const(BLContextCore)* self, BLArrayCore* dashArrayOut); 2475 version(BindBlend2D_Static) BLResult blContextSetStrokeDashArray(BLContextCore* self, const(BLArrayCore)* dashArray); 2476 version(BindBlend2D_Static) BLResult blContextGetStrokeOptions(const(BLContextCore)* self, BLStrokeOptionsCore* options); 2477 version(BindBlend2D_Static) BLResult blContextSetStrokeOptions(BLContextCore* self, const(BLStrokeOptionsCore)* options); 2478 version(BindBlend2D_Static) BLResult blContextClipToRectI(BLContextCore* self, const(BLRectI)* rect); 2479 version(BindBlend2D_Static) BLResult blContextClipToRectD(BLContextCore* self, const(BLRect)* rect); 2480 version(BindBlend2D_Static) BLResult blContextRestoreClipping(BLContextCore* self); 2481 version(BindBlend2D_Static) BLResult blContextClearAll(BLContextCore* self); 2482 version(BindBlend2D_Static) BLResult blContextClearRectI(BLContextCore* self, const(BLRectI)* rect); 2483 version(BindBlend2D_Static) BLResult blContextClearRectD(BLContextCore* self, const(BLRect)* rect); 2484 version(BindBlend2D_Static) BLResult blContextFillAll(BLContextCore* self); 2485 version(BindBlend2D_Static) BLResult blContextFillRectI(BLContextCore* self, const(BLRectI)* rect); 2486 version(BindBlend2D_Static) BLResult blContextFillRectD(BLContextCore* self, const(BLRect)* rect); 2487 version(BindBlend2D_Static) BLResult blContextFillPathD(BLContextCore* self, const(BLPathCore)* path); 2488 version(BindBlend2D_Static) BLResult blContextFillGeometry(BLContextCore* self, BLGeometryType geometryType, const(void)* geometryData); 2489 version(BindBlend2D_Static) BLResult blContextFillTextI(BLContextCore* self, const(BLPointI)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding); 2490 version(BindBlend2D_Static) BLResult blContextFillTextD(BLContextCore* self, const(BLPoint)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding); 2491 version(BindBlend2D_Static) BLResult blContextFillGlyphRunI(BLContextCore* self, const(BLPointI)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun); 2492 version(BindBlend2D_Static) BLResult blContextFillGlyphRunD(BLContextCore* self, const(BLPoint)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun); 2493 version(BindBlend2D_Static) BLResult blContextFillMaskI(BLContextCore* self, const(BLPointI)* pt, const(BLImageCore)* mask, const(BLRectI)* maskArea); 2494 version(BindBlend2D_Static) BLResult blContextFillMaskD(BLContextCore* self, const(BLPoint)* pt, const(BLImageCore)* mask, const(BLRectI)* maskArea); 2495 version(BindBlend2D_Static) BLResult blContextStrokeRectI(BLContextCore* self, const(BLRectI)* rect); 2496 version(BindBlend2D_Static) BLResult blContextStrokeRectD(BLContextCore* self, const(BLRect)* rect); 2497 version(BindBlend2D_Static) BLResult blContextStrokePathD(BLContextCore* self, const(BLPathCore)* path); 2498 version(BindBlend2D_Static) BLResult blContextStrokeGeometry(BLContextCore* self, BLGeometryType geometryType, const(void)* geometryData); 2499 version(BindBlend2D_Static) BLResult blContextStrokeTextI(BLContextCore* self, const(BLPointI)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding); 2500 version(BindBlend2D_Static) BLResult blContextStrokeTextD(BLContextCore* self, const(BLPoint)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding); 2501 version(BindBlend2D_Static) BLResult blContextStrokeGlyphRunI(BLContextCore* self, const(BLPointI)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun); 2502 version(BindBlend2D_Static) BLResult blContextStrokeGlyphRunD(BLContextCore* self, const(BLPoint)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun); 2503 version(BindBlend2D_Static) BLResult blContextBlitImageI(BLContextCore* self, const(BLPointI)* pt, const(BLImageCore)* img, const(BLRectI)* imgArea); 2504 version(BindBlend2D_Static) BLResult blContextBlitImageD(BLContextCore* self, const(BLPoint)* pt, const(BLImageCore)* img, const(BLRectI)* imgArea); 2505 version(BindBlend2D_Static) BLResult blContextBlitScaledImageI(BLContextCore* self, const(BLRectI)* rect, const(BLImageCore)* img, const(BLRectI)* imgArea); 2506 version(BindBlend2D_Static) BLResult blContextBlitScaledImageD(BLContextCore* self, const(BLRect)* rect, const(BLImageCore)* img, const(BLRectI)* imgArea); 2507 2508 struct BLContextState 2509 { 2510 BLImageCore* targetImage; 2511 BLSize targetSize; 2512 BLContextHints hints; 2513 ubyte compOp; 2514 ubyte fillRule; 2515 ubyte[2] styleType; 2516 ubyte[4] reserved; 2517 BLApproximationOptions approximationOptions; 2518 double globalAlpha; 2519 double[2] styleAlpha; 2520 BLStrokeOptionsCore strokeOptions; 2521 BLMatrix2D metaMatrix; 2522 BLMatrix2D userMatrix; 2523 size_t savedStateCount; 2524 } 2525 2526 struct BLContextVirt 2527 { 2528 BLObjectVirtBase base; 2529 BLResult function(BLContextImpl* impl, BLContextFlushFlags flags) flush; 2530 BLResult function(BLContextImpl* impl, BLContextCookie* cookie) save; 2531 BLResult function(BLContextImpl* impl, const(BLContextCookie)* cookie) restore; 2532 BLResult function(BLContextImpl* impl, BLMatrix2DOp opType, const(void)* opData) matrixOp; 2533 BLResult function(BLContextImpl* impl) userToMeta; 2534 BLResult function(BLContextImpl* impl, BLContextHint hintType, uint value) setHint; 2535 BLResult function(BLContextImpl* impl, const(BLContextHints)* hints) setHints; 2536 BLResult function(BLContextImpl* impl, BLFlattenMode mode) setFlattenMode; 2537 BLResult function(BLContextImpl* impl, double tolerance) setFlattenTolerance; 2538 BLResult function(BLContextImpl* impl, const(BLApproximationOptions)* options) setApproximationOptions; 2539 BLResult function(BLContextImpl* impl, BLCompOp compOp) setCompOp; 2540 BLResult function(BLContextImpl* impl, double alpha) setGlobalAlpha; 2541 BLResult function(BLContextImpl* impl, double alpha)[2] setStyleAlpha; 2542 BLResult function(const(BLContextImpl)* impl, BLVarCore* out_)[2] getStyle; 2543 BLResult function(BLContextImpl* impl, const(BLUnknown)* var)[2] setStyle; 2544 BLResult function(BLContextImpl* impl, const(BLRgba)* rgba)[2] setStyleRgba; 2545 BLResult function(BLContextImpl* impl, uint rgba32)[2] setStyleRgba32; 2546 BLResult function(BLContextImpl* impl, ulong rgba64)[2] setStyleRgba64; 2547 BLResult function(BLContextImpl* impl, BLFillRule fillRule) setFillRule; 2548 BLResult function(BLContextImpl* impl, double width) setStrokeWidth; 2549 BLResult function(BLContextImpl* impl, double miterLimit) setStrokeMiterLimit; 2550 BLResult function(BLContextImpl* impl, BLStrokeCapPosition position, BLStrokeCap strokeCap) setStrokeCap; 2551 BLResult function(BLContextImpl* impl, BLStrokeCap strokeCap) setStrokeCaps; 2552 BLResult function(BLContextImpl* impl, BLStrokeJoin strokeJoin) setStrokeJoin; 2553 BLResult function(BLContextImpl* impl, double dashOffset) setStrokeDashOffset; 2554 BLResult function(BLContextImpl* impl, const(BLArrayCore)* dashArray) setStrokeDashArray; 2555 BLResult function(BLContextImpl* impl, BLStrokeTransformOrder transformOrder) setStrokeTransformOrder; 2556 BLResult function(BLContextImpl* impl, const(BLStrokeOptionsCore)* options) setStrokeOptions; 2557 BLResult function(BLContextImpl* impl, const(BLRectI)* rect) clipToRectI; 2558 BLResult function(BLContextImpl* impl, const(BLRect)* rect) clipToRectD; 2559 BLResult function(BLContextImpl* impl) restoreClipping; 2560 BLResult function(BLContextImpl* impl) clearAll; 2561 BLResult function(BLContextImpl* impl, const(BLRectI)* rect) clearRectI; 2562 BLResult function(BLContextImpl* impl, const(BLRect)* rect) clearRectD; 2563 BLResult function(BLContextImpl* impl) fillAll; 2564 BLResult function(BLContextImpl* impl, const(BLRectI)* rect) fillRectI; 2565 BLResult function(BLContextImpl* impl, const(BLRect)* rect) fillRectD; 2566 BLResult function(BLContextImpl* impl, const(BLPathCore)* path) fillPathD; 2567 BLResult function(BLContextImpl* impl, BLGeometryType geometryType, const(void)* geometryData) fillGeometry; 2568 BLResult function(BLContextImpl* impl, const(BLPointI)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding) fillTextI; 2569 BLResult function(BLContextImpl* impl, const(BLPoint)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding) fillTextD; 2570 BLResult function(BLContextImpl* impl, const(BLPointI)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun) fillGlyphRunI; 2571 BLResult function(BLContextImpl* impl, const(BLPoint)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun) fillGlyphRunD; 2572 BLResult function(BLContextImpl* impl, const(BLPointI)* pt, const(BLImageCore)* mask, const(BLRectI)* maskArea) fillMaskI; 2573 BLResult function(BLContextImpl* impl, const(BLPoint)* pt, const(BLImageCore)* mask, const(BLRectI)* maskArea) fillMaskD; 2574 BLResult function(BLContextImpl* impl, const(BLRectI)* rect) strokeRectI; 2575 BLResult function(BLContextImpl* impl, const(BLRect)* rect) strokeRectD; 2576 BLResult function(BLContextImpl* impl, const(BLPathCore)* path) strokePathD; 2577 BLResult function(BLContextImpl* impl, BLGeometryType geometryType, const(void)* geometryData) strokeGeometry; 2578 BLResult function(BLContextImpl* impl, const(BLPointI)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding) strokeTextI; 2579 BLResult function(BLContextImpl* impl, const(BLPoint)* pt, const(BLFontCore)* font, const(void)* text, size_t size, BLTextEncoding encoding) strokeTextD; 2580 BLResult function(BLContextImpl* impl, const(BLPointI)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun) strokeGlyphRunI; 2581 BLResult function(BLContextImpl* impl, const(BLPoint)* pt, const(BLFontCore)* font, const(BLGlyphRun)* glyphRun) strokeGlyphRunD; 2582 BLResult function(BLContextImpl* impl, const(BLPointI)* pt, const(BLImageCore)* img, const(BLRectI)* imgArea) blitImageI; 2583 BLResult function(BLContextImpl* impl, const(BLPoint)* pt, const(BLImageCore)* img, const(BLRectI)* imgArea) blitImageD; 2584 BLResult function(BLContextImpl* impl, const(BLRectI)* rect, const(BLImageCore)* img, const(BLRectI)* imgArea) blitScaledImageI; 2585 BLResult function(BLContextImpl* impl, const(BLRect)* rect, const(BLImageCore)* img, const(BLRectI)* imgArea) blitScaledImageD; 2586 } 2587 2588 struct BLContextImpl 2589 { 2590 const(BLContextVirt)* virt; 2591 const(BLContextState)* state; 2592 uint contextType; 2593 } 2594 2595 struct BLFontManagerCore 2596 { 2597 BLObjectDetail _d; 2598 } 2599 2600 version(BindBlend2D_Static) BLResult blFontManagerInit(BLFontManagerCore* self); 2601 version(BindBlend2D_Static) BLResult blFontManagerInitMove(BLFontManagerCore* self, BLFontManagerCore* other); 2602 version(BindBlend2D_Static) BLResult blFontManagerInitWeak(BLFontManagerCore* self, const(BLFontManagerCore)* other); 2603 version(BindBlend2D_Static) BLResult blFontManagerInitNew(BLFontManagerCore* self); 2604 version(BindBlend2D_Static) BLResult blFontManagerDestroy(BLFontManagerCore* self); 2605 version(BindBlend2D_Static) BLResult blFontManagerReset(BLFontManagerCore* self); 2606 version(BindBlend2D_Static) BLResult blFontManagerAssignMove(BLFontManagerCore* self, BLFontManagerCore* other); 2607 version(BindBlend2D_Static) BLResult blFontManagerAssignWeak(BLFontManagerCore* self, const(BLFontManagerCore)* other); 2608 version(BindBlend2D_Static) BLResult blFontManagerCreate(BLFontManagerCore* self); 2609 version(BindBlend2D_Static) size_t blFontManagerGetFaceCount(const(BLFontManagerCore)* self); 2610 version(BindBlend2D_Static) size_t blFontManagerGetFamilyCount(const(BLFontManagerCore)* self); 2611 version(BindBlend2D_Static) bool blFontManagerHasFace(const(BLFontManagerCore)* self, const(BLFontFaceCore)* face); 2612 version(BindBlend2D_Static) BLResult blFontManagerAddFace(BLFontManagerCore* self, const(BLFontFaceCore)* face); 2613 version(BindBlend2D_Static) BLResult blFontManagerQueryFace(const(BLFontManagerCore)* self, const(char)* name, size_t nameSize, const(BLFontQueryProperties)* properties, BLFontFaceCore* out_); 2614 version(BindBlend2D_Static) BLResult blFontManagerQueryFacesByFamilyName(const(BLFontManagerCore)* self, const(char)* name, size_t nameSize, BLArrayCore* out_); 2615 version(BindBlend2D_Static) bool blFontManagerEquals(const(BLFontManagerCore)* a, const(BLFontManagerCore)* b); 2616 2617 struct BLFontManagerVirt 2618 { 2619 BLObjectVirtBase base; 2620 } 2621 2622 struct BLFontManagerImpl 2623 { 2624 const(BLFontManagerVirt)* virt; 2625 } 2626 2627 enum BLGradientType 2628 { 2629 BL_GRADIENT_TYPE_LINEAR = 0, 2630 BL_GRADIENT_TYPE_RADIAL = 1, 2631 BL_GRADIENT_TYPE_CONICAL = 2, 2632 BL_GRADIENT_TYPE_MAX_VALUE = 2, 2633 BL_GRADIENT_TYPE_FORCE_UINT = 0xFFFFFFFFu 2634 } 2635 2636 enum BLGradientValue 2637 { 2638 BL_GRADIENT_VALUE_COMMON_X0 = 0, 2639 BL_GRADIENT_VALUE_COMMON_Y0 = 1, 2640 BL_GRADIENT_VALUE_COMMON_X1 = 2, 2641 BL_GRADIENT_VALUE_COMMON_Y1 = 3, 2642 BL_GRADIENT_VALUE_RADIAL_R0 = 4, 2643 BL_GRADIENT_VALUE_CONICAL_ANGLE = 2, 2644 BL_GRADIENT_VALUE_MAX_VALUE = 5, 2645 BL_GRADIENT_VALUE_FORCE_UINT = 0xFFFFFFFFu 2646 } 2647 2648 struct BLGradientStop 2649 { 2650 double offset; 2651 BLRgba64 rgba; 2652 } 2653 2654 struct BLLinearGradientValues 2655 { 2656 double x0; 2657 double y0; 2658 double x1; 2659 double y1; 2660 } 2661 2662 struct BLRadialGradientValues 2663 { 2664 double x0; 2665 double y0; 2666 double x1; 2667 double y1; 2668 double r0; 2669 } 2670 2671 struct BLConicalGradientValues 2672 { 2673 double x0; 2674 double y0; 2675 double angle; 2676 } 2677 2678 struct BLGradientCore 2679 { 2680 BLObjectDetail _d; 2681 } 2682 2683 version(BindBlend2D_Static) BLResult blGradientInit(BLGradientCore* self); 2684 version(BindBlend2D_Static) BLResult blGradientInitMove(BLGradientCore* self, BLGradientCore* other); 2685 version(BindBlend2D_Static) BLResult blGradientInitWeak(BLGradientCore* self, const(BLGradientCore)* other); 2686 version(BindBlend2D_Static) BLResult blGradientInitAs(BLGradientCore* self, BLGradientType type, const(void)* values, BLExtendMode extendMode, const(BLGradientStop)* stops, size_t n, const(BLMatrix2D)* m); 2687 version(BindBlend2D_Static) BLResult blGradientDestroy(BLGradientCore* self); 2688 version(BindBlend2D_Static) BLResult blGradientReset(BLGradientCore* self); 2689 version(BindBlend2D_Static) BLResult blGradientAssignMove(BLGradientCore* self, BLGradientCore* other); 2690 version(BindBlend2D_Static) BLResult blGradientAssignWeak(BLGradientCore* self, const(BLGradientCore)* other); 2691 version(BindBlend2D_Static) BLResult blGradientCreate(BLGradientCore* self, BLGradientType type, const(void)* values, BLExtendMode extendMode, const(BLGradientStop)* stops, size_t n, const(BLMatrix2D)* m); 2692 version(BindBlend2D_Static) BLResult blGradientShrink(BLGradientCore* self); 2693 version(BindBlend2D_Static) BLResult blGradientReserve(BLGradientCore* self, size_t n); 2694 version(BindBlend2D_Static) BLGradientType blGradientGetType(const(BLGradientCore)* self); 2695 version(BindBlend2D_Static) BLResult blGradientSetType(BLGradientCore* self, BLGradientType type); 2696 version(BindBlend2D_Static) BLExtendMode blGradientGetExtendMode(const(BLGradientCore)* self); 2697 version(BindBlend2D_Static) BLResult blGradientSetExtendMode(BLGradientCore* self, BLExtendMode extendMode); 2698 version(BindBlend2D_Static) double blGradientGetValue(const(BLGradientCore)* self, size_t index); 2699 version(BindBlend2D_Static) BLResult blGradientSetValue(BLGradientCore* self, size_t index, double value); 2700 version(BindBlend2D_Static) BLResult blGradientSetValues(BLGradientCore* self, size_t index, const(double)* values, size_t n); 2701 version(BindBlend2D_Static) size_t blGradientGetSize(const(BLGradientCore)* self); 2702 version(BindBlend2D_Static) size_t blGradientGetCapacity(const(BLGradientCore)* self); 2703 version(BindBlend2D_Static) const(BLGradientStop)* blGradientGetStops(const(BLGradientCore)* self); 2704 version(BindBlend2D_Static) BLResult blGradientResetStops(BLGradientCore* self); 2705 version(BindBlend2D_Static) BLResult blGradientAssignStops(BLGradientCore* self, const(BLGradientStop)* stops, size_t n); 2706 version(BindBlend2D_Static) BLResult blGradientAddStopRgba32(BLGradientCore* self, double offset, uint argb32); 2707 version(BindBlend2D_Static) BLResult blGradientAddStopRgba64(BLGradientCore* self, double offset, ulong argb64); 2708 version(BindBlend2D_Static) BLResult blGradientRemoveStop(BLGradientCore* self, size_t index); 2709 version(BindBlend2D_Static) BLResult blGradientRemoveStopByOffset(BLGradientCore* self, double offset, uint all); 2710 version(BindBlend2D_Static) BLResult blGradientRemoveStopsByIndex(BLGradientCore* self, size_t rStart, size_t rEnd); 2711 version(BindBlend2D_Static) BLResult blGradientRemoveStopsByOffset(BLGradientCore* self, double offsetMin, double offsetMax); 2712 version(BindBlend2D_Static) BLResult blGradientReplaceStopRgba32(BLGradientCore* self, size_t index, double offset, uint rgba32); 2713 version(BindBlend2D_Static) BLResult blGradientReplaceStopRgba64(BLGradientCore* self, size_t index, double offset, ulong rgba64); 2714 version(BindBlend2D_Static) size_t blGradientIndexOfStop(const(BLGradientCore)* self, double offset); 2715 version(BindBlend2D_Static) BLResult blGradientApplyMatrixOp(BLGradientCore* self, BLMatrix2DOp opType, const(void)* opData); 2716 version(BindBlend2D_Static) bool blGradientEquals(const(BLGradientCore)* a, const(BLGradientCore)* b); 2717 2718 struct BLGradientImpl 2719 { 2720 BLGradientStop* stops; 2721 size_t size; 2722 size_t capacity; 2723 ubyte gradientType; 2724 ubyte extendMode; 2725 ubyte matrixType; 2726 ubyte[1] reserved; 2727 BLMatrix2D matrix; 2728 2729 union 2730 { 2731 double[6] values; 2732 BLLinearGradientValues linear; 2733 BLRadialGradientValues radial; 2734 BLConicalGradientValues conical; 2735 } 2736 } 2737 2738 version(BindBlend2D_Static) BLResult blImageDecoderInit(BLImageDecoderCore* self); 2739 version(BindBlend2D_Static) BLResult blImageDecoderInitMove(BLImageDecoderCore* self, BLImageDecoderCore* other); 2740 version(BindBlend2D_Static) BLResult blImageDecoderInitWeak(BLImageDecoderCore* self, const(BLImageDecoderCore)* other); 2741 version(BindBlend2D_Static) BLResult blImageDecoderDestroy(BLImageDecoderCore* self); 2742 version(BindBlend2D_Static) BLResult blImageDecoderReset(BLImageDecoderCore* self); 2743 version(BindBlend2D_Static) BLResult blImageDecoderAssignMove(BLImageDecoderCore* self, BLImageDecoderCore* other); 2744 version(BindBlend2D_Static) BLResult blImageDecoderAssignWeak(BLImageDecoderCore* self, const(BLImageDecoderCore)* other); 2745 version(BindBlend2D_Static) BLResult blImageDecoderRestart(BLImageDecoderCore* self); 2746 version(BindBlend2D_Static) BLResult blImageDecoderReadInfo(BLImageDecoderCore* self, BLImageInfo* infoOut, const(ubyte)* data, size_t size); 2747 version(BindBlend2D_Static) BLResult blImageDecoderReadFrame(BLImageDecoderCore* self, BLImageCore* imageOut, const(ubyte)* data, size_t size); 2748 2749 struct BLImageDecoderVirt 2750 { 2751 BLObjectVirtBase base; 2752 BLResult function(BLImageDecoderImpl* impl) restart; 2753 BLResult function(BLImageDecoderImpl* impl, BLImageInfo* infoOut, const(ubyte)* data, size_t size) readInfo; 2754 BLResult function(BLImageDecoderImpl* impl, BLImageCore* imageOut, const(ubyte)* data, size_t size) readFrame; 2755 } 2756 2757 struct BLImageDecoderImpl 2758 { 2759 const(BLImageDecoderVirt)* virt; 2760 BLImageCodecCore codec; 2761 BLResult lastResult; 2762 void* handle; 2763 ulong frameIndex; 2764 size_t bufferIndex; 2765 } 2766 2767 struct BLImageDecoderCore 2768 { 2769 BLObjectDetail _d; 2770 } 2771 2772 version(BindBlend2D_Static) BLResult blImageEncoderInit(BLImageEncoderCore* self); 2773 version(BindBlend2D_Static) BLResult blImageEncoderInitMove(BLImageEncoderCore* self, BLImageEncoderCore* other); 2774 version(BindBlend2D_Static) BLResult blImageEncoderInitWeak(BLImageEncoderCore* self, const(BLImageEncoderCore)* other); 2775 version(BindBlend2D_Static) BLResult blImageEncoderDestroy(BLImageEncoderCore* self); 2776 version(BindBlend2D_Static) BLResult blImageEncoderReset(BLImageEncoderCore* self); 2777 version(BindBlend2D_Static) BLResult blImageEncoderAssignMove(BLImageEncoderCore* self, BLImageEncoderCore* other); 2778 version(BindBlend2D_Static) BLResult blImageEncoderAssignWeak(BLImageEncoderCore* self, const(BLImageEncoderCore)* other); 2779 version(BindBlend2D_Static) BLResult blImageEncoderRestart(BLImageEncoderCore* self); 2780 version(BindBlend2D_Static) BLResult blImageEncoderWriteFrame(BLImageEncoderCore* self, BLArrayCore* dst, const(BLImageCore)* image); 2781 2782 struct BLImageEncoderVirt 2783 { 2784 BLObjectVirtBase base; 2785 BLResult function(BLImageEncoderImpl* impl) restart; 2786 BLResult function(BLImageEncoderImpl* impl, BLArrayCore* dst, const(BLImageCore)* image) writeFrame; 2787 } 2788 2789 struct BLImageEncoderImpl 2790 { 2791 const(BLImageEncoderVirt)* virt; 2792 BLImageCodecCore codec; 2793 BLResult lastResult; 2794 void* handle; 2795 ulong frameIndex; 2796 size_t bufferIndex; 2797 } 2798 2799 struct BLImageEncoderCore 2800 { 2801 BLObjectDetail _d; 2802 } 2803 2804 version(BindBlend2D_Static) BLResult blPatternInit(BLPatternCore* self); 2805 version(BindBlend2D_Static) BLResult blPatternInitMove(BLPatternCore* self, BLPatternCore* other); 2806 version(BindBlend2D_Static) BLResult blPatternInitWeak(BLPatternCore* self, const(BLPatternCore)* other); 2807 version(BindBlend2D_Static) BLResult blPatternInitAs(BLPatternCore* self, const(BLImageCore)* image, const(BLRectI)* area, BLExtendMode extendMode, const(BLMatrix2D)* m); 2808 version(BindBlend2D_Static) BLResult blPatternDestroy(BLPatternCore* self); 2809 version(BindBlend2D_Static) BLResult blPatternReset(BLPatternCore* self); 2810 version(BindBlend2D_Static) BLResult blPatternAssignMove(BLPatternCore* self, BLPatternCore* other); 2811 version(BindBlend2D_Static) BLResult blPatternAssignWeak(BLPatternCore* self, const(BLPatternCore)* other); 2812 version(BindBlend2D_Static) BLResult blPatternAssignDeep(BLPatternCore* self, const(BLPatternCore)* other); 2813 version(BindBlend2D_Static) BLResult blPatternCreate(BLPatternCore* self, const(BLImageCore)* image, const(BLRectI)* area, BLExtendMode extendMode, const(BLMatrix2D)* m); 2814 version(BindBlend2D_Static) BLResult blPatternGetImage(const(BLPatternCore)* self, BLImageCore* image); 2815 version(BindBlend2D_Static) BLResult blPatternSetImage(BLPatternCore* self, const(BLImageCore)* image, const(BLRectI)* area); 2816 version(BindBlend2D_Static) BLResult blPatternResetImage(BLPatternCore* self); 2817 version(BindBlend2D_Static) BLResult blPatternGetArea(const(BLPatternCore)* self, BLRectI* areaOut); 2818 version(BindBlend2D_Static) BLResult blPatternSetArea(BLPatternCore* self, const(BLRectI)* area); 2819 version(BindBlend2D_Static) BLExtendMode blPatternGetExtendMode(const(BLPatternCore)* self); 2820 version(BindBlend2D_Static) BLResult blPatternSetExtendMode(BLPatternCore* self, BLExtendMode extendMode); 2821 version(BindBlend2D_Static) BLMatrix2DType blPatternGetMatrixType(const(BLPatternCore)* self); 2822 version(BindBlend2D_Static) BLResult blPatternGetMatrix(const(BLPatternCore)* self, BLMatrix2D* matrixOut); 2823 version(BindBlend2D_Static) BLResult blPatternApplyMatrixOp(BLPatternCore* self, BLMatrix2DOp opType, const(void)* opData); 2824 version(BindBlend2D_Static) bool blPatternEquals(const(BLPatternCore)* a, const(BLPatternCore)* b); 2825 2826 struct BLPatternCore 2827 { 2828 BLObjectDetail _d; 2829 } 2830 2831 struct BLPatternImpl 2832 { 2833 BLImageCore image; 2834 BLRectI area; 2835 BLMatrix2D matrix; 2836 } 2837 2838 alias BLPixelConverterFunc = uint function(const(BLPixelConverterCore)* self, ubyte* dstData, intptr_t dstStride, const(ubyte)* srcData, intptr_t srcStride, uint w, uint h, const(BLPixelConverterOptions)* options); 2839 2840 enum BLPixelConverterCreateFlags 2841 { 2842 BL_PIXEL_CONVERTER_CREATE_NO_FLAGS = 0u, 2843 BL_PIXEL_CONVERTER_CREATE_FLAG_DONT_COPY_PALETTE = 0x00000001u, 2844 BL_PIXEL_CONVERTER_CREATE_FLAG_ALTERABLE_PALETTE = 0x00000002u, 2845 BL_PIXEL_CONVERTER_CREATE_FLAG_NO_MULTI_STEP = 0x00000004u, 2846 BL_PIXEL_CONVERTER_CREATE_FLAG_FORCE_UINT = 0xFFFFFFFFu 2847 } 2848 2849 struct BLPixelConverterOptions 2850 { 2851 BLPointI origin; 2852 size_t gap; 2853 } 2854 2855 struct BLPixelConverterCore 2856 { 2857 union 2858 { 2859 struct 2860 { 2861 BLPixelConverterFunc convertFunc; 2862 ubyte internalFlags; 2863 } 2864 2865 ubyte[80] data; 2866 } 2867 } 2868 2869 version(BindBlend2D_Static) BLResult blPixelConverterInit(BLPixelConverterCore* self); 2870 version(BindBlend2D_Static) BLResult blPixelConverterInitWeak(BLPixelConverterCore* self, const(BLPixelConverterCore)* other); 2871 version(BindBlend2D_Static) BLResult blPixelConverterDestroy(BLPixelConverterCore* self); 2872 version(BindBlend2D_Static) BLResult blPixelConverterReset(BLPixelConverterCore* self); 2873 version(BindBlend2D_Static) BLResult blPixelConverterAssign(BLPixelConverterCore* self, const(BLPixelConverterCore)* other); 2874 version(BindBlend2D_Static) BLResult blPixelConverterCreate(BLPixelConverterCore* self, const(BLFormatInfo)* dstInfo, const(BLFormatInfo)* srcInfo, BLPixelConverterCreateFlags createFlags); 2875 version(BindBlend2D_Static) BLResult blPixelConverterConvert(const(BLPixelConverterCore)* self, void* dstData, intptr_t dstStride, const(void)* srcData, intptr_t srcStride, uint w, uint h, const(BLPixelConverterOptions)* options); 2876 2877 version(BindBlend2D_Static) BLResult blRandomReset(BLRandom* self, ulong seed); 2878 version(BindBlend2D_Static) uint blRandomNextUInt32(BLRandom* self); 2879 version(BindBlend2D_Static) ulong blRandomNextUInt64(BLRandom* self); 2880 version(BindBlend2D_Static) double blRandomNextDouble(BLRandom* self); 2881 2882 struct BLRandom 2883 { 2884 ulong[2] data; 2885 } 2886 2887 enum BLRuntimeLimits 2888 { 2889 BL_RUNTIME_MAX_IMAGE_SIZE = 65535, 2890 BL_RUNTIME_MAX_THREAD_COUNT = 32 2891 } 2892 2893 enum BLRuntimeInfoType 2894 { 2895 BL_RUNTIME_INFO_TYPE_BUILD = 0, 2896 BL_RUNTIME_INFO_TYPE_SYSTEM = 1, 2897 BL_RUNTIME_INFO_TYPE_RESOURCE = 2, 2898 BL_RUNTIME_INFO_TYPE_MAX_VALUE = 2, 2899 BL_RUNTIME_INFO_TYPE_FORCE_UINT = 0xFFFFFFFFu 2900 } 2901 2902 enum BLRuntimeBuildType 2903 { 2904 BL_RUNTIME_BUILD_TYPE_DEBUG = 0, 2905 BL_RUNTIME_BUILD_TYPE_RELEASE = 1, 2906 BL_RUNTIME_BUILD_TYPE_FORCE_UINT = 0xFFFFFFFFu 2907 } 2908 2909 enum BLRuntimeCpuArch 2910 { 2911 BL_RUNTIME_CPU_ARCH_UNKNOWN = 0, 2912 BL_RUNTIME_CPU_ARCH_X86 = 1, 2913 BL_RUNTIME_CPU_ARCH_ARM = 2, 2914 BL_RUNTIME_CPU_ARCH_MIPS = 3, 2915 BL_RUNTIME_CPU_ARCH_FORCE_UINT = 0xFFFFFFFFu 2916 } 2917 2918 enum BLRuntimeCpuFeatures 2919 { 2920 BL_RUNTIME_CPU_FEATURE_X86_SSE2 = 0x00000001u, 2921 BL_RUNTIME_CPU_FEATURE_X86_SSE3 = 0x00000002u, 2922 BL_RUNTIME_CPU_FEATURE_X86_SSSE3 = 0x00000004u, 2923 BL_RUNTIME_CPU_FEATURE_X86_SSE4_1 = 0x00000008u, 2924 BL_RUNTIME_CPU_FEATURE_X86_SSE4_2 = 0x00000010u, 2925 BL_RUNTIME_CPU_FEATURE_X86_AVX = 0x00000020u, 2926 BL_RUNTIME_CPU_FEATURE_X86_AVX2 = 0x00000040u, 2927 BL_RUNTIME_CPU_FEATURE_FORCE_UINT = 0xFFFFFFFFu 2928 } 2929 2930 enum BLRuntimeCleanupFlags 2931 { 2932 BL_RUNTIME_CLEANUP_NO_FLAGS = 0u, 2933 BL_RUNTIME_CLEANUP_OBJECT_POOL = 0x00000001u, 2934 BL_RUNTIME_CLEANUP_ZEROED_POOL = 0x00000002u, 2935 BL_RUNTIME_CLEANUP_THREAD_POOL = 0x00000010u, 2936 BL_RUNTIME_CLEANUP_EVERYTHING = 0xFFFFFFFFu, 2937 BL_RUNTIME_CLEANUP_FLAG_FORCE_UINT = 0xFFFFFFFFu 2938 } 2939 2940 struct BLRuntimeBuildInfo 2941 { 2942 uint majorVersion; 2943 uint minorVersion; 2944 uint patchVersion; 2945 uint buildType; 2946 uint baselineCpuFeatures; 2947 uint supportedCpuFeatures; 2948 uint maxImageSize; 2949 uint maxThreadCount; 2950 uint[2] reserved; 2951 char[32] compilerInfo; 2952 } 2953 2954 struct BLRuntimeSystemInfo 2955 { 2956 uint cpuArch; 2957 uint cpuFeatures; 2958 uint coreCount; 2959 uint threadCount; 2960 uint threadStackSize; 2961 uint removed; 2962 uint allocationGranularity; 2963 uint[5] reserved; 2964 } 2965 2966 struct BLRuntimeResourceInfo 2967 { 2968 size_t vmUsed; 2969 size_t vmReserved; 2970 size_t vmOverhead; 2971 size_t vmBlockCount; 2972 size_t zmUsed; 2973 size_t zmReserved; 2974 size_t zmOverhead; 2975 size_t zmBlockCount; 2976 size_t dynamicPipelineCount; 2977 size_t[7] reserved; 2978 } 2979 2980 version(BindBlend2D_Static) BLResult blRuntimeInit(); 2981 version(BindBlend2D_Static) BLResult blRuntimeShutdown(); 2982 version(BindBlend2D_Static) BLResult blRuntimeCleanup(BLRuntimeCleanupFlags cleanupFlags); 2983 version(BindBlend2D_Static) BLResult blRuntimeQueryInfo(BLRuntimeInfoType infoType, void* infoOut); 2984 version(BindBlend2D_Static) BLResult blRuntimeMessageOut(const(char)* msg); 2985 version(BindBlend2D_Static) BLResult blRuntimeMessageFmt(const(char)* fmt, ...); 2986 version(BindBlend2D_Static) BLResult blRuntimeMessageVFmt(const(char)* fmt, va_list ap); 2987 //BLResult blResultFromWinError(uint e); 2988 2989 version(BindBlend2D_Static) version(Windows) BLResult blResultFromWinError(uint e); 2990 version(BindBlend2D_Static) version(Posix) BLResult blResultFromPosixError(int e);