diff --git a/.vscode/ipch/9e75b36b42685bc0/mmap_address.bin b/.vscode/ipch/9e75b36b42685bc0/mmap_address.bin new file mode 100644 index 0000000..862b842 Binary files /dev/null and b/.vscode/ipch/9e75b36b42685bc0/mmap_address.bin differ diff --git a/.vscode/ipch/d91052574d8ab777/mmap_address.bin b/.vscode/ipch/d91052574d8ab777/mmap_address.bin new file mode 100644 index 0000000..862b842 Binary files /dev/null and b/.vscode/ipch/d91052574d8ab777/mmap_address.bin differ diff --git a/blend2d/blapi.lua b/blend2d/blapi.lua deleted file mode 100644 index bd54bb9..0000000 --- a/blend2d/blapi.lua +++ /dev/null @@ -1,1227 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. -// -// This file modified from origin --- William Adams ---]] - -local ffi = require("ffi") -local bit = require("bit") -local band, bor = bit.band, bit.bor -local lshift, rshift = bit.lshift, bit.rshift - -if not BLEND2D_BLAPI_H then -BLEND2D_BLAPI_H = true - --- This header can only be included by either or by Blend2D headers --- during the build. Prevent users including headers by accident and --- prevent not including "blend2d/blapi-build_p.h" during the build. -if not (BLEND2D_H) and not BLEND2D_BLAPI_BUILD_P_H then - error("require either 'blend2d.blend2d' or 'blend2d.blend2d-impl' to use Blend2D library") -end - ---[[ -local function BL_MAKE_VERSION(MAJOR, MINOR, PATCH) return bor(lshift(MAJOR , 16) , lshift(MINOR , 8) , PATCH) end -BL_VERSION = BL_MAKE_VERSION(0, 0, 1) ---]] - - - ---[[ -//! \def BL_BUILD_BYTE_ORDER -//! -//! A compile-time constant (macro) that defines byte-order of the target. It -//! can be either `1234` for little-endian targets or `4321` for big-endian -//! targets. Blend2D uses this macro internally, but it's also available to -//! end users as sometimes it could be important for deciding between pixel -//! formats or other important details. ---]] -if (__ARMEB__) or (__MIPSEB__) or - (__BYTE_ORDER__ and (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) then -BL_BUILD_BYTE_ORDER = 4321 -else -BL_BUILD_BYTE_ORDER = 1234 -end - - - ---[=[ -//! \def -//! -//! Function attribute used by functions that never return (that terminate the -//! process). This attribute is used only once by `blRuntimeAssertionFailure()` -//! function, which is only used when assertions are enabled. This macro should -//! be considered internal and it's not designed for Blend2D users. -#if defined(__GNUC__) - #define __attribute__((noreturn)) -#elif defined(_MSC_VER) - #define __declspec(noreturn) -#else - #define -#endif - -//! \name Assumptions - - -//! \def BL_ASSUME(...) -//! -//! Macro that tells the C/C++ compiler that the expression `...` evaluates -//! to true. This macro is only used by few places and should be considered -//! internal as you shouldn't need it when using Blend2D library. -#if defined(__clang__) - #define BL_ASSUME(...) __builtin_assume(__VA_ARGS__) -#elif defined(__GNUC__) - #define BL_ASSUME(...) do { if (!(__VA_ARGS__)) __builtin_unreachable(); } while (0) -#elif defined(_MSC_VER) - #define BL_ASSUME(...) __assume(__VA_ARGS__) -#else - #define BL_ASSUME(...) (void)0 -#endif - -//! \def BL_LIKELY(...) -//! -//! A condition is likely. - -//! \def BL_UNLIKELY(...) -//! -//! A condition is unlikely. - - - - -//! \name Debugging and Error Handling - - -//! Executes the code within the macro and returns if it returned any value other -//! than `BL_SUCCESS`. This macro is heavily used across the library for error -//! handling. -#define BL_PROPAGATE(...) \ - do { \ - BLResult resultToPropagate = (__VA_ARGS__); \ - if (BL_UNLIKELY(resultToPropagate)) \ - return resultToPropagate; \ - } while (0) - - - -//! \name Utilities - - -//! Creates a 32-bit tag (uint32_t) from the given `A`, `B`, `C`, and `D` values. -#define BL_MAKE_TAG(A, B, C, D) \ - ((BLTag)(((BLTag)(A) << 24) | ((BLTag)(B) << 16) | ((BLTag)(C) << 8) | ((BLTag)(D)))) - - - -//! \cond INTERNAL -//! \name Internals - - -//! \def enum NAME) -//! -//! Defines an enumeration used by Blend2D that is `uint32_t`. - - -//! \endcond - -#ifdef __cplusplus - #define enum NAME) enum NAME : uint32_t -#else - #define enum NAME) enum NAME -#endif - -#ifdef __cplusplus - // Union prevents C++ compiler from constructing / destructing its members. - #define BL_TYPED_MEMBER(CORE_TYPE, CPP_TYPE, NAME) union { CPP_TYPE NAME; } - - // However, we have to provide default constructors, destructor, and - // copy-assignment to pay for such union {}. - #define BL_HAS_TYPED_MEMBERS(...) \ - BL_INLINE __VA_ARGS__() noexcept {} \ - BL_INLINE __VA_ARGS__(const __VA_ARGS__& other) noexcept { \ - memcpy(this, &other, sizeof(__VA_ARGS__)); \ - } \ - BL_INLINE ~__VA_ARGS__() noexcept {} \ - \ - BL_INLINE __VA_ARGS__& operator=(const __VA_ARGS__& other) noexcept { \ - memcpy(this, &other, sizeof(__VA_ARGS__)); \ - return *this; \ - } -#else - #define BL_TYPED_MEMBER(CORE_TYPE, CPP_TYPE, NAME) CORE_TYPE NAME - #define BL_HAS_TYPED_MEMBERS(...) -#endif ---]=] - - --- ============================================================================ --- [Forward Declarations] --- ============================================================================ -ffi.cdef[[ -typedef struct BLRange BLRange; -typedef struct BLRandom BLRandom; -typedef struct BLCreateForeignInfo BLCreateForeignInfo; -typedef struct BLFileCore BLFileCore; - -typedef struct BLRuntimeBuildInfo BLRuntimeBuildInfo; -typedef struct BLRuntimeMemoryInfo BLRuntimeMemoryInfo; -typedef struct BLRuntimeCpuInfo BLRuntimeCpuInfo; - -typedef struct BLStringCore BLStringCore; -typedef struct BLStringImpl BLStringImpl; -typedef struct BLArrayCore BLArrayCore; -typedef struct BLArrayImpl BLArrayImpl; -typedef struct BLVariantCore BLVariantCore; -typedef struct BLVariantImpl BLVariantImpl; - -typedef struct BLPointI BLPointI; -typedef struct BLPoint BLPoint; -typedef struct BLSizeI BLSizeI; -typedef struct BLSize BLSize; -typedef struct BLBoxI BLBoxI; -typedef struct BLBox BLBox; -typedef struct BLRectI BLRectI; -typedef struct BLRect BLRect; -typedef struct BLLine BLLine; -typedef struct BLTriangle BLTriangle; -typedef struct BLRoundRect BLRoundRect; -typedef struct BLCircle BLCircle; -typedef struct BLEllipse BLEllipse; -typedef struct BLArc BLArc; -typedef struct BLMatrix2D BLMatrix2D; -typedef struct BLPathCore BLPathCore; -]] - -ffi.cdef[[ -typedef struct BLPathImpl BLPathImpl; -typedef struct BLPathView BLPathView; -typedef struct BLRegionCore BLRegionCore; -typedef struct BLRegionImpl BLRegionImpl; -typedef struct BLApproximationOptions BLApproximationOptions; -typedef struct BLStrokeOptionsCore BLStrokeOptionsCore; - -typedef struct BLFormatInfo BLFormatInfo; -typedef struct BLImageCore BLImageCore; -typedef struct BLImageImpl BLImageImpl; -typedef struct BLImageData BLImageData; -typedef struct BLImageInfo BLImageInfo; -typedef struct BLImageScaleOptions BLImageScaleOptions; -typedef struct BLPixelConverterCore BLPixelConverterCore; -typedef struct BLPixelConverterOptions BLPixelConverterOptions; - -typedef struct BLImageCodecCore BLImageCodecCore; -typedef struct BLImageCodecImpl BLImageCodecImpl; -typedef struct BLImageCodecVirt BLImageCodecVirt; -typedef struct BLImageDecoderCore BLImageDecoderCore; -typedef struct BLImageDecoderImpl BLImageDecoderImpl; -typedef struct BLImageDecoderVirt BLImageDecoderVirt; -typedef struct BLImageEncoderCore BLImageEncoderCore; -typedef struct BLImageEncoderImpl BLImageEncoderImpl; -typedef struct BLImageEncoderVirt BLImageEncoderVirt; - -typedef struct BLRgba32 BLRgba32; -typedef struct BLRgba64 BLRgba64; -typedef struct BLRgba128 BLRgba128; -typedef struct BLGradientCore BLGradientCore; -typedef struct BLGradientImpl BLGradientImpl; -typedef struct BLGradientStop BLGradientStop; -typedef struct BLLinearGradientValues BLLinearGradientValues; -typedef struct BLRadialGradientValues BLRadialGradientValues; -typedef struct BLConicalGradientValues BLConicalGradientValues; -typedef struct BLPatternCore BLPatternCore; -typedef struct BLPatternImpl BLPatternImpl; - -typedef struct BLContextCore BLContextCore; -typedef struct BLContextImpl BLContextImpl; -typedef struct BLContextVirt BLContextVirt; -typedef struct BLContextCookie BLContextCookie; -typedef struct BLContextCreateOptions BLContextCreateOptions; -typedef struct BLContextHints BLContextHints; -typedef struct BLContextState BLContextState; - -typedef struct BLGlyphBufferCore BLGlyphBufferCore; -typedef struct BLGlyphBufferData BLGlyphBufferData; -typedef struct BLGlyphInfo BLGlyphInfo; -typedef struct BLGlyphItem BLGlyphItem; -typedef struct BLGlyphMappingState BLGlyphMappingState; -typedef struct BLGlyphOutlineSinkInfo BLGlyphOutlineSinkInfo; -typedef struct BLGlyphPlacement BLGlyphPlacement; -typedef struct BLGlyphRun BLGlyphRun; - -typedef struct BLFontUnicodeCoverage BLFontUnicodeCoverage; -typedef struct BLFontFaceInfo BLFontFaceInfo; -typedef struct BLFontFeature BLFontFeature; -typedef struct BLFontDesignMetrics BLFontDesignMetrics; -typedef struct BLFontMatrix BLFontMatrix; -typedef struct BLFontMetrics BLFontMetrics; -typedef struct BLFontPanose BLFontPanose; -typedef struct BLFontTable BLFontTable; -typedef struct BLFontVariation BLFontVariation; -typedef struct BLTextMetrics BLTextMetrics; - -typedef struct BLFontCore BLFontCore; -typedef struct BLFontImpl BLFontImpl; -typedef struct BLFontVirt BLFontVirt; -typedef struct BLFontFaceCore BLFontFaceCore; -typedef struct BLFontFaceImpl BLFontFaceImpl; -typedef struct BLFontFaceVirt BLFontFaceVirt; -typedef struct BLFontDataCore BLFontDataCore; -typedef struct BLFontDataImpl BLFontDataImpl; -typedef struct BLFontDataVirt BLFontDataVirt; -typedef struct BLFontLoaderCore BLFontLoaderCore; -typedef struct BLFontLoaderImpl BLFontLoaderImpl; -typedef struct BLFontLoaderVirt BLFontLoaderVirt; - -]] - -ffi.cdef[[ -// ============================================================================ -// [Public Types] -// ============================================================================ -typedef uint32_t BLResult; -typedef uintptr_t BLBitWord; -typedef uint32_t BLTag; -typedef void (__cdecl* BLDestroyImplFunc)(void* impl, void* destroyData) ; -typedef BLResult (__cdecl* BLPathSinkFunc)(BLPathCore* path, const void* info, void* closure) ; -typedef uint16_t BLGlyphId; -]] - ---[[ -// ============================================================================ -// [Constants] -// ============================================================================ ---]] - -ffi.cdef[[ - -//! Blend2D result code. -enum BLResultCode { - BL_SUCCESS = 0, - - BL_ERROR_START_INDEX = 0x00010000, - - BL_ERROR_OUT_OF_MEMORY = 0x00010000, //!< Out of memory [ENOMEM]. - BL_ERROR_INVALID_VALUE, //!< Invalid value/argument [EINVAL]. - BL_ERROR_INVALID_STATE, //!< Invalid state [EFAULT]. - BL_ERROR_INVALID_HANDLE, //!< Invalid handle or file. [EBADF]. - BL_ERROR_VALUE_TOO_LARGE, //!< Value too large [EOVERFLOW]. - BL_ERROR_NOT_INITIALIZED, //!< Not initialize (some instance is built-in none when it shouldnt be). - BL_ERROR_NOT_IMPLEMENTED, //!< Not implemented [ENOSYS]. - BL_ERROR_NOT_PERMITTED, //!< Operation not permitted [EPERM]. - - BL_ERROR_IO, //!< IO error [EIO]. - BL_ERROR_BUSY, //!< Device or resource busy [EBUSY]. - BL_ERROR_INTERRUPTED, //!< Operation interrupted [EINTR]. - BL_ERROR_TRY_AGAIN, //!< Try again [EAGAIN]. - BL_ERROR_BROKEN_PIPE, //!< Broken pipe [EPIPE]. - BL_ERROR_INVALID_SEEK, //!< File is not seekable [ESPIPE]. - BL_ERROR_SYMLINK_LOOP, //!< Too many levels of symlinks [ELOOP]. - BL_ERROR_FILE_TOO_LARGE, //!< File is too large [EFBIG]. - BL_ERROR_ALREADY_EXISTS, //!< File/directory already exists [EEXIST]. - BL_ERROR_ACCESS_DENIED, //!< Access denied [EACCES]. - BL_ERROR_MEDIA_CHANGED, //!< Media changed [Windows::ERROR_MEDIA_CHANGED]. - BL_ERROR_READ_ONLY_FS, //!< The file/FS is read-only [EROFS]. - BL_ERROR_NO_DEVICE, //!< Device doesnt exist [ENXIO]. - BL_ERROR_NO_ENTRY, //!< No such file or directory [ENOENT]. - BL_ERROR_NO_MEDIA, //!< No media in drive/device [ENOMEDIUM]. - BL_ERROR_NO_MORE_DATA, //!< No more data / end of file [ENODATA]. - BL_ERROR_NO_MORE_FILES, //!< No more files [ENMFILE]. - BL_ERROR_NO_SPACE_LEFT, //!< No space left on device [ENOSPC]. - BL_ERROR_NOT_EMPTY, //!< Directory is not empty [ENOTEMPTY]. - BL_ERROR_NOT_FILE, //!< Not a file [EISDIR]. - BL_ERROR_NOT_DIRECTORY, //!< Not a directory [ENOTDIR]. - BL_ERROR_NOT_SAME_DEVICE, //!< Not same device [EXDEV]. - BL_ERROR_NOT_BLOCK_DEVICE, //!< Not a block device [ENOTBLK]. - - BL_ERROR_INVALID_FILE_NAME, //!< File/path name is invalid [n/a]. - BL_ERROR_FILE_NAME_TOO_LONG, //!< File/path name is too long [ENAMETOOLONG]. - - BL_ERROR_TOO_MANY_OPEN_FILES, //!< Too many open files [EMFILE]. - BL_ERROR_TOO_MANY_OPEN_FILES_BY_OS, //!< Too many open files by OS [ENFILE]. - BL_ERROR_TOO_MANY_LINKS, //!< Too many symbolic links on FS [EMLINK]. - - BL_ERROR_FILE_EMPTY, //!< File is empty (not specific to any OS error). - BL_ERROR_OPEN_FAILED, //!< File open failed [Windows::ERROR_OPEN_FAILED]. - BL_ERROR_NOT_ROOT_DEVICE, //!< Not a root device/directory [Windows::ERROR_DIR_NOT_ROOT]. - - BL_ERROR_UNKNOWN_SYSTEM_ERROR, //!< Unknown system error that failed to translate to Blend2D result code. - - BL_ERROR_INVALID_SIGNATURE, //!< Invalid data signature or header. - BL_ERROR_INVALID_DATA, //!< Invalid or corrupted data. - BL_ERROR_INVALID_STRING, //!< Invalid string (invalid data of either UTF8, UTF16, or UTF32). - BL_ERROR_DATA_TRUNCATED, //!< Truncated data (more data required than memory/stream provides). - BL_ERROR_DATA_TOO_LARGE, //!< Input data too large to be processed. - BL_ERROR_DECOMPRESSION_FAILED, //!< Decompression failed due to invalid data (RLE, Huffman, etc). - - BL_ERROR_INVALID_GEOMETRY, //!< Invalid geometry (invalid path data or shape). - BL_ERROR_NO_MATCHING_VERTEX, //!< Returned when there is no matching vertex in path data. - - BL_ERROR_NO_MATCHING_COOKIE, //!< No matching cookie (BLContext). - BL_ERROR_NO_STATES_TO_RESTORE, //!< No states to restore (BLContext). - - BL_ERROR_IMAGE_TOO_LARGE, //!< The size of the image is too large. - BL_ERROR_IMAGE_NO_MATCHING_CODEC, //!< Image codec for a required format doesnt exist. - BL_ERROR_IMAGE_UNKNOWN_FILE_FORMAT, //!< Unknown or invalid file format that cannot be read. - BL_ERROR_IMAGE_DECODER_NOT_PROVIDED, //!< Image codec doesnt support reading the file format. - BL_ERROR_IMAGE_ENCODER_NOT_PROVIDED, //!< Image codec doesnt support writing the file format. - - BL_ERROR_PNG_MULTIPLE_IHDR, //!< Multiple IHDR chunks are not allowed (PNG). - BL_ERROR_PNG_INVALID_IDAT, //!< Invalid IDAT chunk (PNG). - BL_ERROR_PNG_INVALID_IEND, //!< Invalid IEND chunk (PNG). - BL_ERROR_PNG_INVALID_PLTE, //!< Invalid PLTE chunk (PNG). - BL_ERROR_PNG_INVALID_TRNS, //!< Invalid tRNS chunk (PNG). - BL_ERROR_PNG_INVALID_FILTER, //!< Invalid filter type (PNG). - - BL_ERROR_JPEG_UNSUPPORTED_FEATURE, //!< Unsupported feature (JPEG). - BL_ERROR_JPEG_INVALID_SOS, //!< Invalid SOS marker or header (JPEG). - BL_ERROR_JPEG_INVALID_SOF, //!< Invalid SOF marker (JPEG). - BL_ERROR_JPEG_MULTIPLE_SOF, //!< Multiple SOF markers (JPEG). - BL_ERROR_JPEG_UNSUPPORTED_SOF, //!< Unsupported SOF marker (JPEG). - - BL_ERROR_FONT_NO_CHARACTER_MAPPING, //!< Font has no character to glyph mapping data. - BL_ERROR_FONT_MISSING_IMPORTANT_TABLE, //!< Font has missing an important table. - BL_ERROR_FONT_FEATURE_NOT_AVAILABLE, //!< Font feature is not available. - BL_ERROR_FONT_CFF_INVALID_DATA, //!< Font has an invalid CFF data. - BL_ERROR_FONT_PROGRAM_TERMINATED, //!< Font program terminated because the execution reached the limit. - - BL_ERROR_INVALID_GLYPH //!< Invalid glyph identifier. -}; -]] - ---[=[ -ffi.cdef[[ -//! Byte order. -enum BLByteOrder { - //! Little endian byte-order. - BL_BYTE_ORDER_LE = 0, - //! Big endian byte-order. - BL_BYTE_ORDER_BE = 1, - - //! Native (host) byte-order. - BL_BYTE_ORDER_NATIVE = BL_BUILD_BYTE_ORDER == 1234 ? BL_BYTE_ORDER_LE : BL_BYTE_ORDER_BE, - //! Swapped byte-order (BE if host is LE and vice versa). - BL_BYTE_ORDER_SWAPPED = BL_BUILD_BYTE_ORDER == 1234 ? BL_BYTE_ORDER_BE : BL_BYTE_ORDER_LE -}; -]] ---]=] - -ffi.cdef[[ -//! \ingroup blend2d_api_globals -//! -//! Data access type. -enum BLDataAccessType { - //! Invalid or no data. - BL_DATA_ACCESS_TYPE_NONE = 0, - //! Read-only access. - BL_DATA_ACCESS_TYPE_RO = 1, - //! Read/write access. - BL_DATA_ACCESS_TYPE_RW = 2, - - //! Count of data access types. - BL_DATA_ACCESS_TYPE_COUNT = 3 -}; -]] - -ffi.cdef[[ -//! \ingroup blend2d_api_globals -//! -//! Data source type. -enum BLDataSourceType { - //! No data source. - BL_DATA_SOURCE_TYPE_NONE = 0, - //! Memory data source. - BL_DATA_SOURCE_TYPE_MEMORY = 1, - //! File data source. - BL_DATA_SOURCE_TYPE_FILE = 2, - //! Custom data source. - BL_DATA_SOURCE_TYPE_CUSTOM = 3, - - //! Count of data source types. - BL_DATA_SOURCE_TYPE_COUNT = 4 -}; -]] - -ffi.cdef[[ -//! \ingroup blend2d_api_globals -//! -//! Modification operation applied to Blend2D containers. -enum BLModifyOp { - //! Assign operation and reserve only space to fit the input. - BL_MODIFY_OP_ASSIGN_FIT = 0, - //! Assign operation and reserve more capacity for growing. - BL_MODIFY_OP_ASSIGN_GROW = 1, - //! Append operation and reserve only space to fit the input. - BL_MODIFY_OP_APPEND_FIT = 2, - //! Append operation and reserve more capacity for growing. - BL_MODIFY_OP_APPEND_GROW = 3, - - //! Count of data operations. - BL_MODIFY_OP_COUNT = 4 -}; -]] - -ffi.cdef[[ -//! \ingroup blend2d_api_globals -//! -//! Boolean operator. -enum BLBooleanOp { - //! Result = B. - BL_BOOLEAN_OP_COPY = 0, - //! Result = A & B. - BL_BOOLEAN_OP_AND = 1, - //! Result = A | B. - BL_BOOLEAN_OP_OR = 2, - //! Result = A ^ B. - BL_BOOLEAN_OP_XOR = 3, - //! Result = A - B. - BL_BOOLEAN_OP_SUB = 4, - - BL_BOOLEAN_OP_COUNT = 5 -}; -]] - -ffi.cdef[[ -//! \ingroup blend2d_api_styles -//! -//! Extend mode. -enum BLExtendMode { - //! Pad extend [default]. - BL_EXTEND_MODE_PAD = 0, - //! Repeat extend. - BL_EXTEND_MODE_REPEAT = 1, - //! Reflect extend. - BL_EXTEND_MODE_REFLECT = 2, - - //! Alias to `BL_EXTEND_MODE_PAD`. - BL_EXTEND_MODE_PAD_X_PAD_Y = 0, - //! Alias to `BL_EXTEND_MODE_REPEAT`. - BL_EXTEND_MODE_REPEAT_X_REPEAT_Y = 1, - //! Alias to `BL_EXTEND_MODE_REFLECT`. - BL_EXTEND_MODE_REFLECT_X_REFLECT_Y = 2, - //! Pad X and repeat Y. - BL_EXTEND_MODE_PAD_X_REPEAT_Y = 3, - //! Pad X and reflect Y. - BL_EXTEND_MODE_PAD_X_REFLECT_Y = 4, - //! Repeat X and pad Y. - BL_EXTEND_MODE_REPEAT_X_PAD_Y = 5, - //! Repeat X and reflect Y. - BL_EXTEND_MODE_REPEAT_X_REFLECT_Y = 6, - //! Reflect X and pad Y. - BL_EXTEND_MODE_REFLECT_X_PAD_Y = 7, - //! Reflect X and repeat Y. - BL_EXTEND_MODE_REFLECT_X_REPEAT_Y = 8, - - //! Count of simple extend modes (that use the same value for X and Y). - BL_EXTEND_MODE_SIMPLE_COUNT = 3, - //! Count of complex extend modes (that can use independent values for X and Y). - BL_EXTEND_MODE_COMPLEX_COUNT = 9 -}; -]] - -ffi.cdef[[ -//! \ingroup blend2d_api_styles -//! -//! Style type. -enum BLStyleType { - //! No style, nothing will be paint. - BL_STYLE_TYPE_NONE = 0, - //! Solid color style. - BL_STYLE_TYPE_SOLID = 1, - //! Pattern style. - BL_STYLE_TYPE_PATTERN = 2, - //! Gradient style. - BL_STYLE_TYPE_GRADIENT = 3, - - //! Count of style types. - BL_STYLE_TYPE_COUNT = 4 -}; -]] - -ffi.cdef[[ -//! \ingroup blend2d_api_text -//! -//! Text encoding. -enum BLTextEncoding { - //! UTF-8 encoding. - BL_TEXT_ENCODING_UTF8 = 0, - //! UTF-16 encoding (native endian). - BL_TEXT_ENCODING_UTF16 = 1, - //! UTF-32 encoding (native endian). - BL_TEXT_ENCODING_UTF32 = 2, - //! LATIN1 encoding (one byte per character). - BL_TEXT_ENCODING_LATIN1 = 3, - - //! Platform native `wchar_t` (or Windows `WCHAR`) encoding, alias to - //! either UTF-32, UTF-16, or UTF-8 depending on `sizeof(wchar_t)`. - BL_TEXT_ENCODING_WCHAR - = sizeof(wchar_t) == 4 ? BL_TEXT_ENCODING_UTF32 : - sizeof(wchar_t) == 2 ? BL_TEXT_ENCODING_UTF16 : BL_TEXT_ENCODING_UTF8, - - //! Count of text supported text encodings. - BL_TEXT_ENCODING_COUNT = 4 -}; -]] - ---[=[ -// ============================================================================ -// [Public API (Inline)] -// ============================================================================ - -//! \addtogroup blend2d_api_globals - - -//! \name Debugging Functionality - - -//! Returns the `result` passed. -//! -//! Provided for debugging purposes. Putting a breakpoint inside `blTraceError()` -//! can help with tracing an origin of errors reported / returned by Blend2D as -//! each error goes through this function. -//! -//! It's a zero-cost solution that doesn't affect release builds in any way. -static inline BLResult blTraceError(BLResult result) { return result; } ---]=] - -ffi.cdef[[ -// ============================================================================ -// [BLRange] -// ============================================================================ - -struct BLRange { - size_t start; - size_t end; -}; -]] - -ffi.cdef[[ -// ============================================================================ -// [BLCreateForeignInfo] -// ============================================================================ - -//! Structure passed to a constructor (initializer) that provides foreign data -//! that should be used to allocate its Impl (and data if it's a container). -struct BLCreateForeignInfo { - void* data; - size_t size; - BLDestroyImplFunc destroyFunc; - void* destroyData; -}; -]] - ---[[ -// ============================================================================ -// [BLArrayView] -// ============================================================================ ---]] - ---[[ -BL_DEFINE_ARRAY_VIEW(BLArrayView, void); -BL_DEFINE_ARRAY_VIEW(BLStringView, char); -BL_DEFINE_ARRAY_VIEW(BLRegionView, BLBoxI); ---]] - -ffi.cdef[[ -typedef struct { - const void* data; - size_t size; -} BLArrayView; - -typedef struct { - const BLPoint * data; - size_t size; -} BLPointView; - -typedef struct { - const char* data; - size_t size; -} BLStringView; - -typedef struct { - const BLBoxI* data; - size_t size; -} BLRegionView; - - -typedef BLArrayView BLDataView; -]] -BLArrayView = ffi.typeof("BLArrayView") -BLPointView = ffi.typeof("BLPointView") -BLStringView = ffi.typeof("BLStringView") -BLRegionView = ffi.typeof("BLRegionView") - ---[[ -// ============================================================================ -// [C Interface - Core] -// ============================================================================ ---]] -ffi.cdef[[ -BLResult __cdecl blArrayInit(BLArrayCore* self, uint32_t arrayTypeId) ; -BLResult __cdecl blArrayReset(BLArrayCore* self) ; -size_t __cdecl blArrayGetSize(const BLArrayCore* self) ; -size_t __cdecl blArrayGetCapacity(const BLArrayCore* self) ; -const void* __cdecl blArrayGetData(const BLArrayCore* self) ; -BLResult __cdecl blArrayClear(BLArrayCore* self) ; -BLResult __cdecl blArrayShrink(BLArrayCore* self) ; -BLResult __cdecl blArrayReserve(BLArrayCore* self, size_t n) ; -BLResult __cdecl blArrayResize(BLArrayCore* self, size_t n, const void* fill) ; -BLResult __cdecl blArrayMakeMutable(BLArrayCore* self, void** dataOut) ; -BLResult __cdecl blArrayModifyOp(BLArrayCore* self, uint32_t op, size_t n, void** dataOut) ; -BLResult __cdecl blArrayInsertOp(BLArrayCore* self, size_t index, size_t n, void** dataOut) ; -BLResult __cdecl blArrayAssignMove(BLArrayCore* self, BLArrayCore* other) ; -BLResult __cdecl blArrayAssignWeak(BLArrayCore* self, const BLArrayCore* other) ; -BLResult __cdecl blArrayAssignDeep(BLArrayCore* self, const BLArrayCore* other) ; -BLResult __cdecl blArrayAssignView(BLArrayCore* self, const void* items, size_t n) ; -BLResult __cdecl blArrayAppendU8(BLArrayCore* self, uint8_t value) ; -BLResult __cdecl blArrayAppendU16(BLArrayCore* self, uint16_t value) ; -BLResult __cdecl blArrayAppendU32(BLArrayCore* self, uint32_t value) ; -BLResult __cdecl blArrayAppendU64(BLArrayCore* self, uint64_t value) ; -BLResult __cdecl blArrayAppendF32(BLArrayCore* self, float value) ; -BLResult __cdecl blArrayAppendF64(BLArrayCore* self, double value) ; -BLResult __cdecl blArrayAppendItem(BLArrayCore* self, const void* item) ; -BLResult __cdecl blArrayAppendView(BLArrayCore* self, const void* items, size_t n) ; -BLResult __cdecl blArrayInsertU8(BLArrayCore* self, size_t index, uint8_t value) ; -BLResult __cdecl blArrayInsertU16(BLArrayCore* self, size_t index, uint16_t value) ; -BLResult __cdecl blArrayInsertU32(BLArrayCore* self, size_t index, uint32_t value) ; -BLResult __cdecl blArrayInsertU64(BLArrayCore* self, size_t index, uint64_t value) ; -BLResult __cdecl blArrayInsertF32(BLArrayCore* self, size_t index, float value) ; -BLResult __cdecl blArrayInsertF64(BLArrayCore* self, size_t index, double value) ; -BLResult __cdecl blArrayInsertItem(BLArrayCore* self, size_t index, const void* item) ; -BLResult __cdecl blArrayInsertView(BLArrayCore* self, size_t index, const void* items, size_t n) ; -BLResult __cdecl blArrayReplaceU8(BLArrayCore* self, size_t index, uint8_t value) ; -BLResult __cdecl blArrayReplaceU16(BLArrayCore* self, size_t index, uint16_t value) ; -BLResult __cdecl blArrayReplaceU32(BLArrayCore* self, size_t index, uint32_t value) ; -BLResult __cdecl blArrayReplaceU64(BLArrayCore* self, size_t index, uint64_t value) ; -BLResult __cdecl blArrayReplaceF32(BLArrayCore* self, size_t index, float value) ; -BLResult __cdecl blArrayReplaceF64(BLArrayCore* self, size_t index, double value) ; -BLResult __cdecl blArrayReplaceItem(BLArrayCore* self, size_t index, const void* item) ; -BLResult __cdecl blArrayReplaceView(BLArrayCore* self, const BLRange* range, const void* items, size_t n) ; -BLResult __cdecl blArrayRemoveIndex(BLArrayCore* self, size_t index) ; -BLResult __cdecl blArrayRemoveRange(BLArrayCore* self, const BLRange* range) ; -bool __cdecl blArrayEquals(const BLArrayCore* a, const BLArrayCore* b) ; - -]] - -ffi.cdef[[ -//! \name BLContext - -BLResult __cdecl blContextInit(BLContextCore* self) ; -BLResult __cdecl blContextInitAs(BLContextCore* self, BLImageCore* image, const BLContextCreateOptions* options) ; -BLResult __cdecl blContextReset(BLContextCore* self) ; -BLResult __cdecl blContextAssignMove(BLContextCore* self, BLContextCore* other) ; -BLResult __cdecl blContextAssignWeak(BLContextCore* self, const BLContextCore* other) ; -BLResult __cdecl blContextBegin(BLContextCore* self, BLImageCore* image, const BLContextCreateOptions* options) ; -BLResult __cdecl blContextEnd(BLContextCore* self) ; -BLResult __cdecl blContextFlush(BLContextCore* self, uint32_t flags) ; -BLResult __cdecl blContextSave(BLContextCore* self, BLContextCookie* cookie) ; -BLResult __cdecl blContextRestore(BLContextCore* self, const BLContextCookie* cookie) ; -BLResult __cdecl blContextUserToMeta(BLContextCore* self) ; -BLResult __cdecl blContextMatrixOp(BLContextCore* self, uint32_t opType, const void* opData) ; -BLResult __cdecl blContextSetHint(BLContextCore* self, uint32_t hintType, uint32_t value) ; -BLResult __cdecl blContextSetHints(BLContextCore* self, const BLContextHints* hints) ; -BLResult __cdecl blContextSetFlattenMode(BLContextCore* self, uint32_t mode) ; -BLResult __cdecl blContextSetFlattenTolerance(BLContextCore* self, double tolerance) ; -BLResult __cdecl blContextSetApproximationOptions(BLContextCore* self, const BLApproximationOptions* options) ; -BLResult __cdecl blContextSetCompOp(BLContextCore* self, uint32_t compOp) ; -BLResult __cdecl blContextSetGlobalAlpha(BLContextCore* self, double alpha) ; -BLResult __cdecl blContextSetFillRule(BLContextCore* self, uint32_t fillRule) ; -BLResult __cdecl blContextSetFillAlpha(BLContextCore* self, double alpha) ; -BLResult __cdecl blContextGetFillStyle(const BLContextCore* self, void* object) ; -BLResult __cdecl blContextGetFillStyleRgba32(const BLContextCore* self, uint32_t* rgba32) ; -BLResult __cdecl blContextGetFillStyleRgba64(const BLContextCore* self, uint64_t* rgba64) ; -BLResult __cdecl blContextSetFillStyle(BLContextCore* self, const void* object) ; -BLResult __cdecl blContextSetFillStyleRgba32(BLContextCore* self, uint32_t rgba32) ; -BLResult __cdecl blContextSetFillStyleRgba64(BLContextCore* self, uint64_t rgba64) ; -BLResult __cdecl blContextSetStrokeWidth(BLContextCore* self, double width) ; -BLResult __cdecl blContextSetStrokeMiterLimit(BLContextCore* self, double miterLimit) ; -BLResult __cdecl blContextSetStrokeCap(BLContextCore* self, uint32_t position, uint32_t strokeCap) ; -BLResult __cdecl blContextSetStrokeCaps(BLContextCore* self, uint32_t strokeCap) ; -BLResult __cdecl blContextSetStrokeJoin(BLContextCore* self, uint32_t strokeJoin) ; -BLResult __cdecl blContextSetStrokeDashOffset(BLContextCore* self, double dashOffset) ; -BLResult __cdecl blContextSetStrokeDashArray(BLContextCore* self, const BLArrayCore* dashArray) ; -BLResult __cdecl blContextSetStrokeTransformOrder(BLContextCore* self, uint32_t transformOrder) ; -BLResult __cdecl blContextSetStrokeOptions(BLContextCore* self, const BLStrokeOptionsCore* options) ; -BLResult __cdecl blContextSetStrokeAlpha(BLContextCore* self, double alpha) ; -BLResult __cdecl blContextGetStrokeStyle(const BLContextCore* self, void* object) ; -BLResult __cdecl blContextGetStrokeStyleRgba32(const BLContextCore* self, uint32_t* rgba32) ; -BLResult __cdecl blContextGetStrokeStyleRgba64(const BLContextCore* self, uint64_t* rgba64) ; -BLResult __cdecl blContextSetStrokeStyle(BLContextCore* self, const void* object) ; -BLResult __cdecl blContextSetStrokeStyleRgba32(BLContextCore* self, uint32_t rgba32) ; -BLResult __cdecl blContextSetStrokeStyleRgba64(BLContextCore* self, uint64_t rgba64) ; -BLResult __cdecl blContextClipToRectI(BLContextCore* self, const BLRectI* rect) ; -BLResult __cdecl blContextClipToRectD(BLContextCore* self, const BLRect* rect) ; -BLResult __cdecl blContextRestoreClipping(BLContextCore* self) ; -BLResult __cdecl blContextClearAll(BLContextCore* self) ; -BLResult __cdecl blContextClearRectI(BLContextCore* self, const BLRectI* rect) ; -BLResult __cdecl blContextClearRectD(BLContextCore* self, const BLRect* rect) ; -BLResult __cdecl blContextFillAll(BLContextCore* self) ; -BLResult __cdecl blContextFillRectI(BLContextCore* self, const BLRectI* rect) ; -BLResult __cdecl blContextFillRectD(BLContextCore* self, const BLRect* rect) ; -BLResult __cdecl blContextFillPathD(BLContextCore* self, const BLPathCore* path) ; -BLResult __cdecl blContextFillGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) ; -BLResult __cdecl blContextFillTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; -BLResult __cdecl blContextFillTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; -BLResult __cdecl blContextFillGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; -BLResult __cdecl blContextFillGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; -BLResult __cdecl blContextStrokeRectI(BLContextCore* self, const BLRectI* rect) ; -BLResult __cdecl blContextStrokeRectD(BLContextCore* self, const BLRect* rect) ; -BLResult __cdecl blContextStrokePathD(BLContextCore* self, const BLPathCore* path) ; -BLResult __cdecl blContextStrokeGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) ; -BLResult __cdecl blContextStrokeTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; -BLResult __cdecl blContextStrokeTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; -BLResult __cdecl blContextStrokeGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; -BLResult __cdecl blContextStrokeGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; -BLResult __cdecl blContextBlitImageI(BLContextCore* self, const BLPointI* pt, const BLImageCore* img, const BLRectI* imgArea) ; -BLResult __cdecl blContextBlitImageD(BLContextCore* self, const BLPoint* pt, const BLImageCore* img, const BLRectI* imgArea) ; -BLResult __cdecl blContextBlitScaledImageI(BLContextCore* self, const BLRectI* rect, const BLImageCore* img, const BLRectI* imgArea) ; -BLResult __cdecl blContextBlitScaledImageD(BLContextCore* self, const BLRect* rect, const BLImageCore* img, const BLRectI* imgArea) ; - -]] - -ffi.cdef[[ -//! \name BLFile - -BLResult __cdecl blFileInit(BLFileCore* self) ; -BLResult __cdecl blFileReset(BLFileCore* self) ; -BLResult __cdecl blFileOpen(BLFileCore* self, const char* fileName, uint32_t openFlags) ; -BLResult __cdecl blFileClose(BLFileCore* self) ; -BLResult __cdecl blFileSeek(BLFileCore* self, int64_t offset, uint32_t seekType, int64_t* positionOut) ; -BLResult __cdecl blFileRead(BLFileCore* self, void* buffer, size_t n, size_t* bytesReadOut) ; -BLResult __cdecl blFileWrite(BLFileCore* self, const void* buffer, size_t n, size_t* bytesWrittenOut) ; -BLResult __cdecl blFileTruncate(BLFileCore* self, int64_t maxSize) ; -BLResult __cdecl blFileGetSize(BLFileCore* self, uint64_t* fileSizeOut) ; - -]] - -ffi.cdef[[ -//! \name BLFileSystem - -BLResult __cdecl blFileSystemReadFile(const char* fileName, BLArrayCore* dst, size_t maxSize) ; -BLResult __cdecl blFileSystemWriteFile(const char* fileName, const void* data, size_t size, size_t* bytesWrittenOut) ; - -]] - -ffi.cdef[[ -//! \name BLFont - -BLResult __cdecl blFontInit(BLFontCore* self) ; -BLResult __cdecl blFontReset(BLFontCore* self) ; -BLResult __cdecl blFontAssignMove(BLFontCore* self, BLFontCore* other) ; -BLResult __cdecl blFontAssignWeak(BLFontCore* self, const BLFontCore* other) ; -bool __cdecl blFontEquals(const BLFontCore* a, const BLFontCore* b) ; -BLResult __cdecl blFontCreateFromFace(BLFontCore* self, const BLFontFaceCore* face, float size) ; -BLResult __cdecl blFontShape(const BLFontCore* self, BLGlyphBufferCore* buf) ; -BLResult __cdecl blFontMapTextToGlyphs(const BLFontCore* self, BLGlyphBufferCore* buf, BLGlyphMappingState* stateOut) ; -BLResult __cdecl blFontPositionGlyphs(const BLFontCore* self, BLGlyphBufferCore* buf, uint32_t positioningFlags) ; -BLResult __cdecl blFontApplyKerning(const BLFontCore* self, BLGlyphBufferCore* buf) ; -BLResult __cdecl blFontApplyGSub(const BLFontCore* self, BLGlyphBufferCore* buf, size_t index, BLBitWord lookups) ; -BLResult __cdecl blFontApplyGPos(const BLFontCore* self, BLGlyphBufferCore* buf, size_t index, BLBitWord lookups) ; -BLResult __cdecl blFontGetMatrix(const BLFontCore* self, BLFontMatrix* out) ; -BLResult __cdecl blFontGetMetrics(const BLFontCore* self, BLFontMetrics* out) ; -BLResult __cdecl blFontGetDesignMetrics(const BLFontCore* self, BLFontDesignMetrics* out) ; -BLResult __cdecl blFontGetTextMetrics(const BLFontCore* self, BLGlyphBufferCore* buf, BLTextMetrics* out) ; -BLResult __cdecl blFontGetGlyphBounds(const BLFontCore* self, const void* glyphIdData, intptr_t glyphIdAdvance, BLBoxI* out, size_t count) ; -BLResult __cdecl blFontGetGlyphAdvances(const BLFontCore* self, const void* glyphIdData, intptr_t glyphIdAdvance, BLGlyphPlacement* out, size_t count) ; -BLResult __cdecl blFontGetGlyphOutlines(const BLFontCore* self, uint32_t glyphId, const BLMatrix2D* userMatrix, BLPathCore* out, BLPathSinkFunc sink, void* closure) ; -BLResult __cdecl blFontGetGlyphRunOutlines(const BLFontCore* self, const BLGlyphRun* glyphRun, const BLMatrix2D* userMatrix, BLPathCore* out, BLPathSinkFunc sink, void* closure) ; - -]] - -ffi.cdef[[ -//! \name BLFontData - -BLResult __cdecl blFontDataInit(BLFontDataCore* self) ; -BLResult __cdecl blFontDataReset(BLFontDataCore* self) ; -BLResult __cdecl blFontDataAssignMove(BLFontDataCore* self, BLFontDataCore* other) ; -BLResult __cdecl blFontDataAssignWeak(BLFontDataCore* self, const BLFontDataCore* other) ; -bool __cdecl blFontDataEquals(const BLFontDataCore* a, const BLFontDataCore* b) ; -BLResult __cdecl blFontDataListTags(const BLFontDataCore* self, BLArrayCore* dst) ; -size_t __cdecl blFontDataQueryTables(const BLFontDataCore* self, BLFontTable* dst, const BLTag* tags, size_t count) ; - -]] - -ffi.cdef[[ -//! \name BLFontFace - -BLResult __cdecl blFontFaceInit(BLFontFaceCore* self) ; -BLResult __cdecl blFontFaceReset(BLFontFaceCore* self) ; -BLResult __cdecl blFontFaceAssignMove(BLFontFaceCore* self, BLFontFaceCore* other) ; -BLResult __cdecl blFontFaceAssignWeak(BLFontFaceCore* self, const BLFontFaceCore* other) ; -bool __cdecl blFontFaceEquals(const BLFontFaceCore* a, const BLFontFaceCore* b) ; -BLResult __cdecl blFontFaceCreateFromFile(BLFontFaceCore* self, const char* fileName) ; -BLResult __cdecl blFontFaceCreateFromLoader(BLFontFaceCore* self, const BLFontLoaderCore* loader, uint32_t faceIndex) ; -BLResult __cdecl blFontFaceGetFaceInfo(const BLFontFaceCore* self, BLFontFaceInfo* out) ; -BLResult __cdecl blFontFaceGetDesignMetrics(const BLFontFaceCore* self, BLFontDesignMetrics* out) ; -BLResult __cdecl blFontFaceGetUnicodeCoverage(const BLFontFaceCore* self, BLFontUnicodeCoverage* out) ; - -]] - -ffi.cdef[[ -//! \name BLFontLoader - -BLResult __cdecl blFontLoaderInit(BLFontLoaderCore* self) ; -BLResult __cdecl blFontLoaderReset(BLFontLoaderCore* self) ; -BLResult __cdecl blFontLoaderAssignMove(BLFontLoaderCore* self, BLFontLoaderCore* other) ; -BLResult __cdecl blFontLoaderAssignWeak(BLFontLoaderCore* self, const BLFontLoaderCore* other) ; -bool __cdecl blFontLoaderEquals(const BLFontLoaderCore* a, const BLFontLoaderCore* b) ; -BLResult __cdecl blFontLoaderCreateFromFile(BLFontLoaderCore* self, const char* fileName) ; -BLResult __cdecl blFontLoaderCreateFromDataArray(BLFontLoaderCore* self, const BLArrayCore* dataArray) ; -BLResult __cdecl blFontLoaderCreateFromData(BLFontLoaderCore* self, const void* data, size_t size, BLDestroyImplFunc destroyFunc, void* destroyData) ; -BLFontDataImpl* __cdecl blFontLoaderDataByFaceIndex(BLFontLoaderCore* self, uint32_t faceIndex) ; - -]] - -ffi.cdef[[ -//! \name BLFormat - -BLResult __cdecl blFormatInfoSanitize(BLFormatInfo* self) ; - -]] - -ffi.cdef[[ -//! \name BLGlyphBuffer - -BLResult __cdecl blGlyphBufferInit(BLGlyphBufferCore* self) ; -BLResult __cdecl blGlyphBufferReset(BLGlyphBufferCore* self) ; -BLResult __cdecl blGlyphBufferClear(BLGlyphBufferCore* self) ; -BLResult __cdecl blGlyphBufferSetText(BLGlyphBufferCore* self, const void* data, size_t size, uint32_t encoding) ; -BLResult __cdecl blGlyphBufferSetGlyphIds(BLGlyphBufferCore* self, const void* data, intptr_t advance, size_t size) ; -]] - -ffi.cdef[[ -//! \name BLGradient - -BLResult __cdecl blGradientInit(BLGradientCore* self) ; -BLResult __cdecl blGradientInitAs(BLGradientCore* self, uint32_t type, const void* values, uint32_t extendMode, const BLGradientStop* stops, size_t n, const BLMatrix2D* m) ; -BLResult __cdecl blGradientReset(BLGradientCore* self) ; -BLResult __cdecl blGradientAssignMove(BLGradientCore* self, BLGradientCore* other) ; -BLResult __cdecl blGradientAssignWeak(BLGradientCore* self, const BLGradientCore* other) ; -BLResult __cdecl blGradientCreate(BLGradientCore* self, uint32_t type, const void* values, uint32_t extendMode, const BLGradientStop* stops, size_t n, const BLMatrix2D* m) ; -BLResult __cdecl blGradientShrink(BLGradientCore* self) ; -BLResult __cdecl blGradientReserve(BLGradientCore* self, size_t n) ; -uint32_t __cdecl blGradientGetType(const BLGradientCore* self) ; -BLResult __cdecl blGradientSetType(BLGradientCore* self, uint32_t type) ; -double __cdecl blGradientGetValue(const BLGradientCore* self, size_t index) ; -BLResult __cdecl blGradientSetValue(BLGradientCore* self, size_t index, double value) ; -BLResult __cdecl blGradientSetValues(BLGradientCore* self, size_t index, const double* values, size_t n) ; -uint32_t __cdecl blGradientGetExtendMode(BLGradientCore* self) ; -BLResult __cdecl blGradientSetExtendMode(BLGradientCore* self, uint32_t extendMode) ; -const BLGradientStop* __cdecl blGradientGetStops(const BLGradientCore* self) ; -size_t __cdecl blGradientGetSize(const BLGradientCore* self) ; -size_t __cdecl blGradientGetCapacity(const BLGradientCore* self) ; -BLResult __cdecl blGradientResetStops(BLGradientCore* self) ; -BLResult __cdecl blGradientAssignStops(BLGradientCore* self, const BLGradientStop* stops, size_t n) ; -BLResult __cdecl blGradientAddStopRgba32(BLGradientCore* self, double offset, uint32_t argb32) ; -BLResult __cdecl blGradientAddStopRgba64(BLGradientCore* self, double offset, uint64_t argb64) ; -BLResult __cdecl blGradientRemoveStop(BLGradientCore* self, size_t index) ; -BLResult __cdecl blGradientRemoveStopByOffset(BLGradientCore* self, double offset, uint32_t all) ; -BLResult __cdecl blGradientRemoveStops(BLGradientCore* self, const BLRange* range) ; -BLResult __cdecl blGradientRemoveStopsFromTo(BLGradientCore* self, double offsetMin, double offsetMax) ; -BLResult __cdecl blGradientReplaceStopRgba32(BLGradientCore* self, size_t index, double offset, uint32_t rgba32) ; -BLResult __cdecl blGradientReplaceStopRgba64(BLGradientCore* self, size_t index, double offset, uint64_t rgba64) ; -size_t __cdecl blGradientIndexOfStop(const BLGradientCore* self, double offset) ; -BLResult __cdecl blGradientApplyMatrixOp(BLGradientCore* self, uint32_t opType, const void* opData) ; -bool __cdecl blGradientEquals(const BLGradientCore* a, const BLGradientCore* b) ; - -]] - -ffi.cdef[[ -//! \name BLImage - -BLResult __cdecl blImageInit(BLImageCore* self) ; -BLResult __cdecl blImageInitAs(BLImageCore* self, int w, int h, uint32_t format) ; -BLResult __cdecl blImageInitAsFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) ; -BLResult __cdecl blImageReset(BLImageCore* self) ; -BLResult __cdecl blImageAssignMove(BLImageCore* self, BLImageCore* other) ; -BLResult __cdecl blImageAssignWeak(BLImageCore* self, const BLImageCore* other) ; -BLResult __cdecl blImageAssignDeep(BLImageCore* self, const BLImageCore* other) ; -BLResult __cdecl blImageCreate(BLImageCore* self, int w, int h, uint32_t format) ; -BLResult __cdecl blImageCreateFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) ; -BLResult __cdecl blImageGetData(const BLImageCore* self, BLImageData* dataOut) ; -BLResult __cdecl blImageMakeMutable(BLImageCore* self, BLImageData* dataOut) ; -bool __cdecl blImageEquals(const BLImageCore* a, const BLImageCore* b) ; -BLResult __cdecl blImageScale(BLImageCore* dst, const BLImageCore* src, const BLSizeI* size, uint32_t filter, const BLImageScaleOptions* options) ; -BLResult __cdecl blImageReadFromFile(BLImageCore* self, const char* fileName, const BLArrayCore* codecs) ; -BLResult __cdecl blImageReadFromData(BLImageCore* self, const void* data, size_t size, const BLArrayCore* codecs) ; -BLResult __cdecl blImageWriteToFile(const BLImageCore* self, const char* fileName, const BLImageCodecCore* codec) ; -BLResult __cdecl blImageWriteToData(const BLImageCore* self, BLArrayCore* dst, const BLImageCodecCore* codec) ; - -]] - -ffi.cdef[[ -//! \name BLImageCodec - -BLResult __cdecl blImageCodecInit(BLImageCodecCore* self) ; -BLResult __cdecl blImageCodecReset(BLImageCodecCore* self) ; -BLResult __cdecl blImageCodecAssignWeak(BLImageCodecCore* self, const BLImageCodecCore* other) ; -BLResult __cdecl blImageCodecFindByName(BLImageCodecCore* self, const BLArrayCore* codecs, const char* name) ; -BLResult __cdecl blImageCodecFindByData(BLImageCodecCore* self, const BLArrayCore* codecs, const void* data, size_t size) ; -uint32_t __cdecl blImageCodecInspectData(const BLImageCodecCore* self, const void* data, size_t size) ; -BLResult __cdecl blImageCodecCreateDecoder(const BLImageCodecCore* self, BLImageDecoderCore* dst) ; -BLResult __cdecl blImageCodecCreateEncoder(const BLImageCodecCore* self, BLImageEncoderCore* dst) ; -BLArrayCore* __cdecl blImageCodecBuiltInCodecs(void) ; - -]] - -ffi.cdef[[ -//! \name BLImageDecoder - -BLResult __cdecl blImageDecoderInit(BLImageDecoderCore* self) ; -BLResult __cdecl blImageDecoderReset(BLImageDecoderCore* self) ; -BLResult __cdecl blImageDecoderAssignMove(BLImageDecoderCore* self, BLImageDecoderCore* other) ; -BLResult __cdecl blImageDecoderAssignWeak(BLImageDecoderCore* self, const BLImageDecoderCore* other) ; -BLResult __cdecl blImageDecoderRestart(BLImageDecoderCore* self) ; -BLResult __cdecl blImageDecoderReadInfo(BLImageDecoderCore* self, BLImageInfo* infoOut, const uint8_t* data, size_t size) ; -BLResult __cdecl blImageDecoderReadFrame(BLImageDecoderCore* self, BLImageCore* imageOut, const uint8_t* data, size_t size) ; - -]] - -ffi.cdef[[ -//! \name BLImageEncoder - -BLResult __cdecl blImageEncoderInit(BLImageEncoderCore* self) ; -BLResult __cdecl blImageEncoderReset(BLImageEncoderCore* self) ; -BLResult __cdecl blImageEncoderAssignMove(BLImageEncoderCore* self, BLImageEncoderCore* other) ; -BLResult __cdecl blImageEncoderAssignWeak(BLImageEncoderCore* self, const BLImageEncoderCore* other) ; -BLResult __cdecl blImageEncoderRestart(BLImageEncoderCore* self) ; -BLResult __cdecl blImageEncoderWriteFrame(BLImageEncoderCore* self, BLArrayCore* dst, const BLImageCore* image) ; - -]] - -ffi.cdef[[ -//! \name BLMatrix2D - -BLResult __cdecl blMatrix2DSetIdentity(BLMatrix2D* self) ; -BLResult __cdecl blMatrix2DSetTranslation(BLMatrix2D* self, double x, double y) ; -BLResult __cdecl blMatrix2DSetScaling(BLMatrix2D* self, double x, double y) ; -BLResult __cdecl blMatrix2DSetSkewing(BLMatrix2D* self, double x, double y) ; -BLResult __cdecl blMatrix2DSetRotation(BLMatrix2D* self, double angle, double cx, double cy) ; -BLResult __cdecl blMatrix2DApplyOp(BLMatrix2D* self, uint32_t opType, const void* opData) ; -BLResult __cdecl blMatrix2DInvert(BLMatrix2D* dst, const BLMatrix2D* src) ; -uint32_t __cdecl blMatrix2DGetType(const BLMatrix2D* self) ; -BLResult __cdecl blMatrix2DMapPointDArray(const BLMatrix2D* self, BLPoint* dst, const BLPoint* src, size_t count) ; - -]] - -ffi.cdef[[ -//! \name BLPath - -BLResult __cdecl blPathInit(BLPathCore* self) ; -BLResult __cdecl blPathReset(BLPathCore* self) ; -size_t __cdecl blPathGetSize(const BLPathCore* self) ; -size_t __cdecl blPathGetCapacity(const BLPathCore* self) ; -const uint8_t* __cdecl blPathGetCommandData(const BLPathCore* self) ; -const BLPoint* __cdecl blPathGetVertexData(const BLPathCore* self) ; -BLResult __cdecl blPathClear(BLPathCore* self) ; -BLResult __cdecl blPathShrink(BLPathCore* self) ; -BLResult __cdecl blPathReserve(BLPathCore* self, size_t n) ; -BLResult __cdecl blPathModifyOp(BLPathCore* self, uint32_t op, size_t n, uint8_t** cmdDataOut, BLPoint** vtxDataOut) ; -BLResult __cdecl blPathAssignMove(BLPathCore* self, BLPathCore* other) ; -BLResult __cdecl blPathAssignWeak(BLPathCore* self, const BLPathCore* other) ; -BLResult __cdecl blPathAssignDeep(BLPathCore* self, const BLPathCore* other) ; -BLResult __cdecl blPathSetVertexAt(BLPathCore* self, size_t index, uint32_t cmd, double x, double y) ; -BLResult __cdecl blPathMoveTo(BLPathCore* self, double x0, double y0) ; -BLResult __cdecl blPathLineTo(BLPathCore* self, double x1, double y1) ; -BLResult __cdecl blPathPolyTo(BLPathCore* self, const BLPoint* poly, size_t count) ; -BLResult __cdecl blPathQuadTo(BLPathCore* self, double x1, double y1, double x2, double y2) ; -BLResult __cdecl blPathCubicTo(BLPathCore* self, double x1, double y1, double x2, double y2, double x3, double y3) ; -BLResult __cdecl blPathSmoothQuadTo(BLPathCore* self, double x2, double y2) ; -BLResult __cdecl blPathSmoothCubicTo(BLPathCore* self, double x2, double y2, double x3, double y3) ; -BLResult __cdecl blPathArcTo(BLPathCore* self, double x, double y, double rx, double ry, double start, double sweep, bool forceMoveTo) ; -BLResult __cdecl blPathArcQuadrantTo(BLPathCore* self, double x1, double y1, double x2, double y2) ; -BLResult __cdecl blPathEllipticArcTo(BLPathCore* self, double rx, double ry, double xAxisRotation, bool largeArcFlag, bool sweepFlag, double x1, double y1) ; -BLResult __cdecl blPathClose(BLPathCore* self) ; -BLResult __cdecl blPathAddGeometry(BLPathCore* self, uint32_t geometryType, const void* geometryData, const BLMatrix2D* m, uint32_t dir) ; -BLResult __cdecl blPathAddBoxI(BLPathCore* self, const BLBoxI* box, uint32_t dir) ; -BLResult __cdecl blPathAddBoxD(BLPathCore* self, const BLBox* box, uint32_t dir) ; -BLResult __cdecl blPathAddRectI(BLPathCore* self, const BLRectI* rect, uint32_t dir) ; -BLResult __cdecl blPathAddRectD(BLPathCore* self, const BLRect* rect, uint32_t dir) ; -BLResult __cdecl blPathAddPath(BLPathCore* self, const BLPathCore* other, const BLRange* range) ; -BLResult __cdecl blPathAddTranslatedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, const BLPoint* p) ; -BLResult __cdecl blPathAddTransformedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, const BLMatrix2D* m) ; -BLResult __cdecl blPathAddReversedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, uint32_t reverseMode) ; -BLResult __cdecl blPathAddStrokedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, const BLStrokeOptionsCore* options, const BLApproximationOptions* approx) ; -BLResult __cdecl blPathTranslate(BLPathCore* self, const BLRange* range, const BLPoint* p) ; -BLResult __cdecl blPathTransform(BLPathCore* self, const BLRange* range, const BLMatrix2D* m) ; -BLResult __cdecl blPathFitTo(BLPathCore* self, const BLRange* range, const BLRect* rect, uint32_t fitFlags) ; -bool __cdecl blPathEquals(const BLPathCore* a, const BLPathCore* b) ; -BLResult __cdecl blPathGetInfoFlags(const BLPathCore* self, uint32_t* flagsOut) ; -BLResult __cdecl blPathGetControlBox(const BLPathCore* self, BLBox* boxOut) ; -BLResult __cdecl blPathGetBoundingBox(const BLPathCore* self, BLBox* boxOut) ; -BLResult __cdecl blPathGetFigureRange(const BLPathCore* self, size_t index, BLRange* rangeOut) ; -BLResult __cdecl blPathGetLastVertex(const BLPathCore* self, BLPoint* vtxOut) ; -BLResult __cdecl blPathGetClosestVertex(const BLPathCore* self, const BLPoint* p, double maxDistance, size_t* indexOut, double* distanceOut) ; -uint32_t __cdecl blPathHitTest(const BLPathCore* self, const BLPoint* p, uint32_t fillRule) ; - -]] - -ffi.cdef[[ -//! \name BLPattern - -BLResult __cdecl blPatternInit(BLPatternCore* self) ; -BLResult __cdecl blPatternInitAs(BLPatternCore* self, const BLImageCore* image, const BLRectI* area, uint32_t extendMode, const BLMatrix2D* m) ; -BLResult __cdecl blPatternReset(BLPatternCore* self) ; -BLResult __cdecl blPatternAssignMove(BLPatternCore* self, BLPatternCore* other) ; -BLResult __cdecl blPatternAssignWeak(BLPatternCore* self, const BLPatternCore* other) ; -BLResult __cdecl blPatternAssignDeep(BLPatternCore* self, const BLPatternCore* other) ; -BLResult __cdecl blPatternCreate(BLPatternCore* self, const BLImageCore* image, const BLRectI* area, uint32_t extendMode, const BLMatrix2D* m) ; -BLResult __cdecl blPatternSetImage(BLPatternCore* self, const BLImageCore* image, const BLRectI* area) ; -BLResult __cdecl blPatternSetArea(BLPatternCore* self, const BLRectI* area) ; -BLResult __cdecl blPatternSetExtendMode(BLPatternCore* self, uint32_t extendMode) ; -BLResult __cdecl blPatternApplyMatrixOp(BLPatternCore* self, uint32_t opType, const void* opData) ; -bool __cdecl blPatternEquals(const BLPatternCore* a, const BLPatternCore* b) ; - -]] - -ffi.cdef[[ -//! \name BLPixelConverter - -BLResult __cdecl blPixelConverterInit(BLPixelConverterCore* self) ; -BLResult __cdecl blPixelConverterInitWeak(BLPixelConverterCore* self, const BLPixelConverterCore* other) ; -BLResult __cdecl blPixelConverterReset(BLPixelConverterCore* self) ; -BLResult __cdecl blPixelConverterAssign(BLPixelConverterCore* self, const BLPixelConverterCore* other) ; -BLResult __cdecl blPixelConverterCreate(BLPixelConverterCore* self, const BLFormatInfo* dstInfo, const BLFormatInfo* srcInfo) ; - -BLResult __cdecl blPixelConverterConvert(const BLPixelConverterCore* self, - void* dstData, intptr_t dstStride, - const void* srcData, intptr_t srcStride, - uint32_t w, uint32_t h, const BLPixelConverterOptions* options) ; - -]] - -ffi.cdef[[ -//! \name BLRandom - -void __cdecl blRandomReset(BLRandom* self, uint64_t seed) ; -uint32_t __cdecl blRandomNextUInt32(BLRandom* self) ; -uint64_t __cdecl blRandomNextUInt64(BLRandom* self) ; -double __cdecl blRandomNextDouble(BLRandom* self) ; - -]] - -ffi.cdef[[ -//! \name BLRegion - -BLResult __cdecl blRegionInit(BLRegionCore* self) ; -BLResult __cdecl blRegionReset(BLRegionCore* self) ; -BLResult __cdecl blRegionClear(BLRegionCore* self) ; -BLResult __cdecl blRegionShrink(BLRegionCore* self) ; -BLResult __cdecl blRegionReserve(BLRegionCore* self, size_t n) ; -BLResult __cdecl blRegionAssignMove(BLRegionCore* self, BLRegionCore* other) ; -BLResult __cdecl blRegionAssignWeak(BLRegionCore* self, const BLRegionCore* other) ; -BLResult __cdecl blRegionAssignDeep(BLRegionCore* self, const BLRegionCore* other) ; -BLResult __cdecl blRegionAssignBoxI(BLRegionCore* self, const BLBoxI* src) ; -BLResult __cdecl blRegionAssignBoxIArray(BLRegionCore* self, const BLBoxI* data, size_t n) ; -BLResult __cdecl blRegionAssignRectI(BLRegionCore* self, const BLRectI* rect) ; -BLResult __cdecl blRegionAssignRectIArray(BLRegionCore* self, const BLRectI* data, size_t n) ; -BLResult __cdecl blRegionCombine(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, uint32_t op) ; -BLResult __cdecl blRegionCombineRB(BLRegionCore* self, const BLRegionCore* a, const BLBoxI* b, uint32_t op) ; -BLResult __cdecl blRegionCombineBR(BLRegionCore* self, const BLBoxI* a, const BLRegionCore* b, uint32_t op) ; -BLResult __cdecl blRegionCombineBB(BLRegionCore* self, const BLBoxI* a, const BLBoxI* b, uint32_t op) ; -BLResult __cdecl blRegionTranslate(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt) ; -BLResult __cdecl blRegionTranslateAndClip(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt, const BLBoxI* clipBox) ; -BLResult __cdecl blRegionIntersectAndClip(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, const BLBoxI* clipBox) ; -bool __cdecl blRegionEquals(const BLRegionCore* a, const BLRegionCore* b) ; -uint32_t __cdecl blRegionGetType(const BLRegionCore* self) ; -uint32_t __cdecl blRegionHitTest(const BLRegionCore* self, const BLPointI* pt) ; -uint32_t __cdecl blRegionHitTestBoxI(const BLRegionCore* self, const BLBoxI* box) ; - -]] - -ffi.cdef[[ -//! \name BLRuntime - -BLResult __cdecl blRuntimeInit() ; -BLResult __cdecl blRuntimeShutdown() ; -BLResult __cdecl blRuntimeCleanup(uint32_t cleanupFlags) ; -BLResult __cdecl blRuntimeQueryInfo(uint32_t infoType, void* infoOut) ; -BLResult __cdecl blRuntimeMessageOut(const char* msg) ; -BLResult __cdecl blRuntimeMessageFmt(const char* fmt, ...) ; -BLResult __cdecl blRuntimeMessageVFmt(const char* fmt, va_list ap) ; -uint32_t __cdecl blRuntimeGetTickCount(void) ; -]] - -ffi.cdef[[ - void __cdecl blRuntimeAssertionFailure(const char* file, int line, const char* msg) ; -]] - - -if _WIN32 then -ffi.cdef[[ -BLResult __cdecl blResultFromWinError(uint32_t e) ; -]] -else -ffi.cdef[[ -BLResult __cdecl blResultFromPosixError(int e) ; -]] -end - -ffi.cdef[[ -//! \name BLString - -BLResult __cdecl blStringInit(BLStringCore* self) ; -BLResult __cdecl blStringReset(BLStringCore* self) ; -size_t __cdecl blStringGetSize(const BLStringCore* self) ; -size_t __cdecl blStringGetCapacity(const BLStringCore* self) ; -const char* __cdecl blStringGetData(const BLStringCore* self) ; -BLResult __cdecl blStringClear(BLStringCore* self) ; -BLResult __cdecl blStringShrink(BLStringCore* self) ; -BLResult __cdecl blStringReserve(BLStringCore* self, size_t n) ; -BLResult __cdecl blStringResize(BLStringCore* self, size_t n, char fill) ; -BLResult __cdecl blStringMakeMutable(BLStringCore* self, char** dataOut) ; -BLResult __cdecl blStringModifyOp(BLStringCore* self, uint32_t op, size_t n, char** dataOut) ; -BLResult __cdecl blStringInsertOp(BLStringCore* self, size_t index, size_t n, char** dataOut) ; -BLResult __cdecl blStringAssignMove(BLStringCore* self, BLStringCore* other) ; -BLResult __cdecl blStringAssignWeak(BLStringCore* self, const BLStringCore* other) ; -BLResult __cdecl blStringAssignDeep(BLStringCore* self, const BLStringCore* other) ; -BLResult __cdecl blStringAssignData(BLStringCore* self, const char* str, size_t n) ; -BLResult __cdecl blStringApplyOpChar(BLStringCore* self, uint32_t op, char c, size_t n) ; -BLResult __cdecl blStringApplyOpData(BLStringCore* self, uint32_t op, const char* str, size_t n) ; -BLResult __cdecl blStringApplyOpString(BLStringCore* self, uint32_t op, const BLStringCore* other) ; -BLResult __cdecl blStringApplyOpFormat(BLStringCore* self, uint32_t op, const char* fmt, ...) ; -BLResult __cdecl blStringApplyOpFormatV(BLStringCore* self, uint32_t op, const char* fmt, va_list ap) ; -BLResult __cdecl blStringInsertChar(BLStringCore* self, size_t index, char c, size_t n) ; -BLResult __cdecl blStringInsertData(BLStringCore* self, size_t index, const char* str, size_t n) ; -BLResult __cdecl blStringInsertString(BLStringCore* self, size_t index, const BLStringCore* other) ; -BLResult __cdecl blStringRemoveRange(BLStringCore* self, const BLRange* range) ; -bool __cdecl blStringEquals(const BLStringCore* self, const BLStringCore* other) ; -bool __cdecl blStringEqualsData(const BLStringCore* self, const char* str, size_t n) ; -int __cdecl blStringCompare(const BLStringCore* self, const BLStringCore* other) ; -int __cdecl blStringCompareData(const BLStringCore* self, const char* str, size_t n) ; - -]] - -ffi.cdef[[ -//! \name BLStrokeOptions - -BLResult __cdecl blStrokeOptionsInit(BLStrokeOptionsCore* self) ; -BLResult __cdecl blStrokeOptionsInitMove(BLStrokeOptionsCore* self, BLStrokeOptionsCore* other) ; -BLResult __cdecl blStrokeOptionsInitWeak(BLStrokeOptionsCore* self, const BLStrokeOptionsCore* other) ; -BLResult __cdecl blStrokeOptionsReset(BLStrokeOptionsCore* self) ; -BLResult __cdecl blStrokeOptionsAssignMove(BLStrokeOptionsCore* self, BLStrokeOptionsCore* other) ; -BLResult __cdecl blStrokeOptionsAssignWeak(BLStrokeOptionsCore* self, const BLStrokeOptionsCore* other) ; - -]] - -ffi.cdef[[ -//! \name BLVariant - -BLResult __cdecl blVariantInit(void* self) ; -BLResult __cdecl blVariantInitMove(void* self, void* other) ; -BLResult __cdecl blVariantInitWeak(void* self, const void* other) ; -BLResult __cdecl blVariantReset(void* self) ; -uint32_t __cdecl blVariantGetImplType(const void* self) ; -BLResult __cdecl blVariantAssignMove(void* self, void* other) ; -BLResult __cdecl blVariantAssignWeak(void* self, const void* other) ; -bool __cdecl blVariantEquals(const void* a, const void* b) ; - -]] - - -end -- BLEND2D_BLAPI_H - -return ffi.load("blend2d") \ No newline at end of file diff --git a/blend2d/blarray.lua b/blend2d/blarray.lua deleted file mode 100644 index c0b3615..0000000 --- a/blend2d/blarray.lua +++ /dev/null @@ -1,55 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") - -if not BLEND2D_BLARRAY_H then -BLEND2D_BLARRAY_H = true - -require("blend2d.blvariant") - ---[[ -// ============================================================================ -// [BLArray - Core] -// ============================================================================ ---]] - - -ffi.cdef[[ -//! Array container [C Interface - Impl]. -struct BLArrayImpl { - union { - struct { - void* data; - size_t size; - }; - - BLDataView view; - }; - - size_t capacity; - volatile size_t refCount; - uint8_t implType; - uint8_t implTraits; - uint16_t memPoolData; - uint8_t itemSize; - uint8_t dispatchType; - uint8_t reserved[2]; -}; -]] - -ffi.cdef[[ -//! Array container [C Interface - Core]. -struct BLArrayCore { - BLArrayImpl* impl; -}; -]] - - - -end -- BLEND2D_BLARRAY_H diff --git a/blend2d/blbitarray.lua b/blend2d/blbitarray.lua deleted file mode 100644 index dba4adc..0000000 --- a/blend2d/blbitarray.lua +++ /dev/null @@ -1,17 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] --- William - nothing here yet, but for completeness - -local ffi = require("ffi") - -if not BLEND2D_BLBITARRAY_H then -BLEND2D_BLBITARRAY_H = true - -require("blend2d.blapi") - -end -- BLEND2D_BLBITARRAY_H \ No newline at end of file diff --git a/blend2d/blcontext.lua b/blend2d/blcontext.lua deleted file mode 100644 index 4efe028..0000000 --- a/blend2d/blcontext.lua +++ /dev/null @@ -1,358 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLCONTEXT_H then -BLEND2D_BLCONTEXT_H = true - -local blapi = require("blend2d.blapi") - -require("blend2d.blfont"); -require("blend2d.blgeometry"); -require("blend2d.blimage"); -require("blend2d.blmatrix"); -require("blend2d.blpath"); -require("blend2d.blrgba"); -require("blend2d.blregion"); -require("blend2d.blvariant"); - - -ffi.cdef[[ -//! Rendering context type. -enum BLContextType { - BL_CONTEXT_TYPE_NONE = 0, - BL_CONTEXT_TYPE_DUMMY = 1, - BL_CONTEXT_TYPE_RASTER = 2, - BL_CONTEXT_TYPE_RASTER_ASYNC = 3, - - BL_CONTEXT_TYPE_COUNT = 4 -}; - -//! Rendering context hint. -enum BLContextHint { - BL_CONTEXT_HINT_RENDERING_QUALITY = 0, - BL_CONTEXT_HINT_GRADIENT_QUALITY = 1, - BL_CONTEXT_HINT_PATTERN_QUALITY = 2, - - BL_CONTEXT_HINT_COUNT = 8 -}; - -//! Describes a rendering operation type - fill or stroke. -//! -//! The rendering context allows to get and set fill & stroke options directly -//! or via "op" functions that take the rendering operation type and dispatch -//! to the right function. -enum BLContextOpType { - BL_CONTEXT_OP_TYPE_FILL = 0, - BL_CONTEXT_OP_TYPE_STROKE = 1, - - BL_CONTEXT_OP_TYPE_COUNT = 2 -}; - -//! Rendering context flush-flags, use with `BLContext::flush()`. -enum BLContextFlushFlags { - BL_CONTEXT_FLUSH_SYNC = 0x80000000u -}; - - -enum BLContextCreateFlags { - BL_CONTEXT_CREATE_FLAG_ISOLATED_RUNTIME = 0x10000000u, - BL_CONTEXT_CREATE_FLAG_OVERRIDE_FEATURES = 0x20000000u -}; - -//! Clip operation. -enum BLClipOp { - BL_CLIP_OP_REPLACE = 0, - BL_CLIP_OP_INTERSECT = 1, - - BL_CLIP_OP_COUNT = 2 -}; - -//! Clip mode. -enum BLClipMode { - BL_CLIP_MODE_ALIGNED_RECT = 0, - BL_CLIP_MODE_UNALIGNED_RECT = 1, - BL_CLIP_MODE_MASK = 2, - - BL_CLIP_MODE_COUNT = 3 -}; - -//! Composition & blending operator. -enum BLCompOp { - BL_COMP_OP_SRC_OVER = 0, - BL_COMP_OP_SRC_COPY = 1, - BL_COMP_OP_SRC_IN = 2, - BL_COMP_OP_SRC_OUT = 3, - BL_COMP_OP_SRC_ATOP = 4, - BL_COMP_OP_DST_OVER = 5, - BL_COMP_OP_DST_COPY = 6, - BL_COMP_OP_DST_IN = 7, - BL_COMP_OP_DST_OUT = 8, - BL_COMP_OP_DST_ATOP = 9, - BL_COMP_OP_XOR = 10, - BL_COMP_OP_CLEAR = 11, - BL_COMP_OP_PLUS = 12, - BL_COMP_OP_MINUS = 13, - BL_COMP_OP_MULTIPLY = 14, - BL_COMP_OP_SCREEN = 15, - BL_COMP_OP_OVERLAY = 16, - BL_COMP_OP_DARKEN = 17, - BL_COMP_OP_LIGHTEN = 18, - BL_COMP_OP_COLOR_DODGE = 19, - BL_COMP_OP_COLOR_BURN = 20, - BL_COMP_OP_LINEAR_BURN = 21, - BL_COMP_OP_LINEAR_LIGHT = 22, - BL_COMP_OP_PIN_LIGHT = 23, - BL_COMP_OP_HARD_LIGHT = 24, - BL_COMP_OP_SOFT_LIGHT = 25, - BL_COMP_OP_DIFFERENCE = 26, - BL_COMP_OP_EXCLUSION = 27, - - BL_COMP_OP_COUNT = 28 -}; - -//! Gradient rendering quality. -enum BLGradientQuality { - BL_GRADIENT_QUALITY_NEAREST = 0, - BL_GRADIENT_QUALITY_COUNT = 1 -}; - -//! Pattern quality. -enum BLPatternQuality { - BL_PATTERN_QUALITY_NEAREST = 0, - BL_PATTERN_QUALITY_BILINEAR = 1, - BL_PATTERN_QUALITY_COUNT = 2 -}; - -//! Rendering quality. -enum BLRenderingQuality { - BL_RENDERING_QUALITY_ANTIALIAS = 0, - BL_RENDERING_QUALITY_COUNT = 1 -}; -]] - -ffi.cdef[[ -//! Information that can be used to customize the rendering context. -struct BLContextCreateOptions { - uint32_t flags; - uint32_t cpuFeatures; -}; -]] - -ffi.cdef[[ -struct BLContextCookie { - uint64_t data[2]; -}; -]] - - -ffi.cdef[[ -//! Rendering context hints. -struct BLContextHints { - union { - struct { - uint8_t renderingQuality; - uint8_t gradientQuality; - uint8_t patternQuality; - }; - - uint8_t hints[BL_CONTEXT_HINT_COUNT]; - }; -}; -]] - -ffi.cdef[[ -struct BLContextState { - union { - //! Current context hints. - BLContextHints hints; - //! Flattened `BLContextHints` struct so the members can be accessed directly. - struct { - uint8_t renderingQuality; - uint8_t gradientQuality; - uint8_t patternQuality; - }; - }; - - //! Current composition operator. - uint8_t compOp; - //! Current fill rule. - uint8_t fillRule; - - //! Either `opStyleType` or decomposed `fillStyleType` and `strokeStyleType`. - union { - //! Current type of a style for fill and stroke operations. - uint8_t opStyleType[2]; - //! Flattened `opStyleType[]` so the members can be accessed directly. - struct { - //! Current type of a style for fill operations. - uint8_t fillStyleType; - //! Current type of a style for stroke operations. - uint8_t strokeStyleType; - }; - }; - - //! Reserved for future use, must be zero. - uint8_t reserved[4]; - - //! Approximation options. - BLApproximationOptions approximationOptions; - - //! Current global alpha value [0, 1]. - double globalAlpha; - //! Either opAlpha[] array of decomposed `fillAlpha` and `strokeAlpha`. - union { - //! Current fill or stroke alpha by slot type. - double opAlpha[2]; - //! Flattened `opAlpha[]` so the members can be accessed directly. - struct { - //! Current fill alpha value [0, 1]. - double fillAlpha; - //! Current stroke alpha value [0, 1]. - double strokeAlpha; - }; - }; - - //! Current stroke options. - //BL_TYPED_MEMBER(BLStrokeOptionsCore, BLStrokeOptions, strokeOptions); - union { BLStrokeOptionsCore, strokeOptions; }; - - //! Current meta transformation matrix. - BLMatrix2D metaMatrix; - //! Current user transformation matrix. - BLMatrix2D userMatrix; - - //! Count of saved states in the context. - size_t savedStateCount; - - //BL_HAS_TYPED_MEMBERS(BLContextState) -}; -]] - - -ffi.cdef[[ -//! Rendering context [C Interface - Virtual Function Table]. -struct BLContextVirt { - BLResult (__cdecl* destroy )(BLContextImpl* impl) ; - BLResult (__cdecl* flush )(BLContextImpl* impl, uint32_t flags) ; - - BLResult (__cdecl* save )(BLContextImpl* impl, BLContextCookie* cookie) ; - BLResult (__cdecl* restore )(BLContextImpl* impl, const BLContextCookie* cookie) ; - - BLResult (__cdecl* matrixOp )(BLContextImpl* impl, uint32_t opType, const void* opData) ; - BLResult (__cdecl* userToMeta )(BLContextImpl* impl) ; - - BLResult (__cdecl* setHint )(BLContextImpl* impl, uint32_t hintType, uint32_t value) ; - BLResult (__cdecl* setHints )(BLContextImpl* impl, const BLContextHints* hints) ; - BLResult (__cdecl* setFlattenMode )(BLContextImpl* impl, uint32_t mode) ; - BLResult (__cdecl* setFlattenTolerance )(BLContextImpl* impl, double tolerance) ; - BLResult (__cdecl* setApproximationOptions )(BLContextImpl* impl, const BLApproximationOptions* options) ; - - BLResult (__cdecl* setCompOp )(BLContextImpl* impl, uint32_t compOp) ; - BLResult (__cdecl* setGlobalAlpha )(BLContextImpl* impl, double alpha) ; - - BLResult (__cdecl* setFillRule )(BLContextImpl* impl, uint32_t fillRule) ; - - BLResult (__cdecl* setStrokeWidth )(BLContextImpl* impl, double width) ; - BLResult (__cdecl* setStrokeMiterLimit )(BLContextImpl* impl, double miterLimit) ; - BLResult (__cdecl* setStrokeCap )(BLContextImpl* impl, uint32_t position, uint32_t strokeCap) ; - BLResult (__cdecl* setStrokeCaps )(BLContextImpl* impl, uint32_t strokeCap) ; - BLResult (__cdecl* setStrokeJoin )(BLContextImpl* impl, uint32_t strokeJoin) ; - BLResult (__cdecl* setStrokeDashOffset )(BLContextImpl* impl, double dashOffset) ; - BLResult (__cdecl* setStrokeDashArray )(BLContextImpl* impl, const BLArrayCore* dashArray) ; - BLResult (__cdecl* setStrokeTransformOrder )(BLContextImpl* impl, uint32_t transformOrder) ; - BLResult (__cdecl* setStrokeOptions )(BLContextImpl* impl, const BLStrokeOptionsCore* options) ; - - union { - struct { - BLResult (__cdecl* setFillAlpha )(BLContextImpl* impl, double alpha) ; - BLResult (__cdecl* setStrokeAlpha )(BLContextImpl* impl, double alpha) ; - BLResult (__cdecl* getFillStyle )(BLContextImpl* impl, void* object) ; - BLResult (__cdecl* getStrokeStyle )(BLContextImpl* impl, void* object) ; - BLResult (__cdecl* getFillStyleRgba32 )(BLContextImpl* impl, uint32_t* rgba32) ; - BLResult (__cdecl* getStrokeStyleRgba32)(BLContextImpl* impl, uint32_t* rgba32) ; - BLResult (__cdecl* getFillStyleRgba64 )(BLContextImpl* impl, uint64_t* rgba64) ; - BLResult (__cdecl* getStrokeStyleRgba64)(BLContextImpl* impl, uint64_t* rgba64) ; - BLResult (__cdecl* setFillStyle )(BLContextImpl* impl, const void* object) ; - BLResult (__cdecl* setStrokeStyle )(BLContextImpl* impl, const void* object) ; - BLResult (__cdecl* setFillStyleRgba32 )(BLContextImpl* impl, uint32_t rgba32) ; - BLResult (__cdecl* setStrokeStyleRgba32)(BLContextImpl* impl, uint32_t rgba32) ; - BLResult (__cdecl* setFillStyleRgba64 )(BLContextImpl* impl, uint64_t rgba64) ; - BLResult (__cdecl* setStrokeStyleRgba64)(BLContextImpl* impl, uint64_t rgba64) ; - }; - struct { - // Allows to dispatch fill/stroke by `BLContextOpType`. - BLResult (__cdecl* setOpAlpha[2] )(BLContextImpl* impl, double alpha) ; - BLResult (__cdecl* getOpStyle[2] )(BLContextImpl* impl, void* object) ; - BLResult (__cdecl* getOpStyleRgba32[2] )(BLContextImpl* impl, uint32_t* rgba32) ; - BLResult (__cdecl* getOpStyleRgba64[2] )(BLContextImpl* impl, uint64_t* rgba64) ; - BLResult (__cdecl* setOpStyle[2] )(BLContextImpl* impl, const void* object) ; - BLResult (__cdecl* setOpStyleRgba32[2] )(BLContextImpl* impl, uint32_t rgba32) ; - BLResult (__cdecl* setOpStyleRgba64[2] )(BLContextImpl* impl, uint64_t rgba64) ; - }; - }; - - BLResult (__cdecl* clipToRectI )(BLContextImpl* impl, const BLRectI* rect) ; - BLResult (__cdecl* clipToRectD )(BLContextImpl* impl, const BLRect* rect) ; - BLResult (__cdecl* restoreClipping )(BLContextImpl* impl) ; - - BLResult (__cdecl* clearAll )(BLContextImpl* impl) ; - BLResult (__cdecl* clearRectI )(BLContextImpl* impl, const BLRectI* rect) ; - BLResult (__cdecl* clearRectD )(BLContextImpl* impl, const BLRect* rect) ; - - BLResult (__cdecl* fillAll )(BLContextImpl* impl) ; - BLResult (__cdecl* fillRectI )(BLContextImpl* impl, const BLRectI* rect) ; - BLResult (__cdecl* fillRectD )(BLContextImpl* impl, const BLRect* rect) ; - BLResult (__cdecl* fillPathD )(BLContextImpl* impl, const BLPathCore* path) ; - BLResult (__cdecl* fillGeometry )(BLContextImpl* impl, uint32_t geometryType, const void* geometryData) ; - BLResult (__cdecl* fillTextI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; - BLResult (__cdecl* fillTextD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; - BLResult (__cdecl* fillGlyphRunI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; - BLResult (__cdecl* fillGlyphRunD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; - - BLResult (__cdecl* strokeRectI )(BLContextImpl* impl, const BLRectI* rect) ; - BLResult (__cdecl* strokeRectD )(BLContextImpl* impl, const BLRect* rect) ; - BLResult (__cdecl* strokePathD )(BLContextImpl* impl, const BLPathCore* path) ; - BLResult (__cdecl* strokeGeometry )(BLContextImpl* impl, uint32_t geometryType, const void* geometryData) ; - BLResult (__cdecl* strokeTextI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; - BLResult (__cdecl* strokeTextD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; - BLResult (__cdecl* strokeGlyphRunI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; - BLResult (__cdecl* strokeGlyphRunD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; - - BLResult (__cdecl* blitImageI )(BLContextImpl* impl, const BLPointI* pt, const BLImageCore* img, const BLRectI* imgArea) ; - BLResult (__cdecl* blitImageD )(BLContextImpl* impl, const BLPoint* pt, const BLImageCore* img, const BLRectI* imgArea) ; - BLResult (__cdecl* blitScaledImageI )(BLContextImpl* impl, const BLRectI* rect, const BLImageCore* img, const BLRectI* imgArea) ; - BLResult (__cdecl* blitScaledImageD )(BLContextImpl* impl, const BLRect* rect, const BLImageCore* img, const BLRectI* imgArea) ; -}; -]] - -ffi.cdef[[ -//! Rendering context [C Interface - Impl]. -struct BLContextImpl { - const BLContextVirt* virt; - const BLContextState* state; - void* reservedHeader[1]; - - volatile size_t refCount; - uint8_t implType; - uint8_t implTraits; - uint16_t memPoolData; - uint32_t contextType; - - BLSize targetSize; -}; - -//! Rendering context [C Interface - Core]. -struct BLContextCore { - BLContextImpl* impl; -}; -]] - -end --// BLEND2D_BLCONTEXT_H diff --git a/blend2d/blend2d.lua b/blend2d/blend2d.lua index 25b2983..7c338d2 100644 --- a/blend2d/blend2d.lua +++ b/blend2d/blend2d.lua @@ -1,10 +1,12 @@ local ffi = require("ffi") local C = ffi.C +local SIZE_MAX = 0xffffffffffffffffULL; + local blapi = require("blend2d.blend2d_ffi") -- blcontext types -BLContextCreateOptions = ffi.new("struct BLContextCreateOptions") +BLContextCreateInfo = ffi.new("struct BLContextCreateInfo") -- BLContextCreateOptions BLContextCookie = ffi.typeof("struct BLContextCookie") BLContextHints = ffi.typeof("struct BLContextHints") BLContextState = ffi.typeof("struct BLContextState") @@ -594,7 +596,8 @@ BLFontFace_mt = { return nil, "failed blFontFaceInit" end - local bResult = blapi.blFontFaceCreateFromFile(obj, fileName) ; + local readFlags = C.BL_FILE_OPEN_READ; + local bResult = blapi.blFontFaceCreateFromFile(obj, fileName, readFlags) ; --print("blFontFaceCreateFromFile: ", bResult) if bResult ~= C.BL_SUCCESS then @@ -1006,6 +1009,7 @@ local BLImageCodec_mt = { end; __new = function (ct, moniker, codecs) + --print("BLImageCodec.__new: ", ct, moniker, codecs) local obj = ffi.new(ct) local bResult = blapi.blImageCodecInit(obj); if bResult ~= C.BL_SUCCESS then @@ -1013,32 +1017,19 @@ local BLImageCodec_mt = { end if moniker then - codecs = codecs or blapi.blImageCodecBuiltInCodecs(); - local bResult = blapi.blImageCodecFindByName(obj, codecs, moniker) ; - + local bResult = blapi.blImageCodecFindByName(obj, moniker, #moniker, nil) if bResult ~= C.BL_SUCCESS then return false, bResult; end end - return obj; end; ---[[ -BLResult __cdecl blImageCodecAssignWeak(BLImageCodecCore* self, const BLImageCodecCore* other) ; -BLResult __cdecl blImageCodecFindByName(BLImageCodecCore* self, const BLArrayCore* codecs, const char* name) ; -BLResult __cdecl blImageCodecFindByData(BLImageCodecCore* self, const BLArrayCore* codecs, const void* data, size_t size) ; -uint32_t __cdecl blImageCodecInspectData(const BLImageCodecCore* self, const void* data, size_t size) ; -BLResult __cdecl blImageCodecCreateDecoder(const BLImageCodecCore* self, BLImageDecoderCore* dst) ; -BLResult __cdecl blImageCodecCreateEncoder(const BLImageCodecCore* self, BLImageEncoderCore* dst) ; -BLArrayCore* __cdecl blImageCodecBuiltInCodecs(void) ; -]] __index = { findByName = function(self, name, codecs) local obj = BLImageCodec(); - codecs = codecs or blapi.blImageCodecBuiltInCodecs(); - local bResult = blapi.blImageCodecFindByName(obj, codecs, name) ; + local bResult = blapi.blImageCodecFindByName(obj, name, #name, codecs) ; if bResult ~= C.BL_SUCCESS then return false, bResult; @@ -1056,9 +1047,8 @@ BLArrayCore* __cdecl blImageCodecBuiltInCodecs(void) ; --print("readImageFromFile: ", tc, fileName, codecs) local img = BLImage(); - codecs = codecs or blapi.blImageCodecBuiltInCodecs() - local bResult = blapi.blImageReadFromFile(img, fileName, codecs) ; - + --codecs = codecs or blapi.blImageCodecBuiltInCodecs() + local bResult = blapi.blImageReadFromFile(img, fileName, codecs); if bResult ~= C.BL_SUCCESS then return false, bResult end diff --git a/blend2d/blend2d_ffi.lua b/blend2d/blend2d_ffi.lua index f96a2c3..a0cd1c7 100644 --- a/blend2d/blend2d_ffi.lua +++ b/blend2d/blend2d_ffi.lua @@ -1,46 +1,2332 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] +local ffi = require("ffi") + +ffi.cdef[[ +typedef struct BLRange BLRange; +typedef struct BLRandom BLRandom; +typedef struct BLCreateForeignInfo BLCreateForeignInfo; +typedef struct BLFileCore BLFileCore; +typedef struct BLRuntimeBuildInfo BLRuntimeBuildInfo; +typedef struct BLRuntimeSystemInfo BLRuntimeSystemInfo; +typedef struct BLRuntimeMemoryInfo BLRuntimeMemoryInfo; +typedef struct BLStringCore BLStringCore; +typedef struct BLStringImpl BLStringImpl; +typedef struct BLArrayCore BLArrayCore; +typedef struct BLArrayImpl BLArrayImpl; +typedef struct BLVariantCore BLVariantCore; +typedef struct BLVariantImpl BLVariantImpl; +typedef struct BLPointI BLPointI; +typedef struct BLPoint BLPoint; +typedef struct BLSizeI BLSizeI; +typedef struct BLSize BLSize; +typedef struct BLBoxI BLBoxI; +typedef struct BLBox BLBox; +typedef struct BLRectI BLRectI; +typedef struct BLRect BLRect; +typedef struct BLLine BLLine; +typedef struct BLTriangle BLTriangle; +typedef struct BLRoundRect BLRoundRect; +typedef struct BLCircle BLCircle; +typedef struct BLEllipse BLEllipse; +typedef struct BLArc BLArc; +typedef struct BLMatrix2D BLMatrix2D; +typedef struct BLPathCore BLPathCore; +typedef struct BLPathImpl BLPathImpl; +typedef struct BLPathView BLPathView; +typedef struct BLRegionCore BLRegionCore; +typedef struct BLRegionImpl BLRegionImpl; +typedef struct BLApproximationOptions BLApproximationOptions; +typedef struct BLStrokeOptionsCore BLStrokeOptionsCore; +typedef struct BLFormatInfo BLFormatInfo; +typedef struct BLImageCore BLImageCore; +typedef struct BLImageImpl BLImageImpl; +typedef struct BLImageData BLImageData; +typedef struct BLImageInfo BLImageInfo; +typedef struct BLImageScaleOptions BLImageScaleOptions; +typedef struct BLPixelConverterCore BLPixelConverterCore; +typedef struct BLPixelConverterOptions BLPixelConverterOptions; +typedef struct BLImageCodecCore BLImageCodecCore; +typedef struct BLImageCodecImpl BLImageCodecImpl; +typedef struct BLImageCodecVirt BLImageCodecVirt; +typedef struct BLImageDecoderCore BLImageDecoderCore; +typedef struct BLImageDecoderImpl BLImageDecoderImpl; +typedef struct BLImageDecoderVirt BLImageDecoderVirt; +typedef struct BLImageEncoderCore BLImageEncoderCore; +typedef struct BLImageEncoderImpl BLImageEncoderImpl; +typedef struct BLImageEncoderVirt BLImageEncoderVirt; +typedef struct BLRgba32 BLRgba32; +typedef struct BLRgba64 BLRgba64; +typedef struct BLRgba128 BLRgba128; +typedef struct BLGradientCore BLGradientCore; +typedef struct BLGradientImpl BLGradientImpl; +typedef struct BLGradientStop BLGradientStop; +typedef struct BLLinearGradientValues BLLinearGradientValues; +typedef struct BLRadialGradientValues BLRadialGradientValues; +typedef struct BLConicalGradientValues BLConicalGradientValues; +typedef struct BLPatternCore BLPatternCore; +typedef struct BLPatternImpl BLPatternImpl; +typedef struct BLContextCore BLContextCore; +typedef struct BLContextImpl BLContextImpl; +typedef struct BLContextVirt BLContextVirt; +typedef struct BLContextCookie BLContextCookie; +typedef struct BLContextCreateInfo BLContextCreateInfo; +typedef struct BLContextHints BLContextHints; +typedef struct BLContextState BLContextState; +typedef struct BLGlyphBufferCore BLGlyphBufferCore; +typedef struct BLGlyphBufferImpl BLGlyphBufferImpl; +typedef struct BLGlyphInfo BLGlyphInfo; +typedef struct BLGlyphItem BLGlyphItem; +typedef struct BLGlyphMappingState BLGlyphMappingState; +typedef struct BLGlyphOutlineSinkInfo BLGlyphOutlineSinkInfo; +typedef struct BLGlyphPlacement BLGlyphPlacement; +typedef struct BLGlyphRun BLGlyphRun; +typedef struct BLFontUnicodeCoverage BLFontUnicodeCoverage; +typedef struct BLFontFaceInfo BLFontFaceInfo; +typedef struct BLFontFeature BLFontFeature; +typedef struct BLFontDesignMetrics BLFontDesignMetrics; +typedef struct BLFontMatrix BLFontMatrix; +typedef struct BLFontMetrics BLFontMetrics; +typedef struct BLFontPanose BLFontPanose; +typedef struct BLFontTable BLFontTable; +typedef struct BLFontVariation BLFontVariation; +typedef struct BLTextMetrics BLTextMetrics; +typedef struct BLFontCore BLFontCore; +typedef struct BLFontImpl BLFontImpl; +typedef struct BLFontVirt BLFontVirt; +typedef struct BLFontFaceCore BLFontFaceCore; +typedef struct BLFontFaceImpl BLFontFaceImpl; +typedef struct BLFontFaceVirt BLFontFaceVirt; +typedef struct BLFontDataCore BLFontDataCore; +typedef struct BLFontDataImpl BLFontDataImpl; +typedef struct BLFontDataVirt BLFontDataVirt; +typedef struct BLFontLoaderCore BLFontLoaderCore; +typedef struct BLFontLoaderImpl BLFontLoaderImpl; +typedef struct BLFontLoaderVirt BLFontLoaderVirt; +]] + +ffi.cdef[[ +typedef uint32_t BLResult; +typedef uintptr_t BLBitWord; +typedef uint32_t BLTag; +typedef void (__cdecl* BLDestroyImplFunc)(void* impl, void* destroyData) ; +typedef BLResult (__cdecl* BLPathSinkFunc)(BLPathCore* path, const void* info, void* closure) ; +typedef uint16_t BLGlyphId; +]] + +ffi.cdef[[ +enum BLResultCode { + BL_SUCCESS = 0, + BL_ERROR_START_INDEX = 0x00010000u, + BL_ERROR_OUT_OF_MEMORY = 0x00010000u, + BL_ERROR_INVALID_VALUE, + BL_ERROR_INVALID_STATE, + BL_ERROR_INVALID_HANDLE, + BL_ERROR_VALUE_TOO_LARGE, + BL_ERROR_NOT_INITIALIZED, + BL_ERROR_NOT_IMPLEMENTED, + BL_ERROR_NOT_PERMITTED, + BL_ERROR_IO, + BL_ERROR_BUSY, + BL_ERROR_INTERRUPTED, + BL_ERROR_TRY_AGAIN, + BL_ERROR_TIMED_OUT, + BL_ERROR_BROKEN_PIPE, + BL_ERROR_INVALID_SEEK, + BL_ERROR_SYMLINK_LOOP, + BL_ERROR_FILE_TOO_LARGE, + BL_ERROR_ALREADY_EXISTS, + BL_ERROR_ACCESS_DENIED, + BL_ERROR_MEDIA_CHANGED, + BL_ERROR_READ_ONLY_FS, + BL_ERROR_NO_DEVICE, + BL_ERROR_NO_ENTRY, + BL_ERROR_NO_MEDIA, + BL_ERROR_NO_MORE_DATA, + BL_ERROR_NO_MORE_FILES, + BL_ERROR_NO_SPACE_LEFT, + BL_ERROR_NOT_EMPTY, + BL_ERROR_NOT_FILE, + BL_ERROR_NOT_DIRECTORY, + BL_ERROR_NOT_SAME_DEVICE, + BL_ERROR_NOT_BLOCK_DEVICE, + BL_ERROR_INVALID_FILE_NAME, + BL_ERROR_FILE_NAME_TOO_LONG, + BL_ERROR_TOO_MANY_OPEN_FILES, + BL_ERROR_TOO_MANY_OPEN_FILES_BY_OS, + BL_ERROR_TOO_MANY_LINKS, + BL_ERROR_TOO_MANY_THREADS, + BL_ERROR_FILE_EMPTY, + BL_ERROR_OPEN_FAILED, + BL_ERROR_NOT_ROOT_DEVICE, + BL_ERROR_UNKNOWN_SYSTEM_ERROR, + BL_ERROR_INVALID_ALIGNMENT, + BL_ERROR_INVALID_SIGNATURE, + BL_ERROR_INVALID_DATA, + BL_ERROR_INVALID_STRING, + BL_ERROR_DATA_TRUNCATED, + BL_ERROR_DATA_TOO_LARGE, + BL_ERROR_DECOMPRESSION_FAILED, + BL_ERROR_INVALID_GEOMETRY, + BL_ERROR_NO_MATCHING_VERTEX, + BL_ERROR_NO_MATCHING_COOKIE, + BL_ERROR_NO_STATES_TO_RESTORE, + BL_ERROR_IMAGE_TOO_LARGE, + BL_ERROR_IMAGE_NO_MATCHING_CODEC, + BL_ERROR_IMAGE_UNKNOWN_FILE_FORMAT, + BL_ERROR_IMAGE_DECODER_NOT_PROVIDED, + BL_ERROR_IMAGE_ENCODER_NOT_PROVIDED, + BL_ERROR_PNG_MULTIPLE_IHDR, + BL_ERROR_PNG_INVALID_IDAT, + BL_ERROR_PNG_INVALID_IEND, + BL_ERROR_PNG_INVALID_PLTE, + BL_ERROR_PNG_INVALID_TRNS, + BL_ERROR_PNG_INVALID_FILTER, + BL_ERROR_JPEG_UNSUPPORTED_FEATURE, + BL_ERROR_JPEG_INVALID_SOS, + BL_ERROR_JPEG_INVALID_SOF, + BL_ERROR_JPEG_MULTIPLE_SOF, + BL_ERROR_JPEG_UNSUPPORTED_SOF, + BL_ERROR_FONT_NO_CHARACTER_MAPPING, + BL_ERROR_FONT_MISSING_IMPORTANT_TABLE, + BL_ERROR_FONT_FEATURE_NOT_AVAILABLE, + BL_ERROR_FONT_CFF_INVALID_DATA, + BL_ERROR_FONT_PROGRAM_TERMINATED, + BL_ERROR_INVALID_GLYPH +}; +enum BLByteOrder { + BL_BYTE_ORDER_LE = 0, + BL_BYTE_ORDER_BE = 1, + BL_BYTE_ORDER_NATIVE = 1234 == 1234 ? BL_BYTE_ORDER_LE : BL_BYTE_ORDER_BE, + BL_BYTE_ORDER_SWAPPED = 1234 == 1234 ? BL_BYTE_ORDER_BE : BL_BYTE_ORDER_LE +}; +enum BLDataAccessFlags { + BL_DATA_ACCESS_READ = 0x01u, + BL_DATA_ACCESS_WRITE = 0x02u, + BL_DATA_ACCESS_RW = 0x03u +}; +enum BLDataSourceType { + BL_DATA_SOURCE_TYPE_NONE = 0, + BL_DATA_SOURCE_TYPE_MEMORY = 1, + BL_DATA_SOURCE_TYPE_FILE = 2, + BL_DATA_SOURCE_TYPE_CUSTOM = 3, + BL_DATA_SOURCE_TYPE_COUNT = 4 +}; +enum BLModifyOp { + BL_MODIFY_OP_ASSIGN_FIT = 0, + BL_MODIFY_OP_ASSIGN_GROW = 1, + BL_MODIFY_OP_APPEND_FIT = 2, + BL_MODIFY_OP_APPEND_GROW = 3, + BL_MODIFY_OP_COUNT = 4 +}; +enum BLBooleanOp { + BL_BOOLEAN_OP_COPY = 0, + BL_BOOLEAN_OP_AND = 1, + BL_BOOLEAN_OP_OR = 2, + BL_BOOLEAN_OP_XOR = 3, + BL_BOOLEAN_OP_SUB = 4, + BL_BOOLEAN_OP_COUNT = 5 +}; +enum BLExtendMode { + BL_EXTEND_MODE_PAD = 0, + BL_EXTEND_MODE_REPEAT = 1, + BL_EXTEND_MODE_REFLECT = 2, + BL_EXTEND_MODE_PAD_X_PAD_Y = 0, + BL_EXTEND_MODE_REPEAT_X_REPEAT_Y = 1, + BL_EXTEND_MODE_REFLECT_X_REFLECT_Y = 2, + BL_EXTEND_MODE_PAD_X_REPEAT_Y = 3, + BL_EXTEND_MODE_PAD_X_REFLECT_Y = 4, + BL_EXTEND_MODE_REPEAT_X_PAD_Y = 5, + BL_EXTEND_MODE_REPEAT_X_REFLECT_Y = 6, + BL_EXTEND_MODE_REFLECT_X_PAD_Y = 7, + BL_EXTEND_MODE_REFLECT_X_REPEAT_Y = 8, + BL_EXTEND_MODE_SIMPLE_COUNT = 3, + BL_EXTEND_MODE_COMPLEX_COUNT = 9 +}; +enum BLStyleType { + BL_STYLE_TYPE_NONE = 0, + BL_STYLE_TYPE_SOLID = 1, + BL_STYLE_TYPE_PATTERN = 2, + BL_STYLE_TYPE_GRADIENT = 3, + BL_STYLE_TYPE_COUNT = 4 +}; +enum BLTextEncoding { + BL_TEXT_ENCODING_UTF8 = 0, + BL_TEXT_ENCODING_UTF16 = 1, + BL_TEXT_ENCODING_UTF32 = 2, + BL_TEXT_ENCODING_LATIN1 = 3, + BL_TEXT_ENCODING_WCHAR + = sizeof(wchar_t) == 4 ? BL_TEXT_ENCODING_UTF32 : + sizeof(wchar_t) == 2 ? BL_TEXT_ENCODING_UTF16 : BL_TEXT_ENCODING_UTF8, + BL_TEXT_ENCODING_COUNT = 4 +}; +static inline BLResult blTraceError(BLResult result) { return result; } +struct BLRange { + size_t start; + size_t end; +}; +struct BLCreateForeignInfo { + void* data; + size_t size; + BLDestroyImplFunc destroyFunc; + void* destroyData; +}; +typedef struct { const void* data; size_t size; } BLArrayView; +typedef struct { const char* data; size_t size; } BLStringView; +typedef struct { const BLBoxI* data; size_t size; } BLRegionView; +typedef BLArrayView BLDataView; +BLResult __cdecl blArrayInit(BLArrayCore* self, uint32_t arrayTypeId) ; +BLResult __cdecl blArrayReset(BLArrayCore* self) ; +BLResult __cdecl blArrayCreateFromData(BLArrayCore* self, void* data, size_t size, size_t capacity, uint32_t dataAccessFlags, BLDestroyImplFunc destroyFunc, void* destroyData) ; +size_t __cdecl blArrayGetSize(const BLArrayCore* self) ; +size_t __cdecl blArrayGetCapacity(const BLArrayCore* self) ; +const void* __cdecl blArrayGetData(const BLArrayCore* self) ; +BLResult __cdecl blArrayClear(BLArrayCore* self) ; +BLResult __cdecl blArrayShrink(BLArrayCore* self) ; +BLResult __cdecl blArrayReserve(BLArrayCore* self, size_t n) ; +BLResult __cdecl blArrayResize(BLArrayCore* self, size_t n, const void* fill) ; +BLResult __cdecl blArrayMakeMutable(BLArrayCore* self, void** dataOut) ; +BLResult __cdecl blArrayModifyOp(BLArrayCore* self, uint32_t op, size_t n, void** dataOut) ; +BLResult __cdecl blArrayInsertOp(BLArrayCore* self, size_t index, size_t n, void** dataOut) ; +BLResult __cdecl blArrayAssignMove(BLArrayCore* self, BLArrayCore* other) ; +BLResult __cdecl blArrayAssignWeak(BLArrayCore* self, const BLArrayCore* other) ; +BLResult __cdecl blArrayAssignDeep(BLArrayCore* self, const BLArrayCore* other) ; +BLResult __cdecl blArrayAssignView(BLArrayCore* self, const void* items, size_t n) ; +BLResult __cdecl blArrayAppendU8(BLArrayCore* self, uint8_t value) ; +BLResult __cdecl blArrayAppendU16(BLArrayCore* self, uint16_t value) ; +BLResult __cdecl blArrayAppendU32(BLArrayCore* self, uint32_t value) ; +BLResult __cdecl blArrayAppendU64(BLArrayCore* self, uint64_t value) ; +BLResult __cdecl blArrayAppendF32(BLArrayCore* self, float value) ; +BLResult __cdecl blArrayAppendF64(BLArrayCore* self, double value) ; +BLResult __cdecl blArrayAppendItem(BLArrayCore* self, const void* item) ; +BLResult __cdecl blArrayAppendView(BLArrayCore* self, const void* items, size_t n) ; +BLResult __cdecl blArrayInsertU8(BLArrayCore* self, size_t index, uint8_t value) ; +BLResult __cdecl blArrayInsertU16(BLArrayCore* self, size_t index, uint16_t value) ; +BLResult __cdecl blArrayInsertU32(BLArrayCore* self, size_t index, uint32_t value) ; +BLResult __cdecl blArrayInsertU64(BLArrayCore* self, size_t index, uint64_t value) ; +BLResult __cdecl blArrayInsertF32(BLArrayCore* self, size_t index, float value) ; +BLResult __cdecl blArrayInsertF64(BLArrayCore* self, size_t index, double value) ; +BLResult __cdecl blArrayInsertItem(BLArrayCore* self, size_t index, const void* item) ; +BLResult __cdecl blArrayInsertView(BLArrayCore* self, size_t index, const void* items, size_t n) ; +BLResult __cdecl blArrayReplaceU8(BLArrayCore* self, size_t index, uint8_t value) ; +BLResult __cdecl blArrayReplaceU16(BLArrayCore* self, size_t index, uint16_t value) ; +BLResult __cdecl blArrayReplaceU32(BLArrayCore* self, size_t index, uint32_t value) ; +BLResult __cdecl blArrayReplaceU64(BLArrayCore* self, size_t index, uint64_t value) ; +BLResult __cdecl blArrayReplaceF32(BLArrayCore* self, size_t index, float value) ; +BLResult __cdecl blArrayReplaceF64(BLArrayCore* self, size_t index, double value) ; +BLResult __cdecl blArrayReplaceItem(BLArrayCore* self, size_t index, const void* item) ; +BLResult __cdecl blArrayReplaceView(BLArrayCore* self, const BLRange* range, const void* items, size_t n) ; +BLResult __cdecl blArrayRemoveIndex(BLArrayCore* self, size_t index) ; +BLResult __cdecl blArrayRemoveRange(BLArrayCore* self, const BLRange* range) ; +_Bool __cdecl blArrayEquals(const BLArrayCore* a, const BLArrayCore* b) ; +BLResult __cdecl blContextInit(BLContextCore* self) ; +BLResult __cdecl blContextInitAs(BLContextCore* self, BLImageCore* image, const BLContextCreateInfo* options) ; +BLResult __cdecl blContextReset(BLContextCore* self) ; +BLResult __cdecl blContextAssignMove(BLContextCore* self, BLContextCore* other) ; +BLResult __cdecl blContextAssignWeak(BLContextCore* self, const BLContextCore* other) ; +BLResult __cdecl blContextGetType(const BLContextCore* self) ; +BLResult __cdecl blContextBegin(BLContextCore* self, BLImageCore* image, const BLContextCreateInfo* options) ; +BLResult __cdecl blContextEnd(BLContextCore* self) ; +BLResult __cdecl blContextFlush(BLContextCore* self, uint32_t flags) ; +BLResult __cdecl blContextSave(BLContextCore* self, BLContextCookie* cookie) ; +BLResult __cdecl blContextRestore(BLContextCore* self, const BLContextCookie* cookie) ; +BLResult __cdecl blContextGetMetaMatrix(const BLContextCore* self, BLMatrix2D* m) ; +BLResult __cdecl blContextGetUserMatrix(const BLContextCore* self, BLMatrix2D* m) ; +BLResult __cdecl blContextUserToMeta(BLContextCore* self) ; +BLResult __cdecl blContextMatrixOp(BLContextCore* self, uint32_t opType, const void* opData) ; +BLResult __cdecl blContextSetHint(BLContextCore* self, uint32_t hintType, uint32_t value) ; +BLResult __cdecl blContextSetHints(BLContextCore* self, const BLContextHints* hints) ; +BLResult __cdecl blContextSetFlattenMode(BLContextCore* self, uint32_t mode) ; +BLResult __cdecl blContextSetFlattenTolerance(BLContextCore* self, double tolerance) ; +BLResult __cdecl blContextSetApproximationOptions(BLContextCore* self, const BLApproximationOptions* options) ; +BLResult __cdecl blContextSetCompOp(BLContextCore* self, uint32_t compOp) ; +BLResult __cdecl blContextSetGlobalAlpha(BLContextCore* self, double alpha) ; +BLResult __cdecl blContextSetFillAlpha(BLContextCore* self, double alpha) ; +BLResult __cdecl blContextGetFillStyle(const BLContextCore* self, void* object) ; +BLResult __cdecl blContextGetFillStyleRgba32(const BLContextCore* self, uint32_t* rgba32) ; +BLResult __cdecl blContextGetFillStyleRgba64(const BLContextCore* self, uint64_t* rgba64) ; +BLResult __cdecl blContextSetFillStyle(BLContextCore* self, const void* object) ; +BLResult __cdecl blContextSetFillStyleRgba32(BLContextCore* self, uint32_t rgba32) ; +BLResult __cdecl blContextSetFillStyleRgba64(BLContextCore* self, uint64_t rgba64) ; +BLResult __cdecl blContextSetFillRule(BLContextCore* self, uint32_t fillRule) ; +BLResult __cdecl blContextSetStrokeAlpha(BLContextCore* self, double alpha) ; +BLResult __cdecl blContextGetStrokeStyle(const BLContextCore* self, void* object) ; +BLResult __cdecl blContextGetStrokeStyleRgba32(const BLContextCore* self, uint32_t* rgba32) ; +BLResult __cdecl blContextGetStrokeStyleRgba64(const BLContextCore* self, uint64_t* rgba64) ; +BLResult __cdecl blContextSetStrokeStyle(BLContextCore* self, const void* object) ; +BLResult __cdecl blContextSetStrokeStyleRgba32(BLContextCore* self, uint32_t rgba32) ; +BLResult __cdecl blContextSetStrokeStyleRgba64(BLContextCore* self, uint64_t rgba64) ; +BLResult __cdecl blContextSetStrokeWidth(BLContextCore* self, double width) ; +BLResult __cdecl blContextSetStrokeMiterLimit(BLContextCore* self, double miterLimit) ; +BLResult __cdecl blContextSetStrokeCap(BLContextCore* self, uint32_t position, uint32_t strokeCap) ; +BLResult __cdecl blContextSetStrokeCaps(BLContextCore* self, uint32_t strokeCap) ; +BLResult __cdecl blContextSetStrokeJoin(BLContextCore* self, uint32_t strokeJoin) ; +BLResult __cdecl blContextSetStrokeDashOffset(BLContextCore* self, double dashOffset) ; +BLResult __cdecl blContextSetStrokeDashArray(BLContextCore* self, const BLArrayCore* dashArray) ; +BLResult __cdecl blContextSetStrokeTransformOrder(BLContextCore* self, uint32_t transformOrder) ; +BLResult __cdecl blContextGetStrokeOptions(const BLContextCore* self, BLStrokeOptionsCore* options) ; +BLResult __cdecl blContextSetStrokeOptions(BLContextCore* self, const BLStrokeOptionsCore* options) ; +BLResult __cdecl blContextClipToRectI(BLContextCore* self, const BLRectI* rect) ; +BLResult __cdecl blContextClipToRectD(BLContextCore* self, const BLRect* rect) ; +BLResult __cdecl blContextRestoreClipping(BLContextCore* self) ; +BLResult __cdecl blContextClearAll(BLContextCore* self) ; +BLResult __cdecl blContextClearRectI(BLContextCore* self, const BLRectI* rect) ; +BLResult __cdecl blContextClearRectD(BLContextCore* self, const BLRect* rect) ; +BLResult __cdecl blContextFillAll(BLContextCore* self) ; +BLResult __cdecl blContextFillRectI(BLContextCore* self, const BLRectI* rect) ; +BLResult __cdecl blContextFillRectD(BLContextCore* self, const BLRect* rect) ; +BLResult __cdecl blContextFillPathD(BLContextCore* self, const BLPathCore* path) ; +BLResult __cdecl blContextFillGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) ; +BLResult __cdecl blContextFillTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; +BLResult __cdecl blContextFillTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; +BLResult __cdecl blContextFillGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; +BLResult __cdecl blContextFillGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; +BLResult __cdecl blContextStrokeRectI(BLContextCore* self, const BLRectI* rect) ; +BLResult __cdecl blContextStrokeRectD(BLContextCore* self, const BLRect* rect) ; +BLResult __cdecl blContextStrokePathD(BLContextCore* self, const BLPathCore* path) ; +BLResult __cdecl blContextStrokeGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) ; +BLResult __cdecl blContextStrokeTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; +BLResult __cdecl blContextStrokeTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; +BLResult __cdecl blContextStrokeGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; +BLResult __cdecl blContextStrokeGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; +BLResult __cdecl blContextBlitImageI(BLContextCore* self, const BLPointI* pt, const BLImageCore* img, const BLRectI* imgArea) ; +BLResult __cdecl blContextBlitImageD(BLContextCore* self, const BLPoint* pt, const BLImageCore* img, const BLRectI* imgArea) ; +BLResult __cdecl blContextBlitScaledImageI(BLContextCore* self, const BLRectI* rect, const BLImageCore* img, const BLRectI* imgArea) ; +BLResult __cdecl blContextBlitScaledImageD(BLContextCore* self, const BLRect* rect, const BLImageCore* img, const BLRectI* imgArea) ; +BLResult __cdecl blFileInit(BLFileCore* self) ; +BLResult __cdecl blFileReset(BLFileCore* self) ; +BLResult __cdecl blFileOpen(BLFileCore* self, const char* fileName, uint32_t openFlags) ; +BLResult __cdecl blFileClose(BLFileCore* self) ; +BLResult __cdecl blFileSeek(BLFileCore* self, int64_t offset, uint32_t seekType, int64_t* positionOut) ; +BLResult __cdecl blFileRead(BLFileCore* self, void* buffer, size_t n, size_t* bytesReadOut) ; +BLResult __cdecl blFileWrite(BLFileCore* self, const void* buffer, size_t n, size_t* bytesWrittenOut) ; +BLResult __cdecl blFileTruncate(BLFileCore* self, int64_t maxSize) ; +BLResult __cdecl blFileGetSize(BLFileCore* self, uint64_t* fileSizeOut) ; +BLResult __cdecl blFileSystemReadFile(const char* fileName, BLArrayCore* dst, size_t maxSize, uint32_t readFlags) ; +BLResult __cdecl blFileSystemWriteFile(const char* fileName, const void* data, size_t size, size_t* bytesWrittenOut) ; +BLResult __cdecl blFontInit(BLFontCore* self) ; +BLResult __cdecl blFontReset(BLFontCore* self) ; +BLResult __cdecl blFontAssignMove(BLFontCore* self, BLFontCore* other) ; +BLResult __cdecl blFontAssignWeak(BLFontCore* self, const BLFontCore* other) ; +_Bool __cdecl blFontEquals(const BLFontCore* a, const BLFontCore* b) ; +BLResult __cdecl blFontCreateFromFace(BLFontCore* self, const BLFontFaceCore* face, float size) ; +BLResult __cdecl blFontShape(const BLFontCore* self, BLGlyphBufferCore* gb) ; +BLResult __cdecl blFontMapTextToGlyphs(const BLFontCore* self, BLGlyphBufferCore* gb, BLGlyphMappingState* stateOut) ; +BLResult __cdecl blFontPositionGlyphs(const BLFontCore* self, BLGlyphBufferCore* gb, uint32_t positioningFlags) ; +BLResult __cdecl blFontApplyKerning(const BLFontCore* self, BLGlyphBufferCore* gb) ; +BLResult __cdecl blFontApplyGSub(const BLFontCore* self, BLGlyphBufferCore* gb, size_t index, BLBitWord lookups) ; +BLResult __cdecl blFontApplyGPos(const BLFontCore* self, BLGlyphBufferCore* gb, size_t index, BLBitWord lookups) ; +BLResult __cdecl blFontGetMatrix(const BLFontCore* self, BLFontMatrix* out) ; +BLResult __cdecl blFontGetMetrics(const BLFontCore* self, BLFontMetrics* out) ; +BLResult __cdecl blFontGetDesignMetrics(const BLFontCore* self, BLFontDesignMetrics* out) ; +BLResult __cdecl blFontGetTextMetrics(const BLFontCore* self, BLGlyphBufferCore* gb, BLTextMetrics* out) ; +BLResult __cdecl blFontGetGlyphBounds(const BLFontCore* self, const void* glyphIdData, intptr_t glyphIdAdvance, BLBoxI* out, size_t count) ; +BLResult __cdecl blFontGetGlyphAdvances(const BLFontCore* self, const void* glyphIdData, intptr_t glyphIdAdvance, BLGlyphPlacement* out, size_t count) ; +BLResult __cdecl blFontGetGlyphOutlines(const BLFontCore* self, uint32_t glyphId, const BLMatrix2D* userMatrix, BLPathCore* out, BLPathSinkFunc sink, void* closure) ; +BLResult __cdecl blFontGetGlyphRunOutlines(const BLFontCore* self, const BLGlyphRun* glyphRun, const BLMatrix2D* userMatrix, BLPathCore* out, BLPathSinkFunc sink, void* closure) ; +BLResult __cdecl blFontDataInit(BLFontDataCore* self) ; +BLResult __cdecl blFontDataInitFromLoader(BLFontDataCore* self, const BLFontLoaderCore* loader, uint32_t faceIndex) ; +BLResult __cdecl blFontDataReset(BLFontDataCore* self) ; +BLResult __cdecl blFontDataAssignMove(BLFontDataCore* self, BLFontDataCore* other) ; +BLResult __cdecl blFontDataAssignWeak(BLFontDataCore* self, const BLFontDataCore* other) ; +BLResult __cdecl blFontDataCreateFromLoader(BLFontDataCore* self, const BLFontLoaderCore* loader, uint32_t faceIndex) ; +_Bool __cdecl blFontDataEquals(const BLFontDataCore* a, const BLFontDataCore* b) ; +BLResult __cdecl blFontDataListTags(const BLFontDataCore* self, BLArrayCore* dst) ; +size_t __cdecl blFontDataQueryTables(const BLFontDataCore* self, BLFontTable* dst, const BLTag* tags, size_t count) ; +BLResult __cdecl blFontFaceInit(BLFontFaceCore* self) ; +BLResult __cdecl blFontFaceReset(BLFontFaceCore* self) ; +BLResult __cdecl blFontFaceAssignMove(BLFontFaceCore* self, BLFontFaceCore* other) ; +BLResult __cdecl blFontFaceAssignWeak(BLFontFaceCore* self, const BLFontFaceCore* other) ; +_Bool __cdecl blFontFaceEquals(const BLFontFaceCore* a, const BLFontFaceCore* b) ; +BLResult __cdecl blFontFaceCreateFromFile(BLFontFaceCore* self, const char* fileName, uint32_t readFlags) ; +BLResult __cdecl blFontFaceCreateFromLoader(BLFontFaceCore* self, const BLFontLoaderCore* loader, uint32_t faceIndex) ; +BLResult __cdecl blFontFaceGetFaceInfo(const BLFontFaceCore* self, BLFontFaceInfo* out) ; +BLResult __cdecl blFontFaceGetDesignMetrics(const BLFontFaceCore* self, BLFontDesignMetrics* out) ; +BLResult __cdecl blFontFaceGetUnicodeCoverage(const BLFontFaceCore* self, BLFontUnicodeCoverage* out) ; +BLResult __cdecl blFontLoaderInit(BLFontLoaderCore* self) ; +BLResult __cdecl blFontLoaderReset(BLFontLoaderCore* self) ; +BLResult __cdecl blFontLoaderAssignMove(BLFontLoaderCore* self, BLFontLoaderCore* other) ; +BLResult __cdecl blFontLoaderAssignWeak(BLFontLoaderCore* self, const BLFontLoaderCore* other) ; +_Bool __cdecl blFontLoaderEquals(const BLFontLoaderCore* a, const BLFontLoaderCore* b) ; +BLResult __cdecl blFontLoaderCreateFromFile(BLFontLoaderCore* self, const char* fileName, uint32_t readFlags) ; +BLResult __cdecl blFontLoaderCreateFromDataArray(BLFontLoaderCore* self, const BLArrayCore* dataArray) ; +BLResult __cdecl blFontLoaderCreateFromData(BLFontLoaderCore* self, const void* data, size_t size, BLDestroyImplFunc destroyFunc, void* destroyData) ; +BLResult __cdecl blFormatInfoSanitize(BLFormatInfo* self) ; +BLResult __cdecl blGlyphBufferInit(BLGlyphBufferCore* self) ; +BLResult __cdecl blGlyphBufferReset(BLGlyphBufferCore* self) ; +BLResult __cdecl blGlyphBufferClear(BLGlyphBufferCore* self) ; +BLResult __cdecl blGlyphBufferSetText(BLGlyphBufferCore* self, const void* data, size_t size, uint32_t encoding) ; +BLResult __cdecl blGlyphBufferSetGlyphIds(BLGlyphBufferCore* self, const void* data, intptr_t advance, size_t size) ; +BLResult __cdecl blGradientInit(BLGradientCore* self) ; +BLResult __cdecl blGradientInitAs(BLGradientCore* self, uint32_t type, const void* values, uint32_t extendMode, const BLGradientStop* stops, size_t n, const BLMatrix2D* m) ; +BLResult __cdecl blGradientReset(BLGradientCore* self) ; +BLResult __cdecl blGradientAssignMove(BLGradientCore* self, BLGradientCore* other) ; +BLResult __cdecl blGradientAssignWeak(BLGradientCore* self, const BLGradientCore* other) ; +BLResult __cdecl blGradientCreate(BLGradientCore* self, uint32_t type, const void* values, uint32_t extendMode, const BLGradientStop* stops, size_t n, const BLMatrix2D* m) ; +BLResult __cdecl blGradientShrink(BLGradientCore* self) ; +BLResult __cdecl blGradientReserve(BLGradientCore* self, size_t n) ; +uint32_t __cdecl blGradientGetType(const BLGradientCore* self) ; +BLResult __cdecl blGradientSetType(BLGradientCore* self, uint32_t type) ; +double __cdecl blGradientGetValue(const BLGradientCore* self, size_t index) ; +BLResult __cdecl blGradientSetValue(BLGradientCore* self, size_t index, double value) ; +BLResult __cdecl blGradientSetValues(BLGradientCore* self, size_t index, const double* values, size_t n) ; +uint32_t __cdecl blGradientGetExtendMode(BLGradientCore* self) ; +BLResult __cdecl blGradientSetExtendMode(BLGradientCore* self, uint32_t extendMode) ; +const BLGradientStop* __cdecl blGradientGetStops(const BLGradientCore* self) ; +size_t __cdecl blGradientGetSize(const BLGradientCore* self) ; +size_t __cdecl blGradientGetCapacity(const BLGradientCore* self) ; +BLResult __cdecl blGradientResetStops(BLGradientCore* self) ; +BLResult __cdecl blGradientAssignStops(BLGradientCore* self, const BLGradientStop* stops, size_t n) ; +BLResult __cdecl blGradientAddStopRgba32(BLGradientCore* self, double offset, uint32_t argb32) ; +BLResult __cdecl blGradientAddStopRgba64(BLGradientCore* self, double offset, uint64_t argb64) ; +BLResult __cdecl blGradientRemoveStop(BLGradientCore* self, size_t index) ; +BLResult __cdecl blGradientRemoveStopByOffset(BLGradientCore* self, double offset, uint32_t all) ; +BLResult __cdecl blGradientRemoveStops(BLGradientCore* self, const BLRange* range) ; +BLResult __cdecl blGradientRemoveStopsFromTo(BLGradientCore* self, double offsetMin, double offsetMax) ; +BLResult __cdecl blGradientReplaceStopRgba32(BLGradientCore* self, size_t index, double offset, uint32_t rgba32) ; +BLResult __cdecl blGradientReplaceStopRgba64(BLGradientCore* self, size_t index, double offset, uint64_t rgba64) ; +size_t __cdecl blGradientIndexOfStop(const BLGradientCore* self, double offset) ; +BLResult __cdecl blGradientApplyMatrixOp(BLGradientCore* self, uint32_t opType, const void* opData) ; +_Bool __cdecl blGradientEquals(const BLGradientCore* a, const BLGradientCore* b) ; +BLResult __cdecl blImageInit(BLImageCore* self) ; +BLResult __cdecl blImageInitAs(BLImageCore* self, int w, int h, uint32_t format) ; +BLResult __cdecl blImageInitAsFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) ; +BLResult __cdecl blImageReset(BLImageCore* self) ; +BLResult __cdecl blImageAssignMove(BLImageCore* self, BLImageCore* other) ; +BLResult __cdecl blImageAssignWeak(BLImageCore* self, const BLImageCore* other) ; +BLResult __cdecl blImageAssignDeep(BLImageCore* self, const BLImageCore* other) ; +BLResult __cdecl blImageCreate(BLImageCore* self, int w, int h, uint32_t format) ; +BLResult __cdecl blImageCreateFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) ; +BLResult __cdecl blImageGetData(const BLImageCore* self, BLImageData* dataOut) ; +BLResult __cdecl blImageMakeMutable(BLImageCore* self, BLImageData* dataOut) ; +_Bool __cdecl blImageEquals(const BLImageCore* a, const BLImageCore* b) ; +BLResult __cdecl blImageScale(BLImageCore* dst, const BLImageCore* src, const BLSizeI* size, uint32_t filter, const BLImageScaleOptions* options) ; +BLResult __cdecl blImageReadFromFile(BLImageCore* self, const char* fileName, const BLArrayCore* codecs) ; +BLResult __cdecl blImageReadFromData(BLImageCore* self, const void* data, size_t size, const BLArrayCore* codecs) ; +BLResult __cdecl blImageWriteToFile(const BLImageCore* self, const char* fileName, const BLImageCodecCore* codec) ; +BLResult __cdecl blImageWriteToData(const BLImageCore* self, BLArrayCore* dst, const BLImageCodecCore* codec) ; +BLResult __cdecl blImageCodecInit(BLImageCodecCore* self) ; +BLResult __cdecl blImageCodecReset(BLImageCodecCore* self) ; +BLResult __cdecl blImageCodecAssignWeak(BLImageCodecCore* self, const BLImageCodecCore* other) ; +BLResult __cdecl blImageCodecFindByName(BLImageCodecCore* self, const char* name, size_t size, const BLArrayCore* codecs) ; +BLResult __cdecl blImageCodecFindByData(BLImageCodecCore* self, const void* data, size_t size, const BLArrayCore* codecs) ; +uint32_t __cdecl blImageCodecInspectData(const BLImageCodecCore* self, const void* data, size_t size) ; +BLResult __cdecl blImageCodecCreateDecoder(const BLImageCodecCore* self, BLImageDecoderCore* dst) ; +BLResult __cdecl blImageCodecCreateEncoder(const BLImageCodecCore* self, BLImageEncoderCore* dst) ; +BLResult __cdecl blImageCodecArrayInitBuiltInCodecs(BLArrayCore* self) ; +BLResult __cdecl blImageCodecArrayAssignBuiltInCodecs(BLArrayCore* self) ; +BLResult __cdecl blImageCodecAddToBuiltIn(const BLImageCodecCore* codec) ; +BLResult __cdecl blImageCodecRemoveFromBuiltIn(const BLImageCodecCore* codec) ; +BLResult __cdecl blImageDecoderInit(BLImageDecoderCore* self) ; +BLResult __cdecl blImageDecoderReset(BLImageDecoderCore* self) ; +BLResult __cdecl blImageDecoderAssignMove(BLImageDecoderCore* self, BLImageDecoderCore* other) ; +BLResult __cdecl blImageDecoderAssignWeak(BLImageDecoderCore* self, const BLImageDecoderCore* other) ; +BLResult __cdecl blImageDecoderRestart(BLImageDecoderCore* self) ; +BLResult __cdecl blImageDecoderReadInfo(BLImageDecoderCore* self, BLImageInfo* infoOut, const uint8_t* data, size_t size) ; +BLResult __cdecl blImageDecoderReadFrame(BLImageDecoderCore* self, BLImageCore* imageOut, const uint8_t* data, size_t size) ; +BLResult __cdecl blImageEncoderInit(BLImageEncoderCore* self) ; +BLResult __cdecl blImageEncoderReset(BLImageEncoderCore* self) ; +BLResult __cdecl blImageEncoderAssignMove(BLImageEncoderCore* self, BLImageEncoderCore* other) ; +BLResult __cdecl blImageEncoderAssignWeak(BLImageEncoderCore* self, const BLImageEncoderCore* other) ; +BLResult __cdecl blImageEncoderRestart(BLImageEncoderCore* self) ; +BLResult __cdecl blImageEncoderWriteFrame(BLImageEncoderCore* self, BLArrayCore* dst, const BLImageCore* image) ; +BLResult __cdecl blMatrix2DSetIdentity(BLMatrix2D* self) ; +BLResult __cdecl blMatrix2DSetTranslation(BLMatrix2D* self, double x, double y) ; +BLResult __cdecl blMatrix2DSetScaling(BLMatrix2D* self, double x, double y) ; +BLResult __cdecl blMatrix2DSetSkewing(BLMatrix2D* self, double x, double y) ; +BLResult __cdecl blMatrix2DSetRotation(BLMatrix2D* self, double angle, double cx, double cy) ; +BLResult __cdecl blMatrix2DApplyOp(BLMatrix2D* self, uint32_t opType, const void* opData) ; +BLResult __cdecl blMatrix2DInvert(BLMatrix2D* dst, const BLMatrix2D* src) ; +uint32_t __cdecl blMatrix2DGetType(const BLMatrix2D* self) ; +BLResult __cdecl blMatrix2DMapPointDArray(const BLMatrix2D* self, BLPoint* dst, const BLPoint* src, size_t count) ; +BLResult __cdecl blPathInit(BLPathCore* self) ; +BLResult __cdecl blPathReset(BLPathCore* self) ; +size_t __cdecl blPathGetSize(const BLPathCore* self) ; +size_t __cdecl blPathGetCapacity(const BLPathCore* self) ; +const uint8_t* __cdecl blPathGetCommandData(const BLPathCore* self) ; +const BLPoint* __cdecl blPathGetVertexData(const BLPathCore* self) ; +BLResult __cdecl blPathClear(BLPathCore* self) ; +BLResult __cdecl blPathShrink(BLPathCore* self) ; +BLResult __cdecl blPathReserve(BLPathCore* self, size_t n) ; +BLResult __cdecl blPathModifyOp(BLPathCore* self, uint32_t op, size_t n, uint8_t** cmdDataOut, BLPoint** vtxDataOut) ; +BLResult __cdecl blPathAssignMove(BLPathCore* self, BLPathCore* other) ; +BLResult __cdecl blPathAssignWeak(BLPathCore* self, const BLPathCore* other) ; +BLResult __cdecl blPathAssignDeep(BLPathCore* self, const BLPathCore* other) ; +BLResult __cdecl blPathSetVertexAt(BLPathCore* self, size_t index, uint32_t cmd, double x, double y) ; +BLResult __cdecl blPathMoveTo(BLPathCore* self, double x0, double y0) ; +BLResult __cdecl blPathLineTo(BLPathCore* self, double x1, double y1) ; +BLResult __cdecl blPathPolyTo(BLPathCore* self, const BLPoint* poly, size_t count) ; +BLResult __cdecl blPathQuadTo(BLPathCore* self, double x1, double y1, double x2, double y2) ; +BLResult __cdecl blPathCubicTo(BLPathCore* self, double x1, double y1, double x2, double y2, double x3, double y3) ; +BLResult __cdecl blPathSmoothQuadTo(BLPathCore* self, double x2, double y2) ; +BLResult __cdecl blPathSmoothCubicTo(BLPathCore* self, double x2, double y2, double x3, double y3) ; +BLResult __cdecl blPathArcTo(BLPathCore* self, double x, double y, double rx, double ry, double start, double sweep, _Bool forceMoveTo) ; +BLResult __cdecl blPathArcQuadrantTo(BLPathCore* self, double x1, double y1, double x2, double y2) ; +BLResult __cdecl blPathEllipticArcTo(BLPathCore* self, double rx, double ry, double xAxisRotation, _Bool largeArcFlag, _Bool sweepFlag, double x1, double y1) ; +BLResult __cdecl blPathClose(BLPathCore* self) ; +BLResult __cdecl blPathAddGeometry(BLPathCore* self, uint32_t geometryType, const void* geometryData, const BLMatrix2D* m, uint32_t dir) ; +BLResult __cdecl blPathAddBoxI(BLPathCore* self, const BLBoxI* box, uint32_t dir) ; +BLResult __cdecl blPathAddBoxD(BLPathCore* self, const BLBox* box, uint32_t dir) ; +BLResult __cdecl blPathAddRectI(BLPathCore* self, const BLRectI* rect, uint32_t dir) ; +BLResult __cdecl blPathAddRectD(BLPathCore* self, const BLRect* rect, uint32_t dir) ; +BLResult __cdecl blPathAddPath(BLPathCore* self, const BLPathCore* other, const BLRange* range) ; +BLResult __cdecl blPathAddTranslatedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, const BLPoint* p) ; +BLResult __cdecl blPathAddTransformedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, const BLMatrix2D* m) ; +BLResult __cdecl blPathAddReversedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, uint32_t reverseMode) ; +BLResult __cdecl blPathAddStrokedPath(BLPathCore* self, const BLPathCore* other, const BLRange* range, const BLStrokeOptionsCore* options, const BLApproximationOptions* approx) ; +BLResult __cdecl blPathTranslate(BLPathCore* self, const BLRange* range, const BLPoint* p) ; +BLResult __cdecl blPathTransform(BLPathCore* self, const BLRange* range, const BLMatrix2D* m) ; +BLResult __cdecl blPathFitTo(BLPathCore* self, const BLRange* range, const BLRect* rect, uint32_t fitFlags) ; +_Bool __cdecl blPathEquals(const BLPathCore* a, const BLPathCore* b) ; +BLResult __cdecl blPathGetInfoFlags(const BLPathCore* self, uint32_t* flagsOut) ; +BLResult __cdecl blPathGetControlBox(const BLPathCore* self, BLBox* boxOut) ; +BLResult __cdecl blPathGetBoundingBox(const BLPathCore* self, BLBox* boxOut) ; +BLResult __cdecl blPathGetFigureRange(const BLPathCore* self, size_t index, BLRange* rangeOut) ; +BLResult __cdecl blPathGetLastVertex(const BLPathCore* self, BLPoint* vtxOut) ; +BLResult __cdecl blPathGetClosestVertex(const BLPathCore* self, const BLPoint* p, double maxDistance, size_t* indexOut, double* distanceOut) ; +uint32_t __cdecl blPathHitTest(const BLPathCore* self, const BLPoint* p, uint32_t fillRule) ; +BLResult __cdecl blPatternInit(BLPatternCore* self) ; +BLResult __cdecl blPatternInitAs(BLPatternCore* self, const BLImageCore* image, const BLRectI* area, uint32_t extendMode, const BLMatrix2D* m) ; +BLResult __cdecl blPatternReset(BLPatternCore* self) ; +BLResult __cdecl blPatternAssignMove(BLPatternCore* self, BLPatternCore* other) ; +BLResult __cdecl blPatternAssignWeak(BLPatternCore* self, const BLPatternCore* other) ; +BLResult __cdecl blPatternAssignDeep(BLPatternCore* self, const BLPatternCore* other) ; +BLResult __cdecl blPatternCreate(BLPatternCore* self, const BLImageCore* image, const BLRectI* area, uint32_t extendMode, const BLMatrix2D* m) ; +BLResult __cdecl blPatternSetImage(BLPatternCore* self, const BLImageCore* image, const BLRectI* area) ; +BLResult __cdecl blPatternSetArea(BLPatternCore* self, const BLRectI* area) ; +BLResult __cdecl blPatternSetExtendMode(BLPatternCore* self, uint32_t extendMode) ; +BLResult __cdecl blPatternApplyMatrixOp(BLPatternCore* self, uint32_t opType, const void* opData) ; +_Bool __cdecl blPatternEquals(const BLPatternCore* a, const BLPatternCore* b) ; +BLResult __cdecl blPixelConverterInit(BLPixelConverterCore* self) ; +BLResult __cdecl blPixelConverterInitWeak(BLPixelConverterCore* self, const BLPixelConverterCore* other) ; +BLResult __cdecl blPixelConverterReset(BLPixelConverterCore* self) ; +BLResult __cdecl blPixelConverterAssign(BLPixelConverterCore* self, const BLPixelConverterCore* other) ; +BLResult __cdecl blPixelConverterCreate(BLPixelConverterCore* self, const BLFormatInfo* dstInfo, const BLFormatInfo* srcInfo) ; +BLResult __cdecl blPixelConverterConvert(const BLPixelConverterCore* self, + void* dstData, intptr_t dstStride, + const void* srcData, intptr_t srcStride, + uint32_t w, uint32_t h, const BLPixelConverterOptions* options) ; +void __cdecl blRandomReset(BLRandom* self, uint64_t seed) ; +uint32_t __cdecl blRandomNextUInt32(BLRandom* self) ; +uint64_t __cdecl blRandomNextUInt64(BLRandom* self) ; +double __cdecl blRandomNextDouble(BLRandom* self) ; +BLResult __cdecl blRegionInit(BLRegionCore* self) ; +BLResult __cdecl blRegionReset(BLRegionCore* self) ; +BLResult __cdecl blRegionClear(BLRegionCore* self) ; +BLResult __cdecl blRegionShrink(BLRegionCore* self) ; +BLResult __cdecl blRegionReserve(BLRegionCore* self, size_t n) ; +BLResult __cdecl blRegionAssignMove(BLRegionCore* self, BLRegionCore* other) ; +BLResult __cdecl blRegionAssignWeak(BLRegionCore* self, const BLRegionCore* other) ; +BLResult __cdecl blRegionAssignDeep(BLRegionCore* self, const BLRegionCore* other) ; +BLResult __cdecl blRegionAssignBoxI(BLRegionCore* self, const BLBoxI* src) ; +BLResult __cdecl blRegionAssignBoxIArray(BLRegionCore* self, const BLBoxI* data, size_t n) ; +BLResult __cdecl blRegionAssignRectI(BLRegionCore* self, const BLRectI* rect) ; +BLResult __cdecl blRegionAssignRectIArray(BLRegionCore* self, const BLRectI* data, size_t n) ; +BLResult __cdecl blRegionCombine(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, uint32_t op) ; +BLResult __cdecl blRegionCombineRB(BLRegionCore* self, const BLRegionCore* a, const BLBoxI* b, uint32_t op) ; +BLResult __cdecl blRegionCombineBR(BLRegionCore* self, const BLBoxI* a, const BLRegionCore* b, uint32_t op) ; +BLResult __cdecl blRegionCombineBB(BLRegionCore* self, const BLBoxI* a, const BLBoxI* b, uint32_t op) ; +BLResult __cdecl blRegionTranslate(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt) ; +BLResult __cdecl blRegionTranslateAndClip(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt, const BLBoxI* clipBox) ; +BLResult __cdecl blRegionIntersectAndClip(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, const BLBoxI* clipBox) ; +_Bool __cdecl blRegionEquals(const BLRegionCore* a, const BLRegionCore* b) ; +uint32_t __cdecl blRegionGetType(const BLRegionCore* self) ; +uint32_t __cdecl blRegionHitTest(const BLRegionCore* self, const BLPointI* pt) ; +uint32_t __cdecl blRegionHitTestBoxI(const BLRegionCore* self, const BLBoxI* box) ; +BLResult __cdecl blRuntimeInit() ; +BLResult __cdecl blRuntimeShutdown() ; +BLResult __cdecl blRuntimeCleanup(uint32_t cleanupFlags) ; +BLResult __cdecl blRuntimeQueryInfo(uint32_t infoType, void* infoOut) ; +BLResult __cdecl blRuntimeMessageOut(const char* msg) ; +BLResult __cdecl blRuntimeMessageFmt(const char* fmt, ...) ; +BLResult __cdecl blRuntimeMessageVFmt(const char* fmt, va_list ap) ; +uint32_t __cdecl blRuntimeGetTickCount(void) ; +__declspec(noreturn) void __cdecl blRuntimeAssertionFailure(const char* file, int line, const char* msg) ; +BLResult __cdecl blResultFromWinError(uint32_t e) ; +BLResult __cdecl blStringInit(BLStringCore* self) ; +BLResult __cdecl blStringReset(BLStringCore* self) ; +size_t __cdecl blStringGetSize(const BLStringCore* self) ; +size_t __cdecl blStringGetCapacity(const BLStringCore* self) ; +const char* __cdecl blStringGetData(const BLStringCore* self) ; +BLResult __cdecl blStringClear(BLStringCore* self) ; +BLResult __cdecl blStringShrink(BLStringCore* self) ; +BLResult __cdecl blStringReserve(BLStringCore* self, size_t n) ; +BLResult __cdecl blStringResize(BLStringCore* self, size_t n, char fill) ; +BLResult __cdecl blStringMakeMutable(BLStringCore* self, char** dataOut) ; +BLResult __cdecl blStringModifyOp(BLStringCore* self, uint32_t op, size_t n, char** dataOut) ; +BLResult __cdecl blStringInsertOp(BLStringCore* self, size_t index, size_t n, char** dataOut) ; +BLResult __cdecl blStringAssignMove(BLStringCore* self, BLStringCore* other) ; +BLResult __cdecl blStringAssignWeak(BLStringCore* self, const BLStringCore* other) ; +BLResult __cdecl blStringAssignDeep(BLStringCore* self, const BLStringCore* other) ; +BLResult __cdecl blStringAssignData(BLStringCore* self, const char* str, size_t n) ; +BLResult __cdecl blStringApplyOpChar(BLStringCore* self, uint32_t op, char c, size_t n) ; +BLResult __cdecl blStringApplyOpData(BLStringCore* self, uint32_t op, const char* str, size_t n) ; +BLResult __cdecl blStringApplyOpString(BLStringCore* self, uint32_t op, const BLStringCore* other) ; +BLResult __cdecl blStringApplyOpFormat(BLStringCore* self, uint32_t op, const char* fmt, ...) ; +BLResult __cdecl blStringApplyOpFormatV(BLStringCore* self, uint32_t op, const char* fmt, va_list ap) ; +BLResult __cdecl blStringInsertChar(BLStringCore* self, size_t index, char c, size_t n) ; +BLResult __cdecl blStringInsertData(BLStringCore* self, size_t index, const char* str, size_t n) ; +BLResult __cdecl blStringInsertString(BLStringCore* self, size_t index, const BLStringCore* other) ; +BLResult __cdecl blStringRemoveRange(BLStringCore* self, const BLRange* range) ; +_Bool __cdecl blStringEquals(const BLStringCore* self, const BLStringCore* other) ; +_Bool __cdecl blStringEqualsData(const BLStringCore* self, const char* str, size_t n) ; +int __cdecl blStringCompare(const BLStringCore* self, const BLStringCore* other) ; +int __cdecl blStringCompareData(const BLStringCore* self, const char* str, size_t n) ; +BLResult __cdecl blStrokeOptionsInit(BLStrokeOptionsCore* self) ; +BLResult __cdecl blStrokeOptionsInitMove(BLStrokeOptionsCore* self, BLStrokeOptionsCore* other) ; +BLResult __cdecl blStrokeOptionsInitWeak(BLStrokeOptionsCore* self, const BLStrokeOptionsCore* other) ; +BLResult __cdecl blStrokeOptionsReset(BLStrokeOptionsCore* self) ; +BLResult __cdecl blStrokeOptionsAssignMove(BLStrokeOptionsCore* self, BLStrokeOptionsCore* other) ; +BLResult __cdecl blStrokeOptionsAssignWeak(BLStrokeOptionsCore* self, const BLStrokeOptionsCore* other) ; +BLResult __cdecl blVariantInit(void* self) ; +BLResult __cdecl blVariantInitMove(void* self, void* other) ; +BLResult __cdecl blVariantInitWeak(void* self, const void* other) ; +BLResult __cdecl blVariantReset(void* self) ; +uint32_t __cdecl blVariantGetImplType(const void* self) ; +BLResult __cdecl blVariantAssignMove(void* self, void* other) ; +BLResult __cdecl blVariantAssignWeak(void* self, const void* other) ; +_Bool __cdecl blVariantEquals(const void* a, const void* b) ; +enum BLImplType { + BL_IMPL_TYPE_NULL = 0, + BL_IMPL_TYPE_BIT_ARRAY = 1, + BL_IMPL_TYPE_STRING = 2, + BL_IMPL_TYPE_ARRAY_VAR = 3, + BL_IMPL_TYPE_ARRAY_I8 = 4, + BL_IMPL_TYPE_ARRAY_U8 = 5, + BL_IMPL_TYPE_ARRAY_I16 = 6, + BL_IMPL_TYPE_ARRAY_U16 = 7, + BL_IMPL_TYPE_ARRAY_I32 = 8, + BL_IMPL_TYPE_ARRAY_U32 = 9, + BL_IMPL_TYPE_ARRAY_I64 = 10, + BL_IMPL_TYPE_ARRAY_U64 = 11, + BL_IMPL_TYPE_ARRAY_F32 = 12, + BL_IMPL_TYPE_ARRAY_F64 = 13, + BL_IMPL_TYPE_ARRAY_STRUCT_1 = 14, + BL_IMPL_TYPE_ARRAY_STRUCT_2 = 15, + BL_IMPL_TYPE_ARRAY_STRUCT_3 = 16, + BL_IMPL_TYPE_ARRAY_STRUCT_4 = 17, + BL_IMPL_TYPE_ARRAY_STRUCT_6 = 18, + BL_IMPL_TYPE_ARRAY_STRUCT_8 = 19, + BL_IMPL_TYPE_ARRAY_STRUCT_10 = 20, + BL_IMPL_TYPE_ARRAY_STRUCT_12 = 21, + BL_IMPL_TYPE_ARRAY_STRUCT_16 = 22, + BL_IMPL_TYPE_ARRAY_STRUCT_20 = 23, + BL_IMPL_TYPE_ARRAY_STRUCT_24 = 24, + BL_IMPL_TYPE_ARRAY_STRUCT_32 = 25, + BL_IMPL_TYPE_PATH = 32, + BL_IMPL_TYPE_REGION = 33, + BL_IMPL_TYPE_IMAGE = 34, + BL_IMPL_TYPE_IMAGE_CODEC = 35, + BL_IMPL_TYPE_IMAGE_DECODER = 36, + BL_IMPL_TYPE_IMAGE_ENCODER = 37, + BL_IMPL_TYPE_GRADIENT = 38, + BL_IMPL_TYPE_PATTERN = 39, + BL_IMPL_TYPE_CONTEXT = 40, + BL_IMPL_TYPE_FONT = 50, + BL_IMPL_TYPE_FONT_FACE = 51, + BL_IMPL_TYPE_FONT_DATA = 52, + BL_IMPL_TYPE_FONT_LOADER = 53, + BL_IMPL_TYPE_FONT_FEATURE_OPTIONS = 54, + BL_IMPL_TYPE_FONT_VARIATION_OPTIONS = 55, + BL_IMPL_TYPE_COUNT = 64 +}; +enum BLImplTraits { + BL_IMPL_TRAIT_MUTABLE = 0x01u, + BL_IMPL_TRAIT_IMMUTABLE = 0x02u, + BL_IMPL_TRAIT_EXTERNAL = 0x04u, + BL_IMPL_TRAIT_FOREIGN = 0x08u, + BL_IMPL_TRAIT_VIRT = 0x10u, + BL_IMPL_TRAIT_NULL = 0x80u +}; +struct BLVariantImpl { + union { + + const void* virt; + + uintptr_t header[3]; + }; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t reserved[4]; +}; +struct BLVariantCore { + BLVariantImpl* impl; +}; +BLVariantCore blNone[BL_IMPL_TYPE_COUNT]; +struct BLArrayImpl { + union { + struct { + + void* data; + + size_t size; + }; + + BLDataView view; + }; + size_t capacity; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t itemSize; + uint8_t dispatchType; + uint8_t reserved[2]; +}; +struct BLArrayCore { + BLArrayImpl* impl; +}; + +enum BLGeometryDirection { + BL_GEOMETRY_DIRECTION_NONE = 0, + BL_GEOMETRY_DIRECTION_CW = 1, + BL_GEOMETRY_DIRECTION_CCW = 2 +}; +enum BLGeometryType { + BL_GEOMETRY_TYPE_NONE = 0, + BL_GEOMETRY_TYPE_BOXI = 1, + BL_GEOMETRY_TYPE_BOXD = 2, + BL_GEOMETRY_TYPE_RECTI = 3, + BL_GEOMETRY_TYPE_RECTD = 4, + BL_GEOMETRY_TYPE_CIRCLE = 5, + BL_GEOMETRY_TYPE_ELLIPSE = 6, + BL_GEOMETRY_TYPE_ROUND_RECT = 7, + BL_GEOMETRY_TYPE_ARC = 8, + BL_GEOMETRY_TYPE_CHORD = 9, + BL_GEOMETRY_TYPE_PIE = 10, + BL_GEOMETRY_TYPE_LINE = 11, + BL_GEOMETRY_TYPE_TRIANGLE = 12, + BL_GEOMETRY_TYPE_POLYLINEI = 13, + BL_GEOMETRY_TYPE_POLYLINED = 14, + BL_GEOMETRY_TYPE_POLYGONI = 15, + BL_GEOMETRY_TYPE_POLYGOND = 16, + BL_GEOMETRY_TYPE_ARRAY_VIEW_BOXI = 17, + BL_GEOMETRY_TYPE_ARRAY_VIEW_BOXD = 18, + BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTI = 19, + BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTD = 20, + BL_GEOMETRY_TYPE_PATH = 21, + BL_GEOMETRY_TYPE_REGION = 22, + BL_GEOMETRY_TYPE_COUNT = 23 +}; +enum BLFillRule { + BL_FILL_RULE_NON_ZERO = 0, + BL_FILL_RULE_EVEN_ODD = 1, + BL_FILL_RULE_COUNT = 2 +}; +enum BLHitTest { + BL_HIT_TEST_IN = 0, + BL_HIT_TEST_PART = 1, + BL_HIT_TEST_OUT = 2, + BL_HIT_TEST_INVALID = 0xFFFFFFFFu +}; +struct BLPointI { + int x; + int y; +}; +struct BLSizeI { + int w; + int h; +}; +struct BLBoxI { + int x0; + int y0; + int x1; + int y1; +}; +struct BLRectI { + int x; + int y; + int w; + int h; +}; +struct BLPoint { + double x; + double y; +}; +struct BLSize { + double w; + double h; +}; +struct BLBox { + double x0; + double y0; + double x1; + double y1; +}; +struct BLRect { + double x; + double y; + double w; + double h; +}; +struct BLLine { + double x0, y0; + double x1, y1; +}; +struct BLTriangle { + double x0, y0; + double x1, y1; + double x2, y2; +}; +struct BLRoundRect { + double x, y, w, h; + double rx, ry; +}; +struct BLCircle { + double cx, cy; + double r; +}; +struct BLEllipse { + double cx, cy; + double rx, ry; +}; +struct BLArc { + double cx, cy; + double rx, ry; + double start; + double sweep; +}; +enum BLGlyphItemFlags { + BL_GLYPH_ITEM_FLAG_MARK = 0x80000000u +}; +enum BLGlyphPlacementType { + BL_GLYPH_PLACEMENT_TYPE_NONE = 0, + BL_GLYPH_PLACEMENT_TYPE_ADVANCE_OFFSET = 1, + BL_GLYPH_PLACEMENT_TYPE_DESIGN_UNITS = 2, + BL_GLYPH_PLACEMENT_TYPE_USER_UNITS = 3, + BL_GLYPH_PLACEMENT_TYPE_ABSOLUTE_UNITS = 4 +}; +enum BLGlyphRunFlags { + BL_GLYPH_RUN_FLAG_UCS4_CONTENT = 0x10000000u, + BL_GLYPH_RUN_FLAG_INVALID_TEXT = 0x20000000u, + BL_GLYPH_RUN_FLAG_UNDEFINED_GLYPHS = 0x40000000u, + BL_GLYPH_RUN_FLAG_INVALID_FONT_DATA = 0x80000000u +}; +enum BLFontFaceType { + BL_FONT_FACE_TYPE_NONE = 0, + BL_FONT_FACE_TYPE_OPENTYPE = 1, + BL_FONT_FACE_TYPE_COUNT = 2 +}; +enum BLFontFaceFlags { + BL_FONT_FACE_FLAG_TYPOGRAPHIC_NAMES = 0x00000001u, + BL_FONT_FACE_FLAG_TYPOGRAPHIC_METRICS = 0x00000002u, + BL_FONT_FACE_FLAG_CHAR_TO_GLYPH_MAPPING = 0x00000004u, + BL_FONT_FACE_FLAG_HORIZONTAL_METIRCS = 0x00000010u, + BL_FONT_FACE_FLAG_VERTICAL_METRICS = 0x00000020u, + BL_FONT_FACE_FLAG_HORIZONTAL_KERNING = 0x00000040u, + BL_FONT_FACE_FLAG_VERTICAL_KERNING = 0x00000080u, + BL_FONT_FACE_FLAG_OPENTYPE_FEATURES = 0x00000100u, + BL_FONT_FACE_FLAG_OPENTYPE_VARIATIONS = 0x20000000u, + BL_FONT_FACE_FLAG_PANOSE_DATA = 0x00000200u, + BL_FONT_FACE_FLAG_UNICODE_COVERAGE = 0x00000400u, + BL_FONT_FACE_FLAG_VARIATION_SEQUENCES = 0x10000000u, + BL_FONT_FACE_FLAG_SYMBOL_FONT = 0x40000000u, + BL_FONT_FACE_FLAG_LAST_RESORT_FONT = 0x80000000u +}; +enum BLFontFaceDiagFlags { + BL_FONT_FACE_DIAG_WRONG_NAME_DATA = 0x00000001u, + BL_FONT_FACE_DIAG_FIXED_NAME_DATA = 0x00000002u, + BL_FONT_FACE_DIAG_WRONG_KERN_DATA = 0x00000004u, + BL_FONT_FACE_DIAG_FIXED_KERN_DATA = 0x00000008u, + BL_FONT_FACE_DIAG_WRONG_CMAP_DATA = 0x00000010u, + BL_FONT_FACE_DIAG_WRONG_CMAP_FORMAT = 0x00000020u, + BL_FONT_FACE_DIAG_WRONG_GDEF_DATA = 0x00000100u, + BL_FONT_FACE_DIAG_WRONG_GPOS_DATA = 0x00000400u, + BL_FONT_FACE_DIAG_WRONG_GSUB_DATA = 0x00001000u +}; +enum BLFontLoaderFlags { + BL_FONT_LOADER_FLAG_COLLECTION = 0x00000001u +}; +enum BLFontOutlineType { + BL_FONT_OUTLINE_TYPE_NONE = 0, + BL_FONT_OUTLINE_TYPE_TRUETYPE = 1, + BL_FONT_OUTLINE_TYPE_CFF = 2, + BL_FONT_OUTLINE_TYPE_CFF2 = 3 +}; +enum BLFontStretch { + BL_FONT_STRETCH_ULTRA_CONDENSED = 1, + BL_FONT_STRETCH_EXTRA_CONDENSED = 2, + BL_FONT_STRETCH_CONDENSED = 3, + BL_FONT_STRETCH_SEMI_CONDENSED = 4, + BL_FONT_STRETCH_NORMAL = 5, + BL_FONT_STRETCH_SEMI_EXPANDED = 6, + BL_FONT_STRETCH_EXPANDED = 7, + BL_FONT_STRETCH_EXTRA_EXPANDED = 8, + BL_FONT_STRETCH_ULTRA_EXPANDED = 9 +}; +enum BLFontStyle { + BL_FONT_STYLE_NORMAL = 0, + BL_FONT_STYLE_OBLIQUE = 1, + BL_FONT_STYLE_ITALIC = 2, + BL_FONT_STYLE_COUNT = 3 +}; +enum BLFontWeight { + BL_FONT_WEIGHT_THIN = 100, + BL_FONT_WEIGHT_EXTRA_LIGHT = 200, + BL_FONT_WEIGHT_LIGHT = 300, + BL_FONT_WEIGHT_SEMI_LIGHT = 350, + BL_FONT_WEIGHT_NORMAL = 400, + BL_FONT_WEIGHT_MEDIUM = 500, + BL_FONT_WEIGHT_SEMI_BOLD = 600, + BL_FONT_WEIGHT_BOLD = 700, + BL_FONT_WEIGHT_EXTRA_BOLD = 800, + BL_FONT_WEIGHT_BLACK = 900, + BL_FONT_WEIGHT_EXTRA_BLACK = 950 +}; +enum BLFontStringId { + BL_FONT_STRING_COPYRIGHT_NOTICE = 0, + BL_FONT_STRING_FAMILY_NAME = 1, + BL_FONT_STRING_SUBFAMILY_NAME = 2, + BL_FONT_STRING_UNIQUE_IDENTIFIER = 3, + BL_FONT_STRING_FULL_NAME = 4, + BL_FONT_STRING_VERSION_STRING = 5, + BL_FONT_STRING_POST_SCRIPT_NAME = 6, + BL_FONT_STRING_TRADEMARK = 7, + BL_FONT_STRING_MANUFACTURER_NAME = 8, + BL_FONT_STRING_DESIGNER_NAME = 9, + BL_FONT_STRING_DESCRIPTION = 10, + BL_FONT_STRING_VENDOR_URL = 11, + BL_FONT_STRING_DESIGNER_URL = 12, + BL_FONT_STRING_LICENSE_DESCRIPTION = 13, + BL_FONT_STRING_LICENSE_INFO_URL = 14, + BL_FONT_STRING_RESERVED = 15, + BL_FONT_STRING_TYPOGRAPHIC_FAMILY_NAME = 16, + BL_FONT_STRING_TYPOGRAPHIC_SUBFAMILY_NAME = 17, + BL_FONT_STRING_COMPATIBLE_FULL_NAME = 18, + BL_FONT_STRING_SAMPLE_TEXT = 19, + BL_FONT_STRING_POST_SCRIPT_CID_NAME = 20, + BL_FONT_STRING_WWS_FAMILY_NAME = 21, + BL_FONT_STRING_WWS_SUBFAMILY_NAME = 22, + BL_FONT_STRING_LIGHT_BACKGROUND_PALETTE = 23, + BL_FONT_STRING_DARK_BACKGROUND_PALETTE = 24, + BL_FONT_STRING_VARIATIONS_POST_SCRIPT_PREFIX= 25, + BL_FONT_STRING_COMMON_COUNT = 26, + BL_FONT_STRING_CUSTOM_START_INDEX = 255 +}; +enum BLFontUnicodeCoverageIndex { + BL_FONT_UC_INDEX_BASIC_LATIN, + BL_FONT_UC_INDEX_LATIN1_SUPPLEMENT, + BL_FONT_UC_INDEX_LATIN_EXTENDED_A, + BL_FONT_UC_INDEX_LATIN_EXTENDED_B, + BL_FONT_UC_INDEX_IPA_EXTENSIONS, + + + BL_FONT_UC_INDEX_SPACING_MODIFIER_LETTERS, + + + BL_FONT_UC_INDEX_COMBINING_DIACRITICAL_MARKS, + BL_FONT_UC_INDEX_GREEK_AND_COPTIC, + BL_FONT_UC_INDEX_COPTIC, + BL_FONT_UC_INDEX_CYRILLIC, + + + + BL_FONT_UC_INDEX_ARMENIAN, + BL_FONT_UC_INDEX_HEBREW, + BL_FONT_UC_INDEX_VAI, + BL_FONT_UC_INDEX_ARABIC, + + BL_FONT_UC_INDEX_NKO, + BL_FONT_UC_INDEX_DEVANAGARI, + BL_FONT_UC_INDEX_BENGALI, + BL_FONT_UC_INDEX_GURMUKHI, + BL_FONT_UC_INDEX_GUJARATI, + BL_FONT_UC_INDEX_ORIYA, + BL_FONT_UC_INDEX_TAMIL, + BL_FONT_UC_INDEX_TELUGU, + BL_FONT_UC_INDEX_KANNADA, + BL_FONT_UC_INDEX_MALAYALAM, + BL_FONT_UC_INDEX_THAI, + BL_FONT_UC_INDEX_LAO, + BL_FONT_UC_INDEX_GEORGIAN, + + BL_FONT_UC_INDEX_BALINESE, + BL_FONT_UC_INDEX_HANGUL_JAMO, + BL_FONT_UC_INDEX_LATIN_EXTENDED_ADDITIONAL, + + + BL_FONT_UC_INDEX_GREEK_EXTENDED, + BL_FONT_UC_INDEX_GENERAL_PUNCTUATION, + + BL_FONT_UC_INDEX_SUPERSCRIPTS_AND_SUBSCRIPTS, + BL_FONT_UC_INDEX_CURRENCY_SYMBOLS, + BL_FONT_UC_INDEX_COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS, + BL_FONT_UC_INDEX_LETTERLIKE_SYMBOLS, + BL_FONT_UC_INDEX_NUMBER_FORMS, + BL_FONT_UC_INDEX_ARROWS, + + + + BL_FONT_UC_INDEX_MATHEMATICAL_OPERATORS, + + + + BL_FONT_UC_INDEX_MISCELLANEOUS_TECHNICAL, + BL_FONT_UC_INDEX_CONTROL_PICTURES, + BL_FONT_UC_INDEX_OPTICAL_CHARACTER_RECOGNITION, + BL_FONT_UC_INDEX_ENCLOSED_ALPHANUMERICS, + BL_FONT_UC_INDEX_BOX_DRAWING, + BL_FONT_UC_INDEX_BLOCK_ELEMENTS, + BL_FONT_UC_INDEX_GEOMETRIC_SHAPES, + BL_FONT_UC_INDEX_MISCELLANEOUS_SYMBOLS, + BL_FONT_UC_INDEX_DINGBATS, + BL_FONT_UC_INDEX_CJK_SYMBOLS_AND_PUNCTUATION, + BL_FONT_UC_INDEX_HIRAGANA, + BL_FONT_UC_INDEX_KATAKANA, + + BL_FONT_UC_INDEX_BOPOMOFO, + + BL_FONT_UC_INDEX_HANGUL_COMPATIBILITY_JAMO, + BL_FONT_UC_INDEX_PHAGS_PA, + BL_FONT_UC_INDEX_ENCLOSED_CJK_LETTERS_AND_MONTHS, + BL_FONT_UC_INDEX_CJK_COMPATIBILITY, + BL_FONT_UC_INDEX_HANGUL_SYLLABLES, + BL_FONT_UC_INDEX_NON_PLANE, + BL_FONT_UC_INDEX_PHOENICIAN, + BL_FONT_UC_INDEX_CJK_UNIFIED_IDEOGRAPHS, + + + + + + + BL_FONT_UC_INDEX_PRIVATE_USE_PLANE0, + BL_FONT_UC_INDEX_CJK_STROKES, + + + BL_FONT_UC_INDEX_ALPHABETIC_PRESENTATION_FORMS, + BL_FONT_UC_INDEX_ARABIC_PRESENTATION_FORMS_A, + BL_FONT_UC_INDEX_COMBINING_HALF_MARKS, + BL_FONT_UC_INDEX_VERTICAL_FORMS, + + BL_FONT_UC_INDEX_SMALL_FORM_VARIANTS, + BL_FONT_UC_INDEX_ARABIC_PRESENTATION_FORMS_B, + BL_FONT_UC_INDEX_HALFWIDTH_AND_FULLWIDTH_FORMS, + BL_FONT_UC_INDEX_SPECIALS, + BL_FONT_UC_INDEX_TIBETAN, + BL_FONT_UC_INDEX_SYRIAC, + BL_FONT_UC_INDEX_THAANA, + BL_FONT_UC_INDEX_SINHALA, + BL_FONT_UC_INDEX_MYANMAR, + BL_FONT_UC_INDEX_ETHIOPIC, + + + BL_FONT_UC_INDEX_CHEROKEE, + BL_FONT_UC_INDEX_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS, + BL_FONT_UC_INDEX_OGHAM, + BL_FONT_UC_INDEX_RUNIC, + BL_FONT_UC_INDEX_KHMER, + + BL_FONT_UC_INDEX_MONGOLIAN, + BL_FONT_UC_INDEX_BRAILLE_PATTERNS, + BL_FONT_UC_INDEX_YI_SYLLABLES_AND_RADICALS, + + BL_FONT_UC_INDEX_TAGALOG_HANUNOO_BUHID_TAGBANWA, + + + + BL_FONT_UC_INDEX_OLD_ITALIC, + BL_FONT_UC_INDEX_GOTHIC, + BL_FONT_UC_INDEX_DESERET, + BL_FONT_UC_INDEX_MUSICAL_SYMBOLS, + + + BL_FONT_UC_INDEX_MATHEMATICAL_ALPHANUMERIC_SYMBOLS, + BL_FONT_UC_INDEX_PRIVATE_USE_PLANE_15_16, + + BL_FONT_UC_INDEX_VARIATION_SELECTORS, + + BL_FONT_UC_INDEX_TAGS, + BL_FONT_UC_INDEX_LIMBU, + BL_FONT_UC_INDEX_TAI_LE, + BL_FONT_UC_INDEX_NEW_TAI_LUE, + BL_FONT_UC_INDEX_BUGINESE, + BL_FONT_UC_INDEX_GLAGOLITIC, + BL_FONT_UC_INDEX_TIFINAGH, + BL_FONT_UC_INDEX_YIJING_HEXAGRAM_SYMBOLS, + BL_FONT_UC_INDEX_SYLOTI_NAGRI, + BL_FONT_UC_INDEX_LINEAR_B_SYLLABARY_AND_IDEOGRAMS, + + + BL_FONT_UC_INDEX_ANCIENT_GREEK_NUMBERS, + BL_FONT_UC_INDEX_UGARITIC, + BL_FONT_UC_INDEX_OLD_PERSIAN, + BL_FONT_UC_INDEX_SHAVIAN, + BL_FONT_UC_INDEX_OSMANYA, + BL_FONT_UC_INDEX_CYPRIOT_SYLLABARY, + BL_FONT_UC_INDEX_KHAROSHTHI, + BL_FONT_UC_INDEX_TAI_XUAN_JING_SYMBOLS, + BL_FONT_UC_INDEX_CUNEIFORM, + + BL_FONT_UC_INDEX_COUNTING_ROD_NUMERALS, + BL_FONT_UC_INDEX_SUNDANESE, + BL_FONT_UC_INDEX_LEPCHA, + BL_FONT_UC_INDEX_OL_CHIKI, + BL_FONT_UC_INDEX_SAURASHTRA, + BL_FONT_UC_INDEX_KAYAH_LI, + BL_FONT_UC_INDEX_REJANG, + BL_FONT_UC_INDEX_CHAM, + BL_FONT_UC_INDEX_ANCIENT_SYMBOLS, + BL_FONT_UC_INDEX_PHAISTOS_DISC, + BL_FONT_UC_INDEX_CARIAN_LYCIAN_LYDIAN, + + + BL_FONT_UC_INDEX_DOMINO_AND_MAHJONG_TILES, + + BL_FONT_UC_INDEX_INTERNAL_USAGE_123, + BL_FONT_UC_INDEX_INTERNAL_USAGE_124, + BL_FONT_UC_INDEX_INTERNAL_USAGE_125, + BL_FONT_UC_INDEX_INTERNAL_USAGE_126, + BL_FONT_UC_INDEX_INTERNAL_USAGE_127 +}; +enum BLTextDirection { + BL_TEXT_DIRECTION_LTR = 0, + BL_TEXT_DIRECTION_RTL = 1, + BL_TEXT_DIRECTION_COUNT = 2 +}; +enum BLTextOrientation { + BL_TEXT_ORIENTATION_HORIZONTAL = 0, + BL_TEXT_ORIENTATION_VERTICAL = 1, + BL_TEXT_ORIENTATION_COUNT = 2 +}; +struct BLGlyphItem { + union { + uint32_t value; + struct { + + BLGlyphId glyphId; + uint16_t reserved; + + }; + }; +}; +struct BLGlyphInfo { + uint32_t cluster; + uint32_t reserved[2]; +}; +struct BLGlyphPlacement { + BLPointI placement; + BLPointI advance; +}; +struct BLGlyphMappingState { + size_t glyphCount; + size_t undefinedFirst; + size_t undefinedCount; +}; +struct BLGlyphOutlineSinkInfo { + size_t glyphIndex; + size_t contourCount; +}; +struct BLGlyphRun { + void* glyphIdData; + void* placementData; + size_t size; + uint8_t glyphIdSize; + uint8_t placementType; + int8_t glyphIdAdvance; + int8_t placementAdvance; + uint32_t flags; +}; +struct BLFontFaceInfo { + uint8_t faceType; + uint8_t outlineType; + uint16_t glyphCount; + uint32_t faceIndex; + uint32_t faceFlags; + uint32_t diagFlags; +}; +struct BLFontTable { + const uint8_t* data; + size_t size; +}; +struct BLFontFeature { + BLTag tag; + uint32_t value; +}; +struct BLFontVariation { + BLTag tag; + float value; +}; +struct BLFontUnicodeCoverage { + uint32_t data[4]; +}; +struct BLFontPanose { + union { + uint8_t data[10]; + uint8_t familyKind; + struct { + uint8_t familyKind; + uint8_t serifStyle; + uint8_t weight; + uint8_t proportion; + uint8_t contrast; + uint8_t strokeVariation; + uint8_t armStyle; + uint8_t letterform; + uint8_t midline; + uint8_t xHeight; + } text; + struct { + uint8_t familyKind; + uint8_t toolKind; + uint8_t weight; + uint8_t spacing; + uint8_t aspectRatio; + uint8_t contrast; + uint8_t topology; + uint8_t form; + uint8_t finials; + uint8_t xAscent; + } script; + struct { + uint8_t familyKind; + uint8_t decorativeClass; + uint8_t weight; + uint8_t aspect; + uint8_t contrast; + uint8_t serifVariant; + uint8_t treatment; + uint8_t lining; + uint8_t topology; + uint8_t characterRange; + } decorative; + struct { + uint8_t familyKind; + uint8_t symbolKind; + uint8_t weight; + uint8_t spacing; + uint8_t aspectRatioAndContrast; + uint8_t aspectRatio94; + uint8_t aspectRatio119; + uint8_t aspectRatio157; + uint8_t aspectRatio163; + uint8_t aspectRatio211; + } symbol; + }; +}; +struct BLFontMatrix { + union { + double m[4]; + struct { + double m00; + double m01; + double m10; + double m11; + }; + }; +}; +struct BLFontMetrics { + float size; + union { + struct { + + float ascent; + + float vAscent; + + float descent; + + float vDescent; + }; + struct { + float ascentByOrientation[2]; + float descentByOrientation[2]; + }; + }; + float lineGap; + float xHeight; + float capHeight; + float underlinePosition; + float underlineThickness; + float strikethroughPosition; + float strikethroughThickness; +}; +struct BLFontDesignMetrics { + int unitsPerEm; + int lineGap; + int xHeight; + int capHeight; + union { + struct { + + int ascent; + + int vAscent; + + int descent; + + int vDescent; + + int hMinLSB; + + int vMinLSB; + + int hMinTSB; + + int vMinTSB; + + int hMaxAdvance; + + int vMaxAdvance; + }; + struct { + + int ascentByOrientation[2]; + + int descentByOrientation[2]; + + int minLSBByOrientation[2]; + + int minTSBByOrientation[2]; + + int maxAdvanceByOrientation[2]; + }; + }; + int underlinePosition; + int underlineThickness; + int strikethroughPosition; + int strikethroughThickness; +}; +struct BLTextMetrics { + BLPoint advance; + BLBox boundingBox; +}; + +struct BLGlyphBufferImpl { + union { + struct { + + BLGlyphItem* glyphItemData; + + BLGlyphPlacement* placementData; + + size_t size; + + uint32_t reserved; + + uint32_t flags; + }; + + BLGlyphRun glyphRun; + }; + BLGlyphInfo* glyphInfoData; +}; +struct BLGlyphBufferCore { + BLGlyphBufferImpl* impl; +}; +enum BLPathCmd { + BL_PATH_CMD_MOVE = 0, + BL_PATH_CMD_ON = 1, + BL_PATH_CMD_QUAD = 2, + BL_PATH_CMD_CUBIC = 3, + BL_PATH_CMD_CLOSE = 4, + BL_PATH_CMD_COUNT = 5 +}; +enum BLPathCmdExtra { + BL_PATH_CMD_PRESERVE = 0xFFFFFFFFu +}; +enum BLPathFlags { + BL_PATH_FLAG_EMPTY = 0x00000001u, + BL_PATH_FLAG_MULTIPLE = 0x00000002u, + BL_PATH_FLAG_QUADS = 0x00000004u, + BL_PATH_FLAG_CUBICS = 0x00000008u, + BL_PATH_FLAG_INVALID = 0x40000000u, + BL_PATH_FLAG_DIRTY = 0x80000000u +}; +enum BLPathReverseMode { + BL_PATH_REVERSE_MODE_COMPLETE = 0, + BL_PATH_REVERSE_MODE_SEPARATE = 1, + BL_PATH_REVERSE_MODE_COUNT = 2 +}; +enum BLStrokeJoin { + BL_STROKE_JOIN_MITER_CLIP = 0, + BL_STROKE_JOIN_MITER_BEVEL = 1, + BL_STROKE_JOIN_MITER_ROUND = 2, + BL_STROKE_JOIN_BEVEL = 3, + BL_STROKE_JOIN_ROUND = 4, + BL_STROKE_JOIN_COUNT = 5 +}; +enum BLStrokeCapPosition { + BL_STROKE_CAP_POSITION_START = 0, + BL_STROKE_CAP_POSITION_END = 1, + BL_STROKE_CAP_POSITION_COUNT = 2 +}; +enum BLStrokeCap { + BL_STROKE_CAP_BUTT = 0, + BL_STROKE_CAP_SQUARE = 1, + BL_STROKE_CAP_ROUND = 2, + BL_STROKE_CAP_ROUND_REV = 3, + BL_STROKE_CAP_TRIANGLE = 4, + BL_STROKE_CAP_TRIANGLE_REV = 5, + BL_STROKE_CAP_COUNT = 6 +}; +enum BLStrokeTransformOrder { + BL_STROKE_TRANSFORM_ORDER_AFTER = 0, + BL_STROKE_TRANSFORM_ORDER_BEFORE = 1, + BL_STROKE_TRANSFORM_ORDER_COUNT = 2 +}; +enum BLFlattenMode { + BL_FLATTEN_MODE_DEFAULT = 0, + BL_FLATTEN_MODE_RECURSIVE = 1, + BL_FLATTEN_MODE_COUNT = 2 +}; +enum BLOffsetMode { + BL_OFFSET_MODE_DEFAULT = 0, + BL_OFFSET_MODE_ITERATIVE = 1, + BL_OFFSET_MODE_COUNT = 2 +}; +struct BLApproximationOptions { + uint8_t flattenMode; + uint8_t offsetMode; + uint8_t reservedFlags[6]; + double flattenTolerance; + double simplifyTolerance; + double offsetParameter; +}; +const BLApproximationOptions blDefaultApproximationOptions; +struct BLStrokeOptionsCore { + union { + struct { + uint8_t startCap; + uint8_t endCap; + uint8_t join; + uint8_t transformOrder; + uint8_t reserved[4]; + }; + uint8_t caps[BL_STROKE_CAP_POSITION_COUNT]; + uint64_t hints; + }; + double width; + double miterLimit; + double dashOffset; + BLArrayCore dashArray; +}; +struct BLPathView { + const uint8_t* commandData; + const BLPoint* vertexData; + size_t size; +}; +struct BLPathImpl { + union { + struct { + + uint8_t* commandData; + + BLPoint* vertexData; + + size_t size; + }; + + BLPathView view; + }; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + volatile uint32_t flags; + size_t capacity; +}; +struct BLPathCore { + BLPathImpl* impl; +}; +struct BLStringImpl { + union { + struct { + + char* data; + + size_t size; + }; + + BLStringView view; + }; + size_t capacity; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t reserved[4]; +}; +struct BLStringCore { + BLStringImpl* impl; +}; +struct BLFontDataVirt { + BLResult (__cdecl* destroy)(BLFontDataImpl* impl) ; + BLResult (__cdecl* listTags)(const BLFontDataImpl* impl, BLArrayCore* out) ; + size_t (__cdecl* queryTables)(const BLFontDataImpl* impl, BLFontTable* dst, const BLTag* tags, size_t n) ; +}; +struct BLFontDataImpl { + const BLFontDataVirt* virt; + void* data; + size_t size; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint32_t flags; +}; +struct BLFontDataCore { + BLFontDataImpl* impl; +}; +struct BLFontLoaderVirt { + BLResult (__cdecl* destroy)(BLFontLoaderImpl* impl) ; + BLFontDataImpl* (__cdecl* dataByFaceIndex)(BLFontLoaderImpl* impl, uint32_t faceIndex) ; +}; +struct BLFontLoaderImpl { + const BLFontLoaderVirt* virt; + void* data; + size_t size; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t faceType; + uint32_t faceCount; + uint32_t loaderFlags; +}; +struct BLFontLoaderCore { + BLFontLoaderImpl* impl; +}; +struct BLFontFaceVirt { + BLResult (__cdecl* destroy)(BLFontFaceImpl* impl) ; +}; +struct BLFontFaceImpl { + const BLFontFaceVirt* virt; + BLFontDataCore data; + BLFontLoaderCore loader; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint16_t weight; + uint8_t stretch; + uint8_t style; + BLFontFaceInfo faceInfo; + uint64_t faceUniqueId; + BLStringCore fullName; + BLStringCore familyName; + BLStringCore subfamilyName; + BLStringCore postScriptName; + BLFontDesignMetrics designMetrics; + BLFontUnicodeCoverage unicodeCoverage; + BLFontPanose panose; +}; +struct BLFontFaceCore { + BLFontFaceImpl* impl; +}; +struct BLFontImpl { + BLFontFaceCore face; + BLArrayCore features; + BLArrayCore variations; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint16_t weight; + uint8_t stretch; + uint8_t style; + BLFontMetrics metrics; + BLFontMatrix matrix; +}; +struct BLFontCore { + BLFontImpl* impl; +}; +enum BLFormat { + BL_FORMAT_NONE = 0, + BL_FORMAT_PRGB32 = 1, + BL_FORMAT_XRGB32 = 2, + BL_FORMAT_A8 = 3, + BL_FORMAT_COUNT = 4, + BL_FORMAT_RESERVED_COUNT = 8 +}; +enum BLFormatFlags { + BL_FORMAT_FLAG_RGB = 0x00000001u, + BL_FORMAT_FLAG_ALPHA = 0x00000002u, + BL_FORMAT_FLAG_RGBA = 0x00000003u, + BL_FORMAT_FLAG_LUM = 0x00000004u, + BL_FORMAT_FLAG_LUMA = 0x00000006u, + BL_FORMAT_FLAG_INDEXED = 0x00000010u, + BL_FORMAT_FLAG_PREMULTIPLIED = 0x00000100u, + BL_FORMAT_FLAG_BYTE_SWAP = 0x00000200u, + BL_FORMAT_FLAG_BYTE_ALIGNED = 0x00010000u +}; +struct BLFormatInfo { + uint32_t depth; + uint32_t flags; + union { + struct { + uint8_t sizes[4]; + uint8_t shifts[4]; + }; + struct { + uint8_t rSize; + uint8_t gSize; + uint8_t bSize; + uint8_t aSize; + uint8_t rShift; + uint8_t gShift; + uint8_t bShift; + uint8_t aShift; + }; + const BLRgba32* palette; + }; +}; +const BLFormatInfo blFormatInfo[BL_FORMAT_RESERVED_COUNT]; +enum BLImageCodecFeatures { + BL_IMAGE_CODEC_FEATURE_READ = 0x00000001u, + BL_IMAGE_CODEC_FEATURE_WRITE = 0x00000002u, + BL_IMAGE_CODEC_FEATURE_LOSSLESS = 0x00000004u, + BL_IMAGE_CODEC_FEATURE_LOSSY = 0x00000008u, + BL_IMAGE_CODEC_FEATURE_MULTI_FRAME = 0x00000010u, + BL_IMAGE_CODEC_FEATURE_IPTC = 0x10000000u, + BL_IMAGE_CODEC_FEATURE_EXIF = 0x20000000u, + BL_IMAGE_CODEC_FEATURE_XMP = 0x40000000u +}; +enum BLImageInfoFlags { + BL_IMAGE_INFO_FLAG_PROGRESSIVE = 0x00000001u +}; +enum BLImageScaleFilter { + BL_IMAGE_SCALE_FILTER_NONE = 0, + BL_IMAGE_SCALE_FILTER_NEAREST = 1, + BL_IMAGE_SCALE_FILTER_BILINEAR = 2, + BL_IMAGE_SCALE_FILTER_BICUBIC = 3, + BL_IMAGE_SCALE_FILTER_BELL = 4, + BL_IMAGE_SCALE_FILTER_GAUSS = 5, + BL_IMAGE_SCALE_FILTER_HERMITE = 6, + BL_IMAGE_SCALE_FILTER_HANNING = 7, + BL_IMAGE_SCALE_FILTER_CATROM = 8, + BL_IMAGE_SCALE_FILTER_BESSEL = 9, + BL_IMAGE_SCALE_FILTER_SINC = 10, + BL_IMAGE_SCALE_FILTER_LANCZOS = 11, + BL_IMAGE_SCALE_FILTER_BLACKMAN = 12, + BL_IMAGE_SCALE_FILTER_MITCHELL = 13, + BL_IMAGE_SCALE_FILTER_USER = 14, + BL_IMAGE_SCALE_FILTER_COUNT = 15 +}; +typedef BLResult (__cdecl* BLImageScaleUserFunc)(double* dst, const double* tArray, size_t n, const void* data) ; +struct BLImageData { + void* pixelData; + intptr_t stride; + BLSizeI size; + uint32_t format; + uint32_t flags; +}; +struct BLImageInfo { + BLSizeI size; + BLSize density; + uint32_t flags; + uint16_t depth; + uint16_t planeCount; + uint64_t frameCount; + char format[16]; + char compression[16]; +}; +struct BLImageScaleOptions { + BLImageScaleUserFunc userFunc; + void* userData; + double radius; + union { + double data[3]; + struct { + double b, c; + } mitchell; + }; +}; +struct BLImageImpl { + void* pixelData; + intptr_t stride; + volatile void* writer; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t format; + uint8_t flags; + uint16_t depth; + BLSizeI size; +}; +struct BLImageCore { + BLImageImpl* impl; +}; +struct BLImageCodecVirt { + BLResult (__cdecl* destroy)(BLImageCodecImpl* impl) ; + uint32_t (__cdecl* inspectData)(const BLImageCodecImpl* impl, const uint8_t* data, size_t size) ; + BLResult (__cdecl* createDecoder)(const BLImageCodecImpl* impl, BLImageDecoderCore* dst) ; + BLResult (__cdecl* createEncoder)(const BLImageCodecImpl* impl, BLImageEncoderCore* dst) ; +}; +struct BLImageCodecImpl { + const BLImageCodecVirt* virt; + const char* name; + const char* vendor; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint32_t features; + const char* mimeType; + const char* extensions; +}; +struct BLImageCodecCore { + BLImageCodecImpl* impl; +}; +struct BLImageDecoderVirt { + BLResult (__cdecl* destroy)(BLImageDecoderImpl* impl) ; + BLResult (__cdecl* restart)(BLImageDecoderImpl* impl) ; + BLResult (__cdecl* readInfo)(BLImageDecoderImpl* impl, BLImageInfo* infoOut, const uint8_t* data, size_t size) ; + BLResult (__cdecl* readFrame)(BLImageDecoderImpl* impl, BLImageCore* imageOut, const uint8_t* data, size_t size) ; +}; +struct BLImageDecoderImpl { + const BLImageDecoderVirt* virt; + BLImageCodecCore codec; + void* handle; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + BLResult lastResult; + uint64_t frameIndex; + size_t bufferIndex; +}; +struct BLImageDecoderCore { + BLImageDecoderImpl* impl; +}; +struct BLImageEncoderVirt { + BLResult (__cdecl* destroy)(BLImageEncoderImpl* impl) ; + BLResult (__cdecl* restart)(BLImageEncoderImpl* impl) ; + BLResult (__cdecl* writeFrame)(BLImageEncoderImpl* impl, BLArrayCore* dst, const BLImageCore* image) ; +}; +struct BLImageEncoderImpl { + const BLImageEncoderVirt* virt; + BLImageCodecCore codec; + void* handle; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + BLResult lastResult; + uint64_t frameIndex; + size_t bufferIndex; +}; +struct BLImageEncoderCore { + BLImageEncoderImpl* impl; +}; + +typedef BLResult (__cdecl* BLMapPointDArrayFunc)(const void* ctx, BLPoint* dst, const BLPoint* src, size_t count) ; +enum BLMatrix2DType { + BL_MATRIX2D_TYPE_IDENTITY = 0, + BL_MATRIX2D_TYPE_TRANSLATE = 1, + BL_MATRIX2D_TYPE_SCALE = 2, + BL_MATRIX2D_TYPE_SWAP = 3, + BL_MATRIX2D_TYPE_AFFINE = 4, + BL_MATRIX2D_TYPE_INVALID = 5, + BL_MATRIX2D_TYPE_COUNT = 6 +}; +enum BLMatrix2DValue { + BL_MATRIX2D_VALUE_00 = 0, + BL_MATRIX2D_VALUE_01 = 1, + BL_MATRIX2D_VALUE_10 = 2, + BL_MATRIX2D_VALUE_11 = 3, + BL_MATRIX2D_VALUE_20 = 4, + BL_MATRIX2D_VALUE_21 = 5, + BL_MATRIX2D_VALUE_COUNT = 6 +}; +enum BLMatrix2DOp { + BL_MATRIX2D_OP_RESET = 0, + BL_MATRIX2D_OP_ASSIGN = 1, + BL_MATRIX2D_OP_TRANSLATE = 2, + BL_MATRIX2D_OP_SCALE = 3, + BL_MATRIX2D_OP_SKEW = 4, + BL_MATRIX2D_OP_ROTATE = 5, + BL_MATRIX2D_OP_ROTATE_PT = 6, + BL_MATRIX2D_OP_TRANSFORM = 7, + BL_MATRIX2D_OP_POST_TRANSLATE = 8, + BL_MATRIX2D_OP_POST_SCALE = 9, + BL_MATRIX2D_OP_POST_SKEW = 10, + BL_MATRIX2D_OP_POST_ROTATE = 11, + BL_MATRIX2D_OP_POST_ROTATE_PT = 12, + BL_MATRIX2D_OP_POST_TRANSFORM = 13, + BL_MATRIX2D_OP_COUNT = 14 +}; +struct BLMatrix2D { + union { + + double m[BL_MATRIX2D_VALUE_COUNT]; + + struct { + double m00; + double m01; + double m10; + double m11; + double m20; + double m21; + }; + }; +}; +BLMapPointDArrayFunc blMatrix2DMapPointDArrayFuncs[BL_MATRIX2D_TYPE_COUNT]; +]] --[[ -// This is a public header file designed to be used by Blend2D users. -// It includes all the necessary files to use Blend2D library from C -// and C++ and its the only header that is guaranteed to stay. -// -// Never include directly header files placed in "blend2d" directory. -// Headers that end with "_p" suffix are private and should never be -// included as they are not part of public API. ---]] + The BLRgba32 structure needs to be endian aware +]] +ffi.cdef[[ +struct BLRgba32 { + union { + uint32_t value; + struct { + + uint32_t b : 8; + uint32_t g : 8; + uint32_t r : 8; + uint32_t a : 8; + + }; + }; +}; +struct BLRgba64 { + union { + uint64_t value; + struct { + + uint32_t b : 16; + uint32_t g : 16; + uint32_t r : 16; + uint32_t a : 16; + + }; + }; +}; +struct BLRgba128 { + float r; + float g; + float b; + float a; +}; -local ffi = require("ffi") +enum BLRegionType { + BL_REGION_TYPE_EMPTY = 0, + BL_REGION_TYPE_RECT = 1, + BL_REGION_TYPE_COMPLEX = 2, + BL_REGION_TYPE_COUNT = 3 +}; +struct BLRegionImpl { + union { + struct { + + BLBoxI* data; + + size_t size; + }; + + BLRegionView view; + }; + size_t capacity; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t reserved[4]; + BLBoxI boundingBox; +}; +struct BLRegionCore { + BLRegionImpl* impl; +}; +enum BLContextType { + BL_CONTEXT_TYPE_NONE = 0, + BL_CONTEXT_TYPE_DUMMY = 1, + BL_CONTEXT_TYPE_RASTER = 3, + BL_CONTEXT_TYPE_COUNT = 4 +}; +enum BLContextHint { + BL_CONTEXT_HINT_RENDERING_QUALITY = 0, + BL_CONTEXT_HINT_GRADIENT_QUALITY = 1, + BL_CONTEXT_HINT_PATTERN_QUALITY = 2, + BL_CONTEXT_HINT_COUNT = 8 +}; +enum BLContextOpType { + BL_CONTEXT_OP_TYPE_FILL = 0, + BL_CONTEXT_OP_TYPE_STROKE = 1, + BL_CONTEXT_OP_TYPE_COUNT = 2 +}; +enum BLContextFlushFlags { + BL_CONTEXT_FLUSH_SYNC = 0x80000000u +}; +enum BLContextCreateFlags { + BL_CONTEXT_CREATE_FLAG_FORCE_THREADS = 0x00000001u, + BL_CONTEXT_CREATE_FLAG_FALLBACK_TO_SYNC = 0x00000002u, + BL_CONTEXT_CREATE_FLAG_ISOLATED_THREADS = 0x00000010u, + BL_CONTEXT_CREATE_FLAG_ISOLATED_JIT = 0x00000020u, + BL_CONTEXT_CREATE_FLAG_OVERRIDE_CPU_FEATURES = 0x00000040u +}; +enum BLClipMode { + BL_CLIP_MODE_ALIGNED_RECT = 0, + BL_CLIP_MODE_UNALIGNED_RECT = 1, + BL_CLIP_MODE_MASK = 2, + BL_CLIP_MODE_COUNT = 3 +}; +enum BLCompOp { + BL_COMP_OP_SRC_OVER = 0, + BL_COMP_OP_SRC_COPY = 1, + BL_COMP_OP_SRC_IN = 2, + BL_COMP_OP_SRC_OUT = 3, + BL_COMP_OP_SRC_ATOP = 4, + BL_COMP_OP_DST_OVER = 5, + BL_COMP_OP_DST_COPY = 6, + BL_COMP_OP_DST_IN = 7, + BL_COMP_OP_DST_OUT = 8, + BL_COMP_OP_DST_ATOP = 9, + BL_COMP_OP_XOR = 10, + BL_COMP_OP_CLEAR = 11, + BL_COMP_OP_PLUS = 12, + BL_COMP_OP_MINUS = 13, + BL_COMP_OP_MULTIPLY = 14, + BL_COMP_OP_SCREEN = 15, + BL_COMP_OP_OVERLAY = 16, + BL_COMP_OP_DARKEN = 17, + BL_COMP_OP_LIGHTEN = 18, + BL_COMP_OP_COLOR_DODGE = 19, + BL_COMP_OP_COLOR_BURN = 20, + BL_COMP_OP_LINEAR_BURN = 21, + BL_COMP_OP_LINEAR_LIGHT = 22, + BL_COMP_OP_PIN_LIGHT = 23, + BL_COMP_OP_HARD_LIGHT = 24, + BL_COMP_OP_SOFT_LIGHT = 25, + BL_COMP_OP_DIFFERENCE = 26, + BL_COMP_OP_EXCLUSION = 27, + BL_COMP_OP_COUNT = 28 +}; +enum BLGradientQuality { + BL_GRADIENT_QUALITY_NEAREST = 0, + BL_GRADIENT_QUALITY_COUNT = 1 +}; +enum BLPatternQuality { + BL_PATTERN_QUALITY_NEAREST = 0, + BL_PATTERN_QUALITY_BILINEAR = 1, + BL_PATTERN_QUALITY_COUNT = 2 +}; +enum BLRenderingQuality { + BL_RENDERING_QUALITY_ANTIALIAS = 0, + BL_RENDERING_QUALITY_COUNT = 1 +}; +struct BLContextCreateInfo { + uint32_t flags; + uint32_t threadCount; + uint32_t cpuFeatures; + uint32_t reserved[5]; +}; +struct BLContextCookie { + uint64_t data[2]; +}; +struct BLContextHints { + union { + struct { + uint8_t renderingQuality; + uint8_t gradientQuality; + uint8_t patternQuality; + }; + uint8_t hints[BL_CONTEXT_HINT_COUNT]; + }; +}; +struct BLContextState { + BLContextHints hints; + uint8_t compOp; + uint8_t fillRule; + uint8_t styleType[2]; + uint8_t reserved[4]; + BLApproximationOptions approximationOptions; + double globalAlpha; + double styleAlpha[2]; + BLStrokeOptionsCore strokeOptions; + BLMatrix2D metaMatrix; + BLMatrix2D userMatrix; + size_t savedStateCount; +}; +struct BLContextVirt { + BLResult (__cdecl* destroy )(BLContextImpl* impl) ; + BLResult (__cdecl* flush )(BLContextImpl* impl, uint32_t flags) ; + BLResult (__cdecl* save )(BLContextImpl* impl, BLContextCookie* cookie) ; + BLResult (__cdecl* restore )(BLContextImpl* impl, const BLContextCookie* cookie) ; + BLResult (__cdecl* matrixOp )(BLContextImpl* impl, uint32_t opType, const void* opData) ; + BLResult (__cdecl* userToMeta )(BLContextImpl* impl) ; + BLResult (__cdecl* setHint )(BLContextImpl* impl, uint32_t hintType, uint32_t value) ; + BLResult (__cdecl* setHints )(BLContextImpl* impl, const BLContextHints* hints) ; + BLResult (__cdecl* setFlattenMode )(BLContextImpl* impl, uint32_t mode) ; + BLResult (__cdecl* setFlattenTolerance )(BLContextImpl* impl, double tolerance) ; + BLResult (__cdecl* setApproximationOptions)(BLContextImpl* impl, const BLApproximationOptions* options) ; + BLResult (__cdecl* setCompOp )(BLContextImpl* impl, uint32_t compOp) ; + BLResult (__cdecl* setGlobalAlpha )(BLContextImpl* impl, double alpha) ; + BLResult (__cdecl* setStyleAlpha[2] )(BLContextImpl* impl, double alpha) ; + BLResult (__cdecl* getStyle[2] )(BLContextImpl* impl, void* object) ; + BLResult (__cdecl* getStyleRgba32[2] )(BLContextImpl* impl, uint32_t* rgba32) ; + BLResult (__cdecl* getStyleRgba64[2] )(BLContextImpl* impl, uint64_t* rgba64) ; + BLResult (__cdecl* setStyle[2] )(BLContextImpl* impl, const void* object) ; + BLResult (__cdecl* setStyleRgba32[2] )(BLContextImpl* impl, uint32_t rgba32) ; + BLResult (__cdecl* setStyleRgba64[2] )(BLContextImpl* impl, uint64_t rgba64) ; + BLResult (__cdecl* setFillRule )(BLContextImpl* impl, uint32_t fillRule) ; + BLResult (__cdecl* setStrokeWidth )(BLContextImpl* impl, double width) ; + BLResult (__cdecl* setStrokeMiterLimit )(BLContextImpl* impl, double miterLimit) ; + BLResult (__cdecl* setStrokeCap )(BLContextImpl* impl, uint32_t position, uint32_t strokeCap) ; + BLResult (__cdecl* setStrokeCaps )(BLContextImpl* impl, uint32_t strokeCap) ; + BLResult (__cdecl* setStrokeJoin )(BLContextImpl* impl, uint32_t strokeJoin) ; + BLResult (__cdecl* setStrokeDashOffset )(BLContextImpl* impl, double dashOffset) ; + BLResult (__cdecl* setStrokeDashArray )(BLContextImpl* impl, const BLArrayCore* dashArray) ; + BLResult (__cdecl* setStrokeTransformOrder)(BLContextImpl* impl, uint32_t transformOrder) ; + BLResult (__cdecl* setStrokeOptions )(BLContextImpl* impl, const BLStrokeOptionsCore* options) ; + BLResult (__cdecl* clipToRectI )(BLContextImpl* impl, const BLRectI* rect) ; + BLResult (__cdecl* clipToRectD )(BLContextImpl* impl, const BLRect* rect) ; + BLResult (__cdecl* restoreClipping )(BLContextImpl* impl) ; + BLResult (__cdecl* clearAll )(BLContextImpl* impl) ; + BLResult (__cdecl* clearRectI )(BLContextImpl* impl, const BLRectI* rect) ; + BLResult (__cdecl* clearRectD )(BLContextImpl* impl, const BLRect* rect) ; + BLResult (__cdecl* fillAll )(BLContextImpl* impl) ; + BLResult (__cdecl* fillRectI )(BLContextImpl* impl, const BLRectI* rect) ; + BLResult (__cdecl* fillRectD )(BLContextImpl* impl, const BLRect* rect) ; + BLResult (__cdecl* fillPathD )(BLContextImpl* impl, const BLPathCore* path) ; + BLResult (__cdecl* fillGeometry )(BLContextImpl* impl, uint32_t geometryType, const void* geometryData) ; + BLResult (__cdecl* fillTextI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; + BLResult (__cdecl* fillTextD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; + BLResult (__cdecl* fillGlyphRunI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; + BLResult (__cdecl* fillGlyphRunD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; + BLResult (__cdecl* strokeRectI )(BLContextImpl* impl, const BLRectI* rect) ; + BLResult (__cdecl* strokeRectD )(BLContextImpl* impl, const BLRect* rect) ; + BLResult (__cdecl* strokePathD )(BLContextImpl* impl, const BLPathCore* path) ; + BLResult (__cdecl* strokeGeometry )(BLContextImpl* impl, uint32_t geometryType, const void* geometryData) ; + BLResult (__cdecl* strokeTextI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; + BLResult (__cdecl* strokeTextD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) ; + BLResult (__cdecl* strokeGlyphRunI )(BLContextImpl* impl, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; + BLResult (__cdecl* strokeGlyphRunD )(BLContextImpl* impl, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) ; + BLResult (__cdecl* blitImageI )(BLContextImpl* impl, const BLPointI* pt, const BLImageCore* img, const BLRectI* imgArea) ; + BLResult (__cdecl* blitImageD )(BLContextImpl* impl, const BLPoint* pt, const BLImageCore* img, const BLRectI* imgArea) ; + BLResult (__cdecl* blitScaledImageI )(BLContextImpl* impl, const BLRectI* rect, const BLImageCore* img, const BLRectI* imgArea) ; + BLResult (__cdecl* blitScaledImageD )(BLContextImpl* impl, const BLRect* rect, const BLImageCore* img, const BLRectI* imgArea) ; +}; +struct BLContextImpl { + const BLContextVirt* virt; + const BLContextState* state; + void* reservedHeader; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint32_t contextType; + BLSize targetSize; +}; +struct BLContextCore { + BLContextImpl* impl; +}; +enum BLFileOpenFlags { + BL_FILE_OPEN_READ = 0x00000001u, + BL_FILE_OPEN_WRITE = 0x00000002u, + BL_FILE_OPEN_RW = 0x00000003u, + BL_FILE_OPEN_CREATE = 0x00000004u, + BL_FILE_OPEN_DELETE = 0x00000008u, + BL_FILE_OPEN_TRUNCATE = 0x00000010u, + BL_FILE_OPEN_READ_EXCLUSIVE = 0x10000000u, + BL_FILE_OPEN_WRITE_EXCLUSIVE = 0x20000000u, + BL_FILE_OPEN_RW_EXCLUSIVE = 0x30000000u, + BL_FILE_OPEN_CREATE_EXCLUSIVE = 0x40000000u, + BL_FILE_OPEN_DELETE_EXCLUSIVE = 0x80000000u +}; +enum BLFileSeek { + BL_FILE_SEEK_SET = 0, + BL_FILE_SEEK_CUR = 1, + BL_FILE_SEEK_END = 2, + BL_FILE_SEEK_COUNT = 3 +}; +enum BLFileReadFlags { + BL_FILE_READ_MMAP_ENABLED = 0x00000001u, + BL_FILE_READ_MMAP_AVOID_SMALL = 0x00000002u, + BL_FILE_READ_MMAP_NO_FALLBACK = 0x00000008u +}; +struct BLFileCore { + intptr_t handle; +}; + +enum BLGradientType { + BL_GRADIENT_TYPE_LINEAR = 0, + BL_GRADIENT_TYPE_RADIAL = 1, + BL_GRADIENT_TYPE_CONICAL = 2, + BL_GRADIENT_TYPE_COUNT = 3 +}; +enum BLGradientValue { + BL_GRADIENT_VALUE_COMMON_X0 = 0, + BL_GRADIENT_VALUE_COMMON_Y0 = 1, + BL_GRADIENT_VALUE_COMMON_X1 = 2, + BL_GRADIENT_VALUE_COMMON_Y1 = 3, + BL_GRADIENT_VALUE_RADIAL_R0 = 4, + BL_GRADIENT_VALUE_CONICAL_ANGLE = 2, + BL_GRADIENT_VALUE_COUNT = 6 +}; +struct BLGradientStop { + double offset; + BLRgba64 rgba; +}; +struct BLLinearGradientValues { + double x0; + double y0; + double x1; + double y1; +}; +struct BLRadialGradientValues { + double x0; + double y0; + double x1; + double y1; + double r0; +}; +struct BLConicalGradientValues { + double x0; + double y0; + double angle; +}; +struct BLGradientImpl { + union { + struct { + + BLGradientStop* stops; + + size_t size; + }; + + }; + size_t capacity; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t gradientType; + uint8_t extendMode; + uint8_t matrixType; + uint8_t reserved[1]; + BLMatrix2D matrix; + union { + + double values[BL_GRADIENT_VALUE_COUNT]; + + BLLinearGradientValues linear; + + BLRadialGradientValues radial; + + BLConicalGradientValues conical; + }; +}; +struct BLGradientCore { + BLGradientImpl* impl; +}; + +struct BLPatternImpl { + BLImageCore image; + void* reservedHeader[2]; + volatile size_t refCount; + uint8_t implType; + uint8_t implTraits; + uint16_t memPoolData; + uint8_t patternType; + uint8_t extendMode; + uint8_t matrixType; + uint8_t reserved[1]; + BLMatrix2D matrix; + BLRectI area; +}; +struct BLPatternCore { + BLPatternImpl* impl; +}; +typedef BLResult (__cdecl* BLPixelConverterFunc)( + const BLPixelConverterCore* self, + uint8_t* dstData, intptr_t dstStride, + const uint8_t* srcData, intptr_t srcStride, + uint32_t w, uint32_t h, const BLPixelConverterOptions* options) ; +struct BLPixelConverterOptions { + BLPointI origin; + size_t gap; +}; +struct BLPixelConverterCore { + BLPixelConverterFunc convertFunc; + union { + uint8_t strategy; + + uint8_t data[64]; + }; +}; +struct BLRandom { + uint64_t data[2]; +}; +enum BLRuntimeLimits { + BL_RUNTIME_MAX_IMAGE_SIZE = 65535, + BL_RUNTIME_MAX_THREAD_COUNT = 32 +}; +enum BLRuntimeInfoType { + BL_RUNTIME_INFO_TYPE_BUILD = 0, + BL_RUNTIME_INFO_TYPE_SYSTEM = 1, + BL_RUNTIME_INFO_TYPE_MEMORY = 2, + BL_RUNTIME_INFO_TYPE_COUNT = 3 +}; +enum BLRuntimeBuildType { + BL_RUNTIME_BUILD_TYPE_DEBUG = 0, + BL_RUNTIME_BUILD_TYPE_RELEASE = 1 +}; +enum BLRuntimeCpuArch { + BL_RUNTIME_CPU_ARCH_UNKNOWN = 0, + BL_RUNTIME_CPU_ARCH_X86 = 1, + BL_RUNTIME_CPU_ARCH_ARM = 2, + BL_RUNTIME_CPU_ARCH_MIPS = 3 +}; +enum BLRuntimeCpuFeatures { + BL_RUNTIME_CPU_FEATURE_X86_SSE2 = 0x00000001u, + BL_RUNTIME_CPU_FEATURE_X86_SSE3 = 0x00000002u, + BL_RUNTIME_CPU_FEATURE_X86_SSSE3 = 0x00000004u, + BL_RUNTIME_CPU_FEATURE_X86_SSE4_1 = 0x00000008u, + BL_RUNTIME_CPU_FEATURE_X86_SSE4_2 = 0x00000010u, + BL_RUNTIME_CPU_FEATURE_X86_AVX = 0x00000020u, + BL_RUNTIME_CPU_FEATURE_X86_AVX2 = 0x00000040u +}; +enum BLRuntimeCleanupFlags { + BL_RUNTIME_CLEANUP_OBJECT_POOL = 0x00000001u, + BL_RUNTIME_CLEANUP_ZEROED_POOL = 0x00000002u, + BL_RUNTIME_CLEANUO_THREAD_POOL = 0x00000010u, + BL_RUNTIME_CLEANUP_EVERYTHING = 0xFFFFFFFFu +}; +struct BLRuntimeBuildInfo { + union { + + uint32_t version; + + struct { + + uint8_t patchVersion; + uint8_t minorVersion; + uint16_t majorVersion; + + }; + }; + uint32_t buildType; + uint32_t baselineCpuFeatures; + uint32_t supportedCpuFeatures; + uint32_t maxImageSize; + uint32_t maxThreadCount; + uint32_t reserved[2]; + char compilerInfo[32]; +}; +struct BLRuntimeSystemInfo { + uint32_t cpuArch; + uint32_t cpuFeatures; + uint32_t coreCount; + uint32_t threadCount; + uint32_t minThreadStackSize; + uint32_t minWorkerStackSize; + uint32_t allocationGranularity; + uint32_t reserved[5]; +}; +struct BLRuntimeMemoryInfo { + size_t vmUsed; + size_t vmReserved; + size_t vmOverhead; + size_t vmBlockCount; + size_t zmUsed; + size_t zmReserved; + size_t zmOverhead; + size_t zmBlockCount; + size_t dynamicPipelineCount; +}; +]] -BLEND2D_H = true - -require("blend2d.blapi"); -require("blend2d.blarray"); -require("blend2d.blbitarray"); -require("blend2d.blcontext"); -require("blend2d.blfilesystem"); -require("blend2d.blfont"); -require("blend2d.blfontdefs"); -require("blend2d.blformat"); -require("blend2d.blgeometry"); -require("blend2d.blglyphbuffer"); -require("blend2d.blgradient"); -require("blend2d.blimage"); -require("blend2d.blmatrix"); -require("blend2d.blpath"); -require("blend2d.blpattern"); -require("blend2d.blpixelconverter"); -require("blend2d.blrandom"); -require("blend2d.blregion"); -require("blend2d.blrgba"); -require("blend2d.blruntime"); -require("blend2d.blstring"); -require("blend2d.blvariant"); - -return ffi.load("blend2d") +return ffi.load("blend2d") \ No newline at end of file diff --git a/blend2d/blfilesystem.lua b/blend2d/blfilesystem.lua deleted file mode 100644 index c394b43..0000000 --- a/blend2d/blfilesystem.lua +++ /dev/null @@ -1,51 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLFILESYSTEM_H then -BLEND2D_BLFILESYSTEM_H = true - -local blapi = require("blend2d.blapi") -require("blend2d.blarray") - - -ffi.cdef[[ -enum BLFileOpenFlags { - BL_FILE_OPEN_READ = 0x00000001, - BL_FILE_OPEN_WRITE = 0x00000002, - BL_FILE_OPEN_RW = 0x00000003, - - BL_FILE_OPEN_CREATE = 0x00000004, - BL_FILE_OPEN_CREATE_ONLY = 0x00000008, - BL_FILE_OPEN_TRUNCATE = 0x00000010, - - BL_FILE_OPEN_SHARE_READ = 0x10000000, - BL_FILE_OPEN_SHARE_WRITE = 0x20000000, - BL_FILE_OPEN_SHARE_RW = 0x30000000, - BL_FILE_OPEN_SHARE_DELETE = 0x40000000 -}; - - -enum BLFileSeek { - BL_FILE_SEEK_SET = 0, - BL_FILE_SEEK_CUR = 1, - BL_FILE_SEEK_END = 2, - - BL_FILE_SEEK_COUNT = 3 -}; - -struct BLFileCore { - intptr_t handle; -}; -]] - - - -end -- BLEND2D_BLFILESYSTEM_H diff --git a/blend2d/blfont.lua b/blend2d/blfont.lua deleted file mode 100644 index 5d81502..0000000 --- a/blend2d/blfont.lua +++ /dev/null @@ -1,222 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLFONT_H then -BLEND2D_BLFONT_H = true - -local blapi = require("blend2d.blapi") - -require("blend2d.blarray") -require("blend2d.blfontdefs") -require("blend2d.blgeometry") -require("blend2d.blglyphbuffer") -require("blend2d.blpath") -require("blend2d.blstring") -require("blend2d.blvariant") - - -ffi.cdef[[ -//! Font data [C Interface - Virtual Function Table]. -struct BLFontDataVirt { - BLResult (__cdecl* destroy)(BLFontDataImpl* impl) ; - BLResult (__cdecl* listTags)(const BLFontDataImpl* impl, BLArrayCore* out) ; - size_t (__cdecl* queryTables)(const BLFontDataImpl* impl, BLFontTable* dst, const BLTag* tags, size_t n) ; -}; -]] - -ffi.cdef[[ -//! Font data [C Interface - Impl]. -struct BLFontDataImpl { - - const BLFontDataVirt* virt; - - void* data; - - size_t size; - - - volatile size_t refCount; - - uint8_t implType; - - uint8_t implTraits; - - uint16_t memPoolData; - - uint32_t flags; -}; -]] - -ffi.cdef[[ -//! Font data [C Interface - Core]. -struct BLFontDataCore { - BLFontDataImpl* impl; -}; -]] - -ffi.cdef[[ -//! Font loader [C Interface - Virtual Function Table]. -struct BLFontLoaderVirt { - BLResult (__cdecl* destroy)(BLFontLoaderImpl* impl) ; - BLFontDataImpl* (__cdecl* dataByFaceIndex)(BLFontLoaderImpl* impl, uint32_t faceIndex) ; -}; - -//! Font loader [C Interface - Impl]. -struct BLFontLoaderImpl { - //! Virtual function table. - const BLFontLoaderVirt* virt; - //! Pointer to the start of font-data (null if the data is provided at table level). - void* data; - //! Size of `data` [in bytes] (zero if the data is provided at table level). - size_t size; - - //! Reference count. - size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - uint8_t faceType; - uint32_t faceCount; - uint32_t loaderFlags; -}; - -//! Font loader [C Interface - Core]. -struct BLFontLoaderCore { - BLFontLoaderImpl* impl; -}; -]] - - - - -ffi.cdef[[ -//! Font face [C Interface - Virtual Function Table]. -struct BLFontFaceVirt { - BLResult (__cdecl* destroy)(BLFontFaceImpl* impl) ; -}; -]] - -ffi.cdef[[ -//! Font face [C Interface - Impl]. -struct BLFontFaceImpl { - //! Virtual function table. - const BLFontFaceVirt* virt; - //! Font data. - //BL_TYPED_MEMBER(BLFontDataCore, BLFontData, data); - union { BLFontDataCore data; }; - - //! Font loader used to load `BLFontData`. - //BL_TYPED_MEMBER(BLFontLoaderCore, BLFontLoader, loader); - union { BLFontLoaderCore loader; }; - - //! Reference count. - volatile size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - //! Font-face default weight (1..1000) [0 if font-face is not initialized]. - uint16_t weight; - //! Font-face default stretch (1..9) [0 if font-face is not initialized]. - uint8_t stretch; - //! Font-face default style. - uint8_t style; - - //! Font-face information. - BLFontFaceInfo faceInfo; - - //! Unique face id assigned by Blend2D for caching. - uint64_t faceUniqueId; - - //! Full name. - //BL_TYPED_MEMBER(BLStringCore, BLString, fullName); - union { BLStringCore fullName; }; - - //! Family name. - //BL_TYPED_MEMBER(BLStringCore, BLString, familyName); - union { BLStringCore familyName; }; - - //! Subfamily name. - //BL_TYPED_MEMBER(BLStringCore, BLString, subfamilyName); - union { BLStringCore subfamilyName; }; - - //! PostScript name. - //BL_TYPED_MEMBER(BLStringCore, BLString, postScriptName); - union { BLStringCore postScriptName; }; - - //! Font-face metrics in design units. - BLFontDesignMetrics designMetrics; - //! Font-face unicode coverage (specified in OS/2 header). - BLFontUnicodeCoverage unicodeCoverage; - //! Font-face panose classification. - BLFontPanose panose; - -}; -]] - -ffi.cdef[[ -//! Font face [C Interface - Core]. -struct BLFontFaceCore { - BLFontFaceImpl* impl; -}; -]] - - -ffi.cdef[[ - -//! Font [C Interface - Impl]. -struct BLFontImpl { - //! Font-face used by this font. - //BL_TYPED_MEMBER(BLFontFaceCore, BLFontFace, face); - union { BLFontFaceCore face;}; - - //! Font features. - //BL_TYPED_MEMBER(BLArrayCore, BLArray, features); - union { BLArrayCore features;}; - - //! Font variations. - //BL_TYPED_MEMBER(BLArrayCore, BLArray, variations); - union { BLArrayCore variations;}; - - //! Reference count. - size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - - uint16_t weight; - - uint8_t stretch; - - uint8_t style; - - BLFontMetrics metrics; - BLFontMatrix matrix; -}; - -struct BLFontCore { - BLFontImpl* impl; -}; -]] - - -end -- BLEND2D_BLFONT_H diff --git a/blend2d/blgeometry.lua b/blend2d/blgeometry.lua deleted file mode 100644 index ea3f047..0000000 --- a/blend2d/blgeometry.lua +++ /dev/null @@ -1,286 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") - -if not BLEND2D_BLGEOMETRY_H then -BLEND2D_BLGEOMETRY_H = true - -require("blend2d.blapi") - - -ffi.cdef[[ -//! Direction of a geometry used by geometric primitives and paths. -enum BLGeometryDirection { - //! No direction specified. - BL_GEOMETRY_DIRECTION_NONE = 0, - //! Clockwise direction. - BL_GEOMETRY_DIRECTION_CW = 1, - //! Counter-clockwise direction. - BL_GEOMETRY_DIRECTION_CCW = 2 -}; - -//! Geometry type. -//! -//! Geometry describes a shape or path that can be either rendered or added to -//! a BLPath container. Both `BLPath` and `BLContext` provide functionality -//! to work with all geometry types. Please note that each type provided here -//! requires to pass a matching struct or class to the function that consumes -//! a `geometryType` and `geometryData` arguments. -enum BLGeometryType { - - BL_GEOMETRY_TYPE_NONE = 0, - - BL_GEOMETRY_TYPE_BOXI = 1, - BL_GEOMETRY_TYPE_BOXD = 2, - BL_GEOMETRY_TYPE_RECTI = 3, - BL_GEOMETRY_TYPE_RECTD = 4, - BL_GEOMETRY_TYPE_CIRCLE = 5, - BL_GEOMETRY_TYPE_ELLIPSE = 6, - BL_GEOMETRY_TYPE_ROUND_RECT = 7, - BL_GEOMETRY_TYPE_ARC = 8, - BL_GEOMETRY_TYPE_CHORD = 9, - BL_GEOMETRY_TYPE_PIE = 10, - BL_GEOMETRY_TYPE_LINE = 11, - BL_GEOMETRY_TYPE_TRIANGLE = 12, - - BL_GEOMETRY_TYPE_POLYLINEI = 13, - //! BLArrayView representing a polyline. - BL_GEOMETRY_TYPE_POLYLINED = 14, - //! BLArrayView representing a polygon. - BL_GEOMETRY_TYPE_POLYGONI = 15, - //! BLArrayView representing a polygon. - BL_GEOMETRY_TYPE_POLYGOND = 16, - //! BLArrayView struct. - BL_GEOMETRY_TYPE_ARRAY_VIEW_BOXI = 17, - //! BLArrayView struct. - BL_GEOMETRY_TYPE_ARRAY_VIEW_BOXD = 18, - //! BLArrayView struct. - BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTI = 19, - //! BLArrayView struct. - BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTD = 20, - - BL_GEOMETRY_TYPE_PATH = 21, - BL_GEOMETRY_TYPE_REGION = 22, - - BL_GEOMETRY_TYPE_COUNT = 23 -}; - -//! Fill rule. -enum BLFillRule { - BL_FILL_RULE_NON_ZERO = 0, - BL_FILL_RULE_EVEN_ODD = 1, - - BL_FILL_RULE_COUNT = 2 -}; - -//! Hit-test result. -enum BLHitTest { - BL_HIT_TEST_IN = 0, - BL_HIT_TEST_PART = 1, - BL_HIT_TEST_OUT = 2, - - BL_HIT_TEST_INVALID = 0xFFFFFFFF -}; -]] - - -ffi.cdef[[ -//! Point specified as [x, y] using `int` as a storage type. -struct BLPointI { - int x; - int y; -}; -]] - -ffi.cdef[[ -//! Size specified as [w, h] using `int` as a storage type. -struct BLSizeI { - int w; - int h; -}; -]] - - -ffi.cdef[[ -//! Box specified as [x0, y0, x1, y1] using `int` as a storage type. -struct BLBoxI { - int x0; - int y0; - int x1; - int y1; - -}; -]] - -ffi.cdef[[ -//! Rectangle specified as [x, y, w, h] using `int` as a storage type. -struct BLRectI { - int x; - int y; - int w; - int h; - -}; -]] - - -ffi.cdef[[ -//! Point specified as [x, y] using `double` as a storage type. -struct BLPoint { - double x; - double y; - -}; -]] - - - -ffi.cdef[[ -//! Size specified as [w, h] using `double` as a storage type. -struct BLSize { - double w; - double h; - -}; -]] - - - -ffi.cdef[[ -//! Box specified as [x0, y0, x1, y1] using `double` as a storage type. -struct BLBox { - double x0; - double y0; - double x1; - double y1; - -}; -]] - - - -ffi.cdef[[ -//! Rectangle specified as [x, y, w, h] using `double` as a storage type. -struct BLRect { - double x; - double y; - double w; - double h; - -}; -]] - - - -ffi.cdef[[ -//! Line specified as [x0, y0, x1, y1] using `double` as a storage type. -struct BLLine { - union { - struct { double x0, y0; }; - BLPoint p0; - }; - - union { - struct { double x1, y1; }; - BLPoint p1; - }; - -}; -]] - - - - -ffi.cdef[[ -//! Triangle data speciied as [x0, y0, x1, y1, x2, y2] using `double` as a storage type. -struct BLTriangle { - union { - struct { double x0, y0; }; - BLPoint p0; - }; - - union { - struct { double x1, y1; }; - BLPoint p1; - }; - - union { - struct { double x2, y2; }; - BLPoint p2; - }; - -}; -]] - - - -ffi.cdef[[ -//! Rounded rectangle specified as [x, y, w, h, rx, ry] using `double` as a storage type. -struct BLRoundRect { - union { - struct { double x, y, w, h; }; - BLRect rect; - }; - - union { - struct { double rx, ry; }; - BLPoint radius; - }; - -}; -]] - - -ffi.cdef[[ -//! Circle specified as [cx, cy, r] using `double` as a storage type. -struct BLCircle { - union { - struct { double cx, cy; }; - BLPoint center; - }; - double r; - -}; -]] - - -ffi.cdef[[ -//! Ellipse specified as [cx, cy, rx, ry] using `double` as a storage type. -struct BLEllipse { - union { - struct { double cx, cy; }; - BLPoint center; - }; - union { - struct { double rx, ry; }; - BLPoint radius; - }; - -}; -]] - -ffi.cdef[[ -//! Arc specified as [cx, cy, rx, ry, start, sweep[ using `double` as a storage type. -struct BLArc { - union { - struct { double cx, cy; }; - BLPoint center; - }; - union { - struct { double rx, ry; }; - BLPoint radius; - }; - double start; - double sweep; -}; -]] - - - -end -- BLEND2D_BLGEOMETRY_H diff --git a/blend2d/blglyphbuffer.lua b/blend2d/blglyphbuffer.lua deleted file mode 100644 index d192ab0..0000000 --- a/blend2d/blglyphbuffer.lua +++ /dev/null @@ -1,50 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLGLYPHBUFFER_H then -BLEND2D_BLGLYPHBUFFER_H = true - -require("blend2d.blfontdefs") -local blapi = require("blend2d.blapi") - -ffi.cdef[[ -//! Glyph buffer [C Data]. -struct BLGlyphBufferData { - union { - struct { - //! Glyph item data. - BLGlyphItem* glyphItemData; - //! Glyph placement data. - BLGlyphPlacement* placementData; - //! Number of either code points or glyph indexes in the glyph-buffer. - size_t size; - //! Reserved, used exclusively by BLGlyphRun. - uint32_t reserved; - //! Flags shared between BLGlyphRun and BLGlyphBuffer. - uint32_t flags; - }; - - //! Glyph run data that can be passed directly to the rendering context. - BLGlyphRun glyphRun; - }; - - //! Glyph info data - additional information of each `BLGlyphItem`. - BLGlyphInfo* glyphInfoData; -}; - -//! Glyph buffer [C Interface - Core]. -struct BLGlyphBufferCore { - BLGlyphBufferData* data; -}; -]] - - -end -- BLEND2D_BLGLYPHBUFFER_H diff --git a/blend2d/blgradient.lua b/blend2d/blgradient.lua deleted file mode 100644 index ca0a3a9..0000000 --- a/blend2d/blgradient.lua +++ /dev/null @@ -1,133 +0,0 @@ ---[[ -// // [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLGRADIENT_H then -BLEND2D_BLGRADIENT_H = true - -local blapi = require("blend2d.blapi") - -require("blend2d.blgeometry") -require("blend2d.blmatrix") -require("blend2d.blrgba") -require("blend2d.blvariant") - -ffi.cdef[[ -//! Gradient type. -enum BLGradientType { - BL_GRADIENT_TYPE_LINEAR = 0, - BL_GRADIENT_TYPE_RADIAL = 1, - BL_GRADIENT_TYPE_CONICAL = 2, - - BL_GRADIENT_TYPE_COUNT = 3 -}; - -//! Gradient data index. -enum BLGradientValue { - - BL_GRADIENT_VALUE_COMMON_X0 = 0, - BL_GRADIENT_VALUE_COMMON_Y0 = 1, - BL_GRADIENT_VALUE_COMMON_X1 = 2, - BL_GRADIENT_VALUE_COMMON_Y1 = 3, - BL_GRADIENT_VALUE_RADIAL_R0 = 4, - BL_GRADIENT_VALUE_CONICAL_ANGLE = 2, - - BL_GRADIENT_VALUE_COUNT = 6 -}; -]] - -ffi.cdef[[ -//! Defines an `offset` and `rgba` color that us used by `BLGradient` to define -//! a linear transition between colors. -struct BLGradientStop { - double offset; - BLRgba64 rgba; -}; -]] - -ffi.cdef[[ -//! Linear gradient values packed into a structure. -struct BLLinearGradientValues { - double x0; - double y0; - double x1; - double y1; -}; -]] - - -ffi.cdef[[ -//! Radial gradient values packed into a structure. -struct BLRadialGradientValues { - double x0; - double y0; - double x1; - double y1; - double r0; -}; -]] - - -ffi.cdef[[ -//! Conical gradient values packed into a structure. -struct BLConicalGradientValues { - double x0; - double y0; - double angle; -}; -]] - - -ffi.cdef[[ -//! Gradient [C Interface - Impl]. -struct BLGradientImpl { - union { - struct { - BLGradientStop* stops; - size_t size; - }; - - }; - - - size_t capacity; - - - volatile size_t refCount; - uint8_t implType; - uint8_t implTraits; - uint16_t memPoolData; - - uint8_t gradientType; - uint8_t extendMode; - uint8_t matrixType; - uint8_t reserved[1]; - - - BLMatrix2D matrix; - - union { - double values[BL_GRADIENT_VALUE_COUNT]; - BLLinearGradientValues linear; - BLRadialGradientValues radial; - BLConicalGradientValues conical; - }; -}; -]] - - -ffi.cdef[[ -//! Gradient [C Interface - Core]. -struct BLGradientCore { - BLGradientImpl* impl; -}; -]] - -end -- BLEND2D_BLGRADIENT_H diff --git a/blend2d/blimage.lua b/blend2d/blimage.lua deleted file mode 100644 index ef68d02..0000000 --- a/blend2d/blimage.lua +++ /dev/null @@ -1,347 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLIMAGE_H then -BLEND2D_BLIMAGE_H = true - -local blapi = require("blend2d.blapi") - -require("blend2d.blarray") -require("blend2d.blformat") -require("blend2d.blgeometry") -require("blend2d.blvariant") - - - -ffi.cdef[[ -// ============================================================================ -// [Constants] -// ============================================================================ - -//! Image codec feature bits. -enum BLImageCodecFeatures { - //! Image codec supports reading images (can create BLImageDecoder). - BL_IMAGE_CODEC_FEATURE_READ = 0x00000001u, - //! Image codec supports writing images (can create BLImageEncoder). - BL_IMAGE_CODEC_FEATURE_WRITE = 0x00000002u, - //! Image codec supports lossless compression. - BL_IMAGE_CODEC_FEATURE_LOSSLESS = 0x00000004u, - //! Image codec supports loosy compression. - BL_IMAGE_CODEC_FEATURE_LOSSY = 0x00000008u, - //! Image codec supports writing multiple frames (GIF). - BL_IMAGE_CODEC_FEATURE_MULTI_FRAME = 0x00000010u, - //! Image codec supports IPTC metadata. - BL_IMAGE_CODEC_FEATURE_IPTC = 0x10000000u, - //! Image codec supports EXIF metadata. - BL_IMAGE_CODEC_FEATURE_EXIF = 0x20000000u, - //! Image codec supports XMP metadata. - BL_IMAGE_CODEC_FEATURE_XMP = 0x40000000u -}; -]] - -ffi.cdef[[ -//! Flags used by `BLImageInfo`. -enum BLImageInfoFlags { - //! Progressive mode. - BL_IMAGE_INFO_FLAG_PROGRESSIVE = 0x00000001u -}; -]] - -ffi.cdef[[ -//! Filter type used by `BLImage::scale()`. -enum BLImageScaleFilter { - //! No filter or uninitialized. - BL_IMAGE_SCALE_FILTER_NONE = 0, - //! Nearest neighbor filter (radius 1.0). - BL_IMAGE_SCALE_FILTER_NEAREST = 1, - //! Bilinear filter (radius 1.0). - BL_IMAGE_SCALE_FILTER_BILINEAR = 2, - //! Bicubic filter (radius 2.0). - BL_IMAGE_SCALE_FILTER_BICUBIC = 3, - //! Bell filter (radius 1.5). - BL_IMAGE_SCALE_FILTER_BELL = 4, - //! Gauss filter (radius 2.0). - BL_IMAGE_SCALE_FILTER_GAUSS = 5, - //! Hermite filter (radius 1.0). - BL_IMAGE_SCALE_FILTER_HERMITE = 6, - //! Hanning filter (radius 1.0). - BL_IMAGE_SCALE_FILTER_HANNING = 7, - //! Catrom filter (radius 2.0). - BL_IMAGE_SCALE_FILTER_CATROM = 8, - //! Bessel filter (radius 3.2383). - BL_IMAGE_SCALE_FILTER_BESSEL = 9, - //! Sinc filter (radius 2.0, adjustable through `BLImageScaleOptions`). - BL_IMAGE_SCALE_FILTER_SINC = 10, - //! Lanczos filter (radius 2.0, adjustable through `BLImageScaleOptions`). - BL_IMAGE_SCALE_FILTER_LANCZOS = 11, - //! Blackman filter (radius 2.0, adjustable through `BLImageScaleOptions`). - BL_IMAGE_SCALE_FILTER_BLACKMAN = 12, - //! Mitchell filter (radius 2.0, parameters 'b' and 'c' passed through `BLImageScaleOptions`). - BL_IMAGE_SCALE_FILTER_MITCHELL = 13, - //! Filter using a user-function, must be passed through `BLImageScaleOptions`. - BL_IMAGE_SCALE_FILTER_USER = 14, - - //! Count of image-scale filters. - BL_IMAGE_SCALE_FILTER_COUNT = 15 -}; -]] - -ffi.cdef[[ -// ============================================================================ -// [Typedefs] -// ============================================================================ - -//! A user function that can be used by `BLImage::scale()`. -typedef BLResult (__cdecl* BLImageScaleUserFunc)(double* dst, const double* tArray, size_t n, const void* data) ; -]] - -ffi.cdef[[ -// ============================================================================ -// [BLImageData] -// ============================================================================ - -//! Data that describes a raster image. Used by `BLImage`. -struct BLImageData { - void* pixelData; - intptr_t stride; - BLSizeI size; - uint32_t format; - uint32_t flags; - -}; -]] - -ffi.cdef[[ -// ============================================================================ -// [BLImageInfo] -// ============================================================================ - -//! Image information provided by image codecs. -struct BLImageInfo { - //! Image size. - BLSizeI size; - //! Pixel density per one meter, can contain fractions. - BLSize density; - - //! Image flags. - uint32_t flags; - //! Image depth. - uint16_t depth; - //! Number of planes. - uint16_t planeCount; - //! Number of frames (0 = unknown/unspecified). - uint64_t frameCount; - - //! Image format (as understood by codec). - char format[16]; - //! Image compression (as understood by codec). - char compression[16]; -}; -]] - -ffi.cdef[[ -// ============================================================================ -// [BLImageScaleOptions] -// ============================================================================ - -//! Options that can used to customize image scaling. -struct BLImageScaleOptions { - BLImageScaleUserFunc userFunc; - void* userData; - - double radius; - union { - double data[3]; - struct { - double b, c; - } mitchell; - }; - -}; -]] - - -ffi.cdef[[ - -//! Image [C Interface - Impl]. -struct BLImageImpl { - - void* pixelData; - intptr_t stride; - volatile void* writer; - volatile size_t refCount; - uint8_t implType; - uint8_t implTraits; - uint16_t memPoolData; - - - uint8_t format; - uint8_t flags; - uint16_t depth; - BLSizeI size; -}; - -//! Image [C Interface - Core]. -struct BLImageCore { - BLImageImpl* impl; -}; -]] - - - - - - - - -ffi.cdef[[ -//! Image codec [C Interface - Virtual Function Table]. -struct BLImageCodecVirt { - BLResult (__cdecl* destroy)(BLImageCodecImpl* impl) ; - uint32_t (__cdecl* inspectData)(const BLImageCodecImpl* impl, const uint8_t* data, size_t size) ; - BLResult (__cdecl* createDecoder)(const BLImageCodecImpl* impl, BLImageDecoderCore* dst) ; - BLResult (__cdecl* createEncoder)(const BLImageCodecImpl* impl, BLImageEncoderCore* dst) ; -}; - -//! Image codec [C Interface - Impl]. -struct BLImageCodecImpl { - //! Virtual function table. - const BLImageCodecVirt* virt; - //! Image codec name like "PNG", "JPEG", etc... - const char* name; - //! Image codec vendor, built-in codecs use "Blend2D". - const char* vendor; - - //! Reference count. - size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - //! Image codec features. - uint32_t features; - //! Mime type. - const char* mimeType; - //! Known file extensions used by this image codec separated by "|". - const char* extensions; -}; - -//! Image codec [C Interface - Core]. -struct BLImageCodecCore { - BLImageCodecImpl* impl; -}; -]] - - - - -ffi.cdef[[ -//! Image decoder [C Interface - Virtual Function Table]. -struct BLImageDecoderVirt { - BLResult (__cdecl* destroy)(BLImageDecoderImpl* impl) ; - BLResult (__cdecl* restart)(BLImageDecoderImpl* impl) ; - BLResult (__cdecl* readInfo)(BLImageDecoderImpl* impl, BLImageInfo* infoOut, const uint8_t* data, size_t size) ; - BLResult (__cdecl* readFrame)(BLImageDecoderImpl* impl, BLImageCore* imageOut, const uint8_t* data, size_t size) ; -}; -]] - ----[=[ - -- BUGBUG, BLImageCodec is only a class, no strict 'C' implementation -ffi.cdef[[ -//! Image decoder [C Interface - Impl]. -struct BLImageDecoderImpl { - //! Virtual function table. - const BLImageDecoderVirt* virt; - //! Image codec that created this decoder. - //BL_TYPED_MEMBER(BLImageCodecCore, BLImageCodec, codec); - union {BLImageCodecCore codec;}; - - //! Handle in case that this decoder wraps a thirt-party library. - void* handle; - - //! Reference count. - volatile size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - //! Last faulty result (if failed). - BLResult lastResult; - //! Current frame index. - uint64_t frameIndex; - //! Position in source buffer. - size_t bufferIndex; - -}; -]] - -ffi.cdef[[ -//! Image decoder [C Interface - Core] -struct BLImageDecoderCore { - BLImageDecoderImpl* impl; -}; -]] - - -ffi.cdef[[ -// ============================================================================ -// [BLImageEncoder - Core] -// ============================================================================ - -//! Image encoder [C Interface - Virtual Function Table]. -struct BLImageEncoderVirt { - BLResult (__cdecl* destroy)(BLImageEncoderImpl* impl) ; - BLResult (__cdecl* restart)(BLImageEncoderImpl* impl) ; - BLResult (__cdecl* writeFrame)(BLImageEncoderImpl* impl, BLArrayCore* dst, const BLImageCore* image) ; -}; - -//! Image encoder [C Interface - Impl]. -struct BLImageEncoderImpl { - //! Virtual function table. - const BLImageEncoderVirt* virt; - //! Image codec that created this encoder. - //BL_TYPED_MEMBER(BLImageCodecCore, BLImageCodec, codec); - union {BLImageCodecCore codec; }; - - //! Handle in case that this encoder wraps a thirt-party library. - void* handle; - - //! Reference count. - volatile size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - //! Last faulty result (if failed). - BLResult lastResult; - //! Current frame index. - uint64_t frameIndex; - //! Position in source buffer. - size_t bufferIndex; -}; - -//! Image encoder [C Interface - Core]. -struct BLImageEncoderCore { - BLImageEncoderImpl* impl; -}; -]] - - -end -- BLEND2D_BLIMAGE_H diff --git a/blend2d/blmatrix.lua b/blend2d/blmatrix.lua deleted file mode 100644 index 3301d90..0000000 --- a/blend2d/blmatrix.lua +++ /dev/null @@ -1,117 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLMATRIX_H then -BLEND2D_BLMATRIX_H = true - -require("blend2d.blgeometry") - -ffi.cdef[[ -typedef BLResult (__cdecl * BLMapPointDArrayFunc)(const void* ctx, BLPoint* dst, const BLPoint* src, size_t count); -]] - -ffi.cdef[[ -enum BLMatrix2DType { - //! Identity matrix. - BL_MATRIX2D_TYPE_IDENTITY = 0, - //! Has translation part (the rest is like identity). - BL_MATRIX2D_TYPE_TRANSLATE = 1, - //! Has translation and scaling parts. - BL_MATRIX2D_TYPE_SCALE = 2, - //! Has translation and scaling parts, however scaling swaps X/Y. - BL_MATRIX2D_TYPE_SWAP = 3, - //! Generic affine matrix. - BL_MATRIX2D_TYPE_AFFINE = 4, - //! Invalid/degenerate matrix not useful for transformations. - BL_MATRIX2D_TYPE_INVALID = 5, - - //! Count of matrix types. - BL_MATRIX2D_TYPE_COUNT = 6 -}; -]] - -ffi.cdef[[ -//! 2D matrix data index. -enum BLMatrix2DValue { - BL_MATRIX2D_VALUE_00 = 0, - BL_MATRIX2D_VALUE_01 = 1, - BL_MATRIX2D_VALUE_10 = 2, - BL_MATRIX2D_VALUE_11 = 3, - BL_MATRIX2D_VALUE_20 = 4, - BL_MATRIX2D_VALUE_21 = 5, - - BL_MATRIX2D_VALUE_COUNT = 6 -}; -]] - -ffi.cdef[[ -//! 2D matrix operation. -enum BLMatrix2DOp { - //! Reset matrix to identity (argument ignored, should be nullptr). - BL_MATRIX2D_OP_RESET = 0, - //! Assign (copy) the other matrix. - BL_MATRIX2D_OP_ASSIGN = 1, - - //! Translate the matrix by [x, y]. - BL_MATRIX2D_OP_TRANSLATE = 2, - //! Scale the matrix by [x, y]. - BL_MATRIX2D_OP_SCALE = 3, - //! Skew the matrix by [x, y]. - BL_MATRIX2D_OP_SKEW = 4, - //! Rotate the matrix by the given angle about [0, 0]. - BL_MATRIX2D_OP_ROTATE = 5, - //! Rotate the matrix by the given angle about [x, y]. - BL_MATRIX2D_OP_ROTATE_PT = 6, - //! Transform this matrix by other `BLMatrix2D`. - BL_MATRIX2D_OP_TRANSFORM = 7, - - //! Post-translate the matrix by [x, y]. - BL_MATRIX2D_OP_POST_TRANSLATE = 8, - //! Post-scale the matrix by [x, y]. - BL_MATRIX2D_OP_POST_SCALE = 9, - //! Post-skew the matrix by [x, y]. - BL_MATRIX2D_OP_POST_SKEW = 10, - //! Post-rotate the matrix about [0, 0]. - BL_MATRIX2D_OP_POST_ROTATE = 11, - //! Post-rotate the matrix about a reference BLPoint. - BL_MATRIX2D_OP_POST_ROTATE_PT = 12, - //! Post-transform this matrix by other `BLMatrix2D`. - BL_MATRIX2D_OP_POST_TRANSFORM = 13, - - //! Count of matrix operations. - BL_MATRIX2D_OP_COUNT = 14 -}; -]] - - -ffi.cdef[[ - -//! 2D matrix represents an affine transformation matrix that can be used to -//! transform geometry and images. -struct BLMatrix2D { - union { - //! Matrix values, use `BL_MATRIX2D_VALUE` indexes to get a particular one. - double m[BL_MATRIX2D_VALUE_COUNT]; - //! Matrix values that map `m` to named values that can be used directly. - struct { - double m00; - double m01; - double m10; - double m11; - double m20; - double m21; - }; - }; -}; -]] - - -end -- BLEND2D_BLMATRIX_H diff --git a/blend2d/blpath.lua b/blend2d/blpath.lua deleted file mode 100644 index 36bfd70..0000000 --- a/blend2d/blpath.lua +++ /dev/null @@ -1,225 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLPATH_H then -BLEND2D_BLPATH_H = true - -local blapi = require("blend2d.blapi") - -require("blend2d.blarray") -require("blend2d.blgeometry") -require("blend2d.blvariant") - -ffi.cdef[[ -//! Path command. -enum BLPathCmd { - //! Move-to command (starts a new figure). - BL_PATH_CMD_MOVE = 0, - //! On-path command (interpreted as line-to or the end of a curve). - BL_PATH_CMD_ON = 1, - //! Quad-to control point. - BL_PATH_CMD_QUAD = 2, - //! Cubic-to control point (always used as a pair of commands). - BL_PATH_CMD_CUBIC = 3, - //! Close path. - BL_PATH_CMD_CLOSE = 4, - - //! Count of path commands. - BL_PATH_CMD_COUNT = 5 -}; - -//! Path command (never stored in path). -enum BLPathCmdExtra { - //! Used by `BLPath::setVertexAt` to preserve the current command value. - BL_PATH_CMD_PRESERVE = 0xFFFFFFFFu -}; - -//! Path flags. -enum BLPathFlags { - //! Path is empty (no commands or close commands only). - BL_PATH_FLAG_EMPTY = 0x00000001u, - //! Path contains multiple figures. - BL_PATH_FLAG_MULTIPLE = 0x00000002u, - //! Path contains quad curves (at least one). - BL_PATH_FLAG_QUADS = 0x00000004u, - //! Path contains cubic curves (at least one). - BL_PATH_FLAG_CUBICS = 0x00000008u, - //! Path is invalid. - BL_PATH_FLAG_INVALID = 0x40000000u, - //! Flags are dirty (not reflecting the current status). - BL_PATH_FLAG_DIRTY = 0x80000000u -}; - -//! Path reversal mode. -enum BLPathReverseMode { - //! Reverse each figure and their order as well (default). - BL_PATH_REVERSE_MODE_COMPLETE = 0, - //! Reverse each figure separately (keeps their order). - BL_PATH_REVERSE_MODE_SEPARATE = 1, - - //! Count of path-reversal modes - BL_PATH_REVERSE_MODE_COUNT = 2 -}; - -//! Stroke join type. -enum BLStrokeJoin { - BL_STROKE_JOIN_MITER_CLIP = 0, - BL_STROKE_JOIN_MITER_BEVEL = 1, - BL_STROKE_JOIN_MITER_ROUND = 2, - BL_STROKE_JOIN_BEVEL = 3, - BL_STROKE_JOIN_ROUND = 4, - - BL_STROKE_JOIN_COUNT = 5 -}; - -//! Position of a stroke-cap. -enum BLStrokeCapPosition { - BL_STROKE_CAP_POSITION_START = 0, - BL_STROKE_CAP_POSITION_END = 1, - - BL_STROKE_CAP_POSITION_COUNT = 2 -}; - -//! A presentation attribute defining the shape to be used at the end of open subpaths. -enum BLStrokeCap { - BL_STROKE_CAP_BUTT = 0, - BL_STROKE_CAP_SQUARE = 1, - BL_STROKE_CAP_ROUND = 2, - BL_STROKE_CAP_ROUND_REV = 3, - BL_STROKE_CAP_TRIANGLE = 4, - BL_STROKE_CAP_TRIANGLE_REV = 5, - BL_STROKE_CAP_COUNT = 6 -}; - -//! Stroke transform order. -enum BLStrokeTransformOrder { - //! Transform after stroke => `Transform(Stroke(Input))` [default]. - BL_STROKE_TRANSFORM_ORDER_AFTER = 0, - //! Transform before stroke => `Stroke(Transform(Input))`. - BL_STROKE_TRANSFORM_ORDER_BEFORE = 1, - - //! Count of transform order types. - BL_STROKE_TRANSFORM_ORDER_COUNT = 2 -}; - -//! Mode that specifies how curves are approximated to line segments. -enum BLFlattenMode { - //! Use default mode (decided by Blend2D). - BL_FLATTEN_MODE_DEFAULT = 0, - //! Recursive subdivision flattening. - BL_FLATTEN_MODE_RECURSIVE = 1, - - //! Count of flatten modes. - BL_FLATTEN_MODE_COUNT = 2 -}; - -//! Mode that specifies how to construct offset curves. -enum BLOffsetMode { - //! Use default mode (decided by Blend2D). - BL_OFFSET_MODE_DEFAULT = 0, - //! Iterative offset construction. - BL_OFFSET_MODE_ITERATIVE = 1, - - //! Count of offset modes. - BL_OFFSET_MODE_COUNT = 2 -}; -]] - -ffi.cdef[[ -// ============================================================================ -// [BLApproximationOptions] -// ============================================================================ - -struct BLApproximationOptions { - //! Specifies how curves are flattened, see `BLFlattenMode`. - uint8_t flattenMode; - //! Specifies how curves are offsetted (used by stroking), see `BLOffsetMode`. - uint8_t offsetMode; - //! Reserved for future use, must be zero. - uint8_t reservedFlags[6]; - - //! Tolerance used to flatten curves. - double flattenTolerance; - //! Tolerance used to approximatecubic curves qith quadratic curves. - double simplifyTolerance; - //! Curve offsetting parameter, exact meaning depends on `offsetMode`. - double offsetParameter; -}; -]] - ---//! Default approximation options used by Blend2D. ---BL_API_C const BLApproximationOptions blDefaultApproximationOptions; - -ffi.cdef[[ -struct BLStrokeOptionsCore { - union { - struct { - uint8_t startCap; - uint8_t endCap; - uint8_t join; - uint8_t transformOrder; - uint8_t reserved[4]; - }; - uint8_t caps[BL_STROKE_CAP_POSITION_COUNT]; - uint64_t hints; - }; - - double width; - double miterLimit; - double dashOffset; - //BL_TYPED_MEMBER(BLArrayCore, BLArray, dashArray); - union { BLArrayCore dashArray;}; -}; -]] - -ffi.cdef[[ -//! 2D path view provides pointers to vertex and command data along with their -//! size. -struct BLPathView { - const uint8_t* commandData; - const BLPoint* vertexData; - size_t size; -}; -]] - -ffi.cdef[[ -//! 2D vector path [C Interface - Impl]. -struct BLPathImpl { - //! Union of either raw path-data or their `view`. - union { - struct { - uint8_t* commandData; - BLPoint* vertexData; - size_t size; - }; - - BLPathView view; - }; - - - size_t refCount; - uint8_t implType; - uint8_t implTraits; - uint16_t memPoolData; - - uint32_t flags; - size_t capacity; -}; - -//! 2D vector path [C Interface - Core]. -struct BLPathCore { - BLPathImpl* impl; -}; -]] - - - -end -- BLEND2D_BLPATH_H diff --git a/blend2d/blpattern.lua b/blend2d/blpattern.lua deleted file mode 100644 index a43ecae..0000000 --- a/blend2d/blpattern.lua +++ /dev/null @@ -1,66 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLPATTERN_H then -BLEND2D_BLPATTERN_H = true - -local blapi = require("blend2d.blapi") - -require("blend2d.blgeometry") -require("blend2d.blimage") -require("blend2d.blmatrix") -require("blend2d.blvariant") - - -ffi.cdef[[ -//! Pattern [C Interface - Impl]. -struct BLPatternImpl { - //! Image used by the pattern. - //BL_TYPED_MEMBER(BLImageCore, BLImage, image); - union {BLImageCore image;}; - - - void* reservedHeader[2]; - - - volatile size_t refCount; - - uint8_t implType; - - uint8_t implTraits; - - uint16_t memPoolData; - - - uint8_t patternType; - - uint8_t extendMode; - - uint8_t matrixType; - - uint8_t reserved[1]; - - - BLMatrix2D matrix; - - BLRectI area; - - //BL_HAS_TYPED_MEMBERS(BLPatternImpl) -}; - -//! Pattern [C Interface - Core]. -struct BLPatternCore { - BLPatternImpl* impl; -}; -]] - - -end -- BLEND2D_BLPATTERN_H diff --git a/blend2d/blpixelconverter.lua b/blend2d/blpixelconverter.lua deleted file mode 100644 index c51b47d..0000000 --- a/blend2d/blpixelconverter.lua +++ /dev/null @@ -1,56 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") -local C = ffi.C - -if not BLEND2D_BLPIXELCONVERTER_H then -BLEND2D_BLPIXELCONVERTER_H = true - -local blapi = require("blend2d.blapi") -require("blend2d.blformat") -require("blend2d.blgeometry") - - -ffi.cdef[[ -//! \cond INTERNAL -//! \ingroup blend2d_internal -//! Pixel converter function. -typedef BLResult (__cdecl * BLPixelConverterFunc)( - const BLPixelConverterCore* self, - uint8_t* dstData, intptr_t dstStride, - const uint8_t* srcData, intptr_t srcStride, - uint32_t w, uint32_t h, const BLPixelConverterOptions* options) ; -//! \endcond -]] - - -ffi.cdef[[ -//! Pixel conversion options. -struct BLPixelConverterOptions { - BLPointI origin; - size_t gap; -}; -]] - - -ffi.cdef[[ -//! Pixel converter [C Interface - Core]. -struct BLPixelConverterCore { - //! Converter function. - BLPixelConverterFunc convertFunc; - - union { - uint8_t strategy; - //! Internal data used by the pixel converter not exposed to users. - uint8_t data[64]; - }; -}; -]] - -end -- BLEND2D_BLPIXELCONVERTER_H diff --git a/blend2d/blrandom.lua b/blend2d/blrandom.lua deleted file mode 100644 index 85e564d..0000000 --- a/blend2d/blrandom.lua +++ /dev/null @@ -1,23 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") - - - -local blapi = require("blend2d.blapi") - -ffi.cdef[[ -struct BLRandom { - uint64_t data[2]; -}; -]] - - - -return BLRandom diff --git a/blend2d/blregion.lua b/blend2d/blregion.lua deleted file mode 100644 index d305e91..0000000 --- a/blend2d/blregion.lua +++ /dev/null @@ -1,71 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") - -if not BLEND2D_BLREGION_H then -BLEND2D_BLREGION_H = true - -require("blend2d.blarray") -require("blend2d.blgeometry") -require("blend2d.blvariant") - - -ffi.cdef[[ -//! Region type. -enum BLRegionType { - BL_REGION_TYPE_EMPTY = 0, - BL_REGION_TYPE_RECT = 1, - BL_REGION_TYPE_COMPLEX = 2, - BL_REGION_TYPE_COUNT = 3 -}; -]] - - -ffi.cdef[[ -//! 2D region [C Interface - Impl]. -struct BLRegionImpl { - //! Union of either raw `data` & `size` members or their `view`. - union { - struct { - //! Region data (Y/X sorted rectangles). - BLBoxI* data; - //! Region size (count of rectangles in the region). - size_t size; - }; - //! Region data and size as `BLRegionView`. - BLRegionView view; - }; - - //! Region capacity (rectangles). - size_t capacity; - - //! Reference count. - volatile size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - //! Reserved, must be zero. - uint8_t reserved[4]; - //! Bounding box, empty regions have [0, 0, 0, 0]. - BLBoxI boundingBox; -}; -]] - -ffi.cdef[[ -//! 2D region [C Interface - Core]. -struct BLRegionCore { - BLRegionImpl* impl; -}; -]] - -end -- BLEND2D_BLREGION_H diff --git a/blend2d/blstring.lua b/blend2d/blstring.lua deleted file mode 100644 index cdb7e1b..0000000 --- a/blend2d/blstring.lua +++ /dev/null @@ -1,57 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") - -if not BLEND2D_BLSTRING_H then -BLEND2D_BLSTRING_H = true - -require("blend2d.blvariant") - - -ffi.cdef[[ -// ============================================================================ -// [BLString - Core] -// ============================================================================ - -//! Byte string [C Interface - Impl]. -struct BLStringImpl { - union { - struct { - //! String data [null terminated]. - char* data; - //! String size [in bytes]. - size_t size; - }; - //! String data and size as `BLStringView`. - BLStringView view; - }; - //! String capacity [in bytes]. - size_t capacity; - - //! Reference count. - volatile size_t refCount; - //! Impl type. - uint8_t implType; - //! Impl traits. - uint8_t implTraits; - //! Memory pool data. - uint16_t memPoolData; - - //! Reserved, will be part of string data. - uint8_t reserved[4]; -}; - -//! Byte string [C Interface - Core]. -struct BLStringCore { - BLStringImpl* impl; -}; -]] - - -end -- BLEND2D_BLSTRING_H diff --git a/blend2d/blvariant.lua b/blend2d/blvariant.lua deleted file mode 100644 index e0abe3d..0000000 --- a/blend2d/blvariant.lua +++ /dev/null @@ -1,181 +0,0 @@ ---[[ -// [Blend2D] -// 2D Vector Graphics Powered by a JIT Compiler. -// -// [License] -// ZLIB - See LICENSE.md file in the package. ---]] - -local ffi = require("ffi") - - -if not BLEND2D_BLVARIANT_H then -BLEND2D_BLVARIANT_H = true - -require("blend2d.blapi") - ---[[ -// ============================================================================ -// [Constants] -// ============================================================================ ---]] - -ffi.cdef[[ -//! Impl type identifier used by to describe a Blend2D Impl. -enum BLImplType { - //! Type is `Null`. - BL_IMPL_TYPE_NULL = 0, - //! Type is `BLBitArray`. - BL_IMPL_TYPE_BIT_ARRAY = 1, - //! Type is `BLString`. - BL_IMPL_TYPE_STRING = 2, - //! Type is `BLArray` where `T` is `BLVariant` or other ref-counted type. - BL_IMPL_TYPE_ARRAY_VAR = 3, - //! Type is `BLArray` where `T` matches 8-bit signed integral type. - BL_IMPL_TYPE_ARRAY_I8 = 4, - //! Type is `BLArray` where `T` matches 8-bit unsigned integral type. - BL_IMPL_TYPE_ARRAY_U8 = 5, - //! Type is `BLArray` where `T` matches 16-bit signed integral type. - BL_IMPL_TYPE_ARRAY_I16 = 6, - //! Type is `BLArray` where `T` matches 16-bit unsigned integral type. - BL_IMPL_TYPE_ARRAY_U16 = 7, - //! Type is `BLArray` where `T` matches 32-bit signed integral type. - BL_IMPL_TYPE_ARRAY_I32 = 8, - //! Type is `BLArray` where `T` matches 32-bit unsigned integral type. - BL_IMPL_TYPE_ARRAY_U32 = 9, - //! Type is `BLArray` where `T` matches 64-bit signed integral type. - BL_IMPL_TYPE_ARRAY_I64 = 10, - //! Type is `BLArray` where `T` matches 64-bit unsigned integral type. - BL_IMPL_TYPE_ARRAY_U64 = 11, - //! Type is `BLArray` where `T` matches 32-bit floating point type. - BL_IMPL_TYPE_ARRAY_F32 = 12, - //! Type is `BLArray` where `T` matches 64-bit floating point type. - BL_IMPL_TYPE_ARRAY_F64 = 13, - //! Type is `BLArray` where `T` is a struct of size 1. - BL_IMPL_TYPE_ARRAY_STRUCT_1 = 14, - //! Type is `BLArray` where `T` is a struct of size 2. - BL_IMPL_TYPE_ARRAY_STRUCT_2 = 15, - //! Type is `BLArray` where `T` is a struct of size 3. - BL_IMPL_TYPE_ARRAY_STRUCT_3 = 16, - //! Type is `BLArray` where `T` is a struct of size 4. - BL_IMPL_TYPE_ARRAY_STRUCT_4 = 17, - //! Type is `BLArray` where `T` is a struct of size 6. - BL_IMPL_TYPE_ARRAY_STRUCT_6 = 18, - //! Type is `BLArray` where `T` is a struct of size 8. - BL_IMPL_TYPE_ARRAY_STRUCT_8 = 19, - //! Type is `BLArray` where `T` is a struct of size 10. - BL_IMPL_TYPE_ARRAY_STRUCT_10 = 20, - //! Type is `BLArray` where `T` is a struct of size 12. - BL_IMPL_TYPE_ARRAY_STRUCT_12 = 21, - //! Type is `BLArray` where `T` is a struct of size 16. - BL_IMPL_TYPE_ARRAY_STRUCT_16 = 22, - //! Type is `BLArray` where `T` is a struct of size 20. - BL_IMPL_TYPE_ARRAY_STRUCT_20 = 23, - //! Type is `BLArray` where `T` is a struct of size 24. - BL_IMPL_TYPE_ARRAY_STRUCT_24 = 24, - //! Type is `BLArray` where `T` is a struct of size 32. - BL_IMPL_TYPE_ARRAY_STRUCT_32 = 25, - //! Type is `BLPath`. - BL_IMPL_TYPE_PATH2D = 32, - //! Type is `BLRegion`. - BL_IMPL_TYPE_REGION = 33, - //! Type is `BLImage`. - BL_IMPL_TYPE_IMAGE = 34, - //! Type is `BLImageCodec`. - BL_IMPL_TYPE_IMAGE_CODEC = 35, - //! Type is `BLImageDecoder`. - BL_IMPL_TYPE_IMAGE_DECODER = 36, - //! Type is `BLImageEncoder`. - BL_IMPL_TYPE_IMAGE_ENCODER = 37, - //! Type is `BLGradient`. - BL_IMPL_TYPE_GRADIENT = 38, - //! Type is `BLPattern`. - BL_IMPL_TYPE_PATTERN = 39, - //! Type is `BLContext`. - BL_IMPL_TYPE_CONTEXT = 40, - //! Type is `BLFont`. - BL_IMPL_TYPE_FONT = 50, - //! Type is `BLFontFace`. - BL_IMPL_TYPE_FONT_FACE = 51, - //! Type is `BLFontData`. - BL_IMPL_TYPE_FONT_DATA = 52, - //! Type is `BLFontLoader`. - BL_IMPL_TYPE_FONT_LOADER = 53, - //! Type is `BLFontFeatureOptions`. - BL_IMPL_TYPE_FONT_FEATURE_OPTIONS = 54, - //! Type is `BLFontVariationOptions`. - BL_IMPL_TYPE_FONT_VARIATION_OPTIONS = 55, - - //! Count of type identifiers including all reserved ones. - BL_IMPL_TYPE_COUNT = 64 -}; -]] - -ffi.cdef[[ -//! Impl traits that describe some details about a Blend2D `Impl` data. -enum BLImplTraits { - //! Set if the impl is a built-in null instance (default constructed). - BL_IMPL_TRAIT_NULL = 0x01u, - //! Set if the impl provides a virtual function table (first member). - BL_IMPL_TRAIT_VIRT = 0x02u, - //! Set if the impl uses an external data (data is not part of impl). - BL_IMPL_TRAIT_EXTERNAL = 0x10u, - //! Set if the impl was not allocated by `blRuntimeAllocImpl()`. - BL_IMPL_TRAIT_FOREIGN = 0x80u -}; -]] - -ffi.cdef[[ -// ============================================================================ -// [BLVariant - Core] -// ============================================================================ - -struct BLVariantImpl { - // IMPL HEADER - // ----------- - // - // [32-bit: 12 bytes] - // [64-bit: 24 bytes] - - //! Union that provides either one `virt` table pointer and two reserved - //! fields at index [1] and [2] in case of object or 3 reserved fields in - //! case of value. - union { - //! Virtual function table (only available to impls with BL_IMPL_TRAIT_VIRT trait). - const void* virt; - //! Space reserved for object/value header (must be array-view if the impl is container). - uintptr_t header[3]; - }; - - // IMPL COMMON - // ----------- - // - // [32-bit: 8 bytes] - // [64-bit: 12 bytes] - - //! Reference count. - volatile size_t refCount; - //! Impl type, see `BLImplType`. - uint8_t implType; - //! Traits of this impl, see `BLImplTraits`. - uint8_t implTraits; - //! Memory pool data, zero if not mem-pooled. - uint16_t memPoolData; - - // IMPL BODY - // --------- - - //! Reserved data, free to be used by the impl (padding for us). - uint8_t reserved[4]; -}; - -//! Variant [C Interface - Core]. -struct BLVariantCore { - BLVariantImpl* impl; -}; -]] - ---//! Built-in none objects indexed by `BLImplType` ---BL_API_C BLVariantCore blNone[BL_IMPL_TYPE_COUNT]; - -end -- BLEND2D_BLVARIANT_H diff --git a/blend2d/lj2blapi.lua b/experimental/lj2blapi.lua similarity index 99% rename from blend2d/lj2blapi.lua rename to experimental/lj2blapi.lua index 9659ba5..cc63380 100644 --- a/blend2d/lj2blapi.lua +++ b/experimental/lj2blapi.lua @@ -14,7 +14,7 @@ local bit = require("bit") local band, bor = bit.band, bit.bor local lshift, rshift = bit.lshift, bit.rshift -local enum = require("blend2d.enum") +local enum = require("enum") -- platform Byte ordering if (__ARMEB__) or (__MIPSEB__) or diff --git a/experimental/preproc.lua b/experimental/preproc.lua new file mode 100644 index 0000000..2458093 --- /dev/null +++ b/experimental/preproc.lua @@ -0,0 +1,57 @@ +--[[ +-- first do this + copy the blend2d.h file into this directory +then + mkdir blend2d + + Copy the rest of the interesting header files into that directory + blapi.h + blarray. + blbitarray.h + blcontext.h + blfilesystem.h + blfont.h + blfontdefs.h + blformat.h + blgeometry.h + blglyphbuffer.h + blgradient.h + blimage.h + blmatrix.h + blpath.h + blpattern.h + blpixelconverter.h + blrandom.h + blregion.h + blrgba.h + blruntime.h + blstring.h + blvariant.h + +-- cl /E blend2d.h > blend2d_ffi.txt + +--Then run this file on the resulting blend2d_ffi.txt +-- luajit preproc.lua blend2d_ffi.txt > blend2d_ffi.lua +-- +-- look for the line starting: typedef struct BLRange BLRange; +-- and delete everything before that + +Of Note: +Endian things are not taken care of +blruntime +blfontdefs +blformat +blrgba +union/structs are collapsed +--]] + + +for line in io.lines("blend2d_ffi.txt") do + if line ~= "" and line ~= " " then + if string.sub(line, 1, 1) ~= '#' then + if not string.find(line, "__pragma") then + print(line) + end + end + end +end diff --git a/testy/DrawingContext.lua b/testy/DrawingContext.lua index fa0fa57..eb09b05 100644 --- a/testy/DrawingContext.lua +++ b/testy/DrawingContext.lua @@ -26,7 +26,7 @@ local C = ffi.C local blapi = require("blend2d.blend2d") -local enum = require("blend2d.enum") +local enum = require("enum") local maths = require("maths") @@ -477,6 +477,25 @@ end --[[ Setting Stroke Attributes ]] +function DrawingContext.setTransformBeforeStroke(self) + local blResult = blapi.blContextSetStrokeTransformOrder(self.DC, C.BL_STROKE_TRANSFORM_ORDER_BEFORE); + + if bResult ~= C.BL_SUCCESS then + return false, blResult; + end + + return self; +end + +function DrawingContext.setTransformAfterStroke(self) + local blResult = blapi.blContextSetStrokeTransformOrder(self.DC, C.BL_STROKE_TRANSFORM_ORDER_AFTER); + + if bResult ~= C.BL_SUCCESS then + return false, blResult; + end + + return self; +end function DrawingContext.setStrokeStartCap (self, strokeCap) local bResult = blapi.blContextSetStrokeCap(self.DC, C.BL_STROKE_CAP_POSITION_START, strokeCap) ; diff --git a/testy/GImage.lua b/testy/GImage.lua index 59ec182..de0be8b 100644 --- a/testy/GImage.lua +++ b/testy/GImage.lua @@ -58,8 +58,8 @@ function GImage.draw(self, ctx) end function GImage.subImage(self, x,y,w,h) - local imgArea = BLRectI(x,y,w,h) - GImage:new({image = self.image, width = w, height = h, imageArea = imgArea}) + local imageArea = BLRectI(x,y,w,h) + GImage:new({image = self.image, width = w, height = h, imageArea = imageArea}) end return GImage diff --git a/testy/GPianoKeyboard.lua b/testy/GPianoKeyboard.lua index 2197a00..5af4e8c 100644 --- a/testy/GPianoKeyboard.lua +++ b/testy/GPianoKeyboard.lua @@ -48,6 +48,7 @@ end function GPianoKeyboard.draw(self, ctx) ctx:push() ctx:scale(self.scale.x, self.scale.y) + ctx:setTransformBeforeStroke(); ctx:strokeWidth(1) --print("GPianoKeyboard.draw") diff --git a/testy/GScaleTest.lua b/testy/GScaleTest.lua index ad7fa1c..a1f9fe2 100644 --- a/testy/GScaleTest.lua +++ b/testy/GScaleTest.lua @@ -34,15 +34,16 @@ function GScaleTest.new(self, obj) end function GScaleTest.draw(self, ctx) - ctx:noStroke() - ctx:fill(255, 127,127) - ctx:rect(0,0,94,292) + --ctx:noStroke() + --ctx:fill(255, 127,127) + --ctx:rect(0,0,94,292) ctx:push() ctx:fill(230) - ctx:strokeWidth(0.1) + ctx:strokeWidth(1) ctx:scale(scaleX, scaleY) + ctx:setTransformBeforeStroke(); ctx:fillRectD(0,0,whiteKeyWidth, whiteKeyHeight) ctx:stroke(255,0,0) ctx:strokeRectD(0,0,whiteKeyWidth, whiteKeyHeight) diff --git a/testy/Gradient.lua b/testy/Gradient.lua index 765726f..287ef4d 100644 --- a/testy/Gradient.lua +++ b/testy/Gradient.lua @@ -2,9 +2,9 @@ local ffi = require("ffi") local C = ffi.C -local blapi = require("blend2d.blapi") -require("blend2d.blgradient") - +--local blapi = require("blend2d.blapi") +--require("blend2d.blgradient") +local blapi = require("blend2d.blend2d") local function addStops(gradient, stops) if not stops then return false end diff --git a/blend2d/blerror.lua b/testy/blerror.lua similarity index 99% rename from blend2d/blerror.lua rename to testy/blerror.lua index 05c6ee6..4e43ca4 100644 --- a/blend2d/blerror.lua +++ b/testy/blerror.lua @@ -1,4 +1,4 @@ -local enum = require("blend2d.enum") +local enum = require("enum") local errors = enum { [0] = "BL_SUCCESS", diff --git a/blend2d/enum.lua b/testy/enum.lua similarity index 100% rename from blend2d/enum.lua rename to testy/enum.lua diff --git a/testy/test_STOP_interactive.lua b/testy/test_STOP_interactive.lua index 160fab2..8a29738 100644 --- a/testy/test_STOP_interactive.lua +++ b/testy/test_STOP_interactive.lua @@ -22,7 +22,7 @@ WMSetBackground(bkgnd) local function startup() --spawn(framestatapp, {x=0, y=0, width=1200, height=20}) --spawn(keyboardapp, {x= 280, y = 600, width=640, height=290}) - --spawn(pianoapp, {x= 280, y = 200, width=640, height=290}) + spawn(pianoapp, {x= 280, y = 200, width=640, height=290}) end winman {width = desktopWidth, height=desktopHeight, startup = startup} \ No newline at end of file diff --git a/testy/test_blmatrix.lua b/testy/test_blmatrix.lua index 4f4c7c0..aa47e94 100644 --- a/testy/test_blmatrix.lua +++ b/testy/test_blmatrix.lua @@ -3,7 +3,7 @@ package.path = "../?.lua;"..package.path; local ffi = require("ffi") local blapi = require("blend2d.blend2d") -local enum = require("blend2d.enum") +local enum = require("enum") local BLMatrix2DType = enum { diff --git a/testy/vkeys.lua b/testy/vkeys.lua index 2e37e84..d3e88ab 100644 --- a/testy/vkeys.lua +++ b/testy/vkeys.lua @@ -1,4 +1,4 @@ -local enum = require("blend2d.enum") +local enum = require("enum") local vkeys = enum { -- Virtual Keys, Standard Set