diff --git a/.gitignore b/.gitignore index c820f80..77978ed 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ blend2d/*.so src/*.c *.py[cd] *.png + +dist diff --git a/3rdparty/asmjit b/3rdparty/asmjit index a4dd0b2..2e93826 160000 --- a/3rdparty/asmjit +++ b/3rdparty/asmjit @@ -1 +1 @@ -Subproject commit a4dd0b2d8b0fdbcda777e4d6dae0e76636080113 +Subproject commit 2e93826348d6cd1325a8b1f7629e193c58332da9 diff --git a/3rdparty/blend2d b/3rdparty/blend2d index 92ba4ea..ca5403c 160000 --- a/3rdparty/blend2d +++ b/3rdparty/blend2d @@ -1 +1 @@ -Subproject commit 92ba4eaa2f22331bc9823ddb47f53dd8ce683c8b +Subproject commit ca5403c1d02b2bc9d2de581e4cb13e5e80f33860 diff --git a/blend2d/__init__.py b/blend2d/__init__.py index ad84e3a..3a7938a 100644 --- a/blend2d/__init__.py +++ b/blend2d/__init__.py @@ -23,7 +23,23 @@ from __future__ import absolute_import from ._capi import ( - Array, ArrayType, CompOp, ConicalGradient, Context, ExtendMode, Font, - Format, Image, LinearGradient, Matrix2D, Path, Pattern, RadialGradient, - Rect, RectI, Region, StrokeCap, StrokeCapPosition, StrokeJoin + Array, + ArrayType, + CompOp, + ConicalGradient, + Context, + ExtendMode, + Font, + Format, + Image, + LinearGradient, + Matrix2D, + Path, + Pattern, + RadialGradient, + Rect, + RectI, + StrokeCap, + StrokeCapPosition, + StrokeJoin, ) diff --git a/blend2d/tests/test_basic.py b/blend2d/tests/test_basic.py index 595a419..bccf39d 100644 --- a/blend2d/tests/test_basic.py +++ b/blend2d/tests/test_basic.py @@ -20,9 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from __future__ import ( - absolute_import, division, print_function, unicode_literals -) +from __future__ import absolute_import, division, print_function, unicode_literals import unittest diff --git a/ci/edm_driver.py b/ci/edm_driver.py index 8e86f60..17cda87 100644 --- a/ci/edm_driver.py +++ b/ci/edm_driver.py @@ -18,12 +18,10 @@ import click DEPENDENCIES = { - 'cython', - 'numpy', + "cython", + "numpy", } -CONFIG_FILE = os.path.abspath( - os.path.join(os.path.dirname(__file__), '.edm.yaml') -) +CONFIG_FILE = os.path.abspath(os.path.join(os.path.dirname(__file__), ".edm.yaml")) @click.group() @@ -32,13 +30,12 @@ def cli(): @cli.command() -@click.option('--runtime', default='3.6') -@click.option('--environment', default=None) +@click.option("--runtime", default="3.6") +@click.option("--environment", default=None) def install(runtime, environment): - """ Install project and dependencies into a clean EDM environment. - """ + """Install project and dependencies into a clean EDM environment.""" parameters = get_parameters(runtime, environment) - parameters['packages'] = ' '.join(DEPENDENCIES) + parameters["packages"] = " ".join(DEPENDENCIES) # edm commands to setup the development environment commands = [ "{edm} environments create {environment} --force --version={runtime}", @@ -48,33 +45,29 @@ def install(runtime, environment): ] click.echo("Creating environment '{environment}'".format(**parameters)) execute(commands, parameters) - click.echo('Done install') + click.echo("Done install") @cli.command() -@click.option('--runtime', default='3.6') -@click.option('--environment', default=None) +@click.option("--runtime", default="3.6") +@click.option("--environment", default=None) def test(runtime, environment): - """ Run the test suite in a given environment with the specified toolkit. - """ + """Run the test suite in a given environment with the specified toolkit.""" parameters = get_parameters(runtime, environment) - environ = {'PYTHONUNBUFFERED': '1'} - commands = [ - "edm run -e {environment} -- python -m unittest discover blend2d" - ] + environ = {"PYTHONUNBUFFERED": "1"} + commands = ["edm run -e {environment} -- python -m unittest discover blend2d"] click.echo("Running tests in '{environment}'".format(**parameters)) os.environ.update(environ) execute(commands, parameters) - click.echo('Done test') + click.echo("Done test") @cli.command() -@click.option('--runtime', default='3.6') -@click.option('--environment', default=None) +@click.option("--runtime", default="3.6") +@click.option("--environment", default=None) def cleanup(runtime, environment): - """ Remove a development environment. - """ + """Remove a development environment.""" parameters = get_parameters(runtime, environment) commands = [ "edm run -e {environment} -- python setup.py clean", @@ -82,22 +75,23 @@ def cleanup(runtime, environment): ] click.echo("Cleaning up environment '{environment}'".format(**parameters)) execute(commands, parameters) - click.echo('Done cleanup') + click.echo("Done cleanup") # ---------------------------------------------------------------------------- # Utility routines # ---------------------------------------------------------------------------- + def get_parameters(runtime, environment): - """ Set up parameters dictionary for format() substitution """ + """Set up parameters dictionary for format() substitution""" parameters = { - 'runtime': runtime, - 'environment': environment, - 'edm': 'edm --config {}'.format(CONFIG_FILE), + "runtime": runtime, + "environment": environment, + "edm": "edm --config {}".format(CONFIG_FILE), } if environment is None: - parameters['environment'] = 'blend2d-{runtime}'.format(**parameters) + parameters["environment"] = "blend2d-{runtime}".format(**parameters) return parameters @@ -110,5 +104,5 @@ def execute(commands, parameters): sys.exit(1) -if __name__ == '__main__': +if __name__ == "__main__": cli() diff --git a/examples/gradient.py b/examples/gradient.py index c9cd678..51e2736 100644 --- a/examples/gradient.py +++ b/examples/gradient.py @@ -2,7 +2,7 @@ import numpy as np from skimage.io import imsave -if __name__ == '__main__': +if __name__ == "__main__": array = np.empty((256, 256, 4), dtype=np.uint8) image = blend2d.Image(array) context = blend2d.Context(image) @@ -17,10 +17,10 @@ context.fill_all() circle = blend2d.Path() - circle.ellipse(128, 128, 64, 64) + circle.add_ellipse(128, 128, 64, 64) context.set_comp_op(blend2d.CompOp.EXCLUSION) context.set_fill_style((0.0, 1.0, 1.0)) - context.fill_path(circle) + context.fill_path((0, 0), circle) - imsave('gradient.png', array) + imsave("gradient.png", array) diff --git a/examples/image.py b/examples/image.py index b4d333f..1cddfec 100644 --- a/examples/image.py +++ b/examples/image.py @@ -17,10 +17,10 @@ def random_lines(context, width, height): path.reset() path.move_to(x0, y0) path.line_to(x1, y1) - context.stroke_path(path) + context.stroke_path((0, 0), path) -if __name__ == '__main__': +if __name__ == "__main__": image_array = np.empty((256, 256, 4), dtype=np.uint8) image = blend2d.Image(image_array) image_context = blend2d.Context(image) @@ -28,13 +28,13 @@ def random_lines(context, width, height): array = np.empty((512, 512, 4), dtype=np.uint8) context = blend2d.Context(blend2d.Image(array)) - context.clear() + context.clear_all() src = blend2d.Rect(0, 0, *image_array.shape[:2]) dst = blend2d.Rect(0, 0, 100, 100) context.blit_scaled_image(dst, image, src) - context.rotate(-np.pi/12) + context.rotate(-np.pi / 12) context.blit_image((10.0, 100.0), image, src) - imsave('image.png', array) + imsave("image.png", array) diff --git a/examples/lines.py b/examples/lines.py index b033eb9..7bc15ea 100644 --- a/examples/lines.py +++ b/examples/lines.py @@ -3,18 +3,17 @@ from skimage.color import hsv2rgb from skimage.io import imsave -if __name__ == '__main__': +if __name__ == "__main__": array = np.empty((500, 500, 4), dtype=np.uint8) image = blend2d.Image(array) canvas = blend2d.Context(image) - canvas.clear() + canvas.clear_all() canvas.set_stroke_width(20.0) path = blend2d.Path() - path.move_to(100, 0) - path.quadric_to(125, 25, 250, 0) - path.quadric_to(375, -25, 400, 0) + path.quadric_to(25, 25, 150, 0) + path.quadric_to(275, -25, 300, 0) caps = { blend2d.StrokeCap.CAP_BUTT, @@ -30,7 +29,6 @@ color = hsv2rgb([[i / len(caps), 0.75, 0.75]])[0] canvas.set_stroke_style(color) canvas.set_stroke_caps(cap) - canvas.translate(0, (i + 1) * 75) - canvas.stroke_path(path) + canvas.stroke_path((100, (i + 1) * 75), path) - imsave('lines.png', array) + imsave("lines.png", array) diff --git a/examples/pattern.py b/examples/pattern.py index 709900a..0b6483c 100644 --- a/examples/pattern.py +++ b/examples/pattern.py @@ -17,10 +17,10 @@ def random_lines(context, width, height): path.reset() path.move_to(x0, y0) path.line_to(x1, y1) - context.stroke_path(path) + context.stroke_path((0, 0), path) -if __name__ == '__main__': +if __name__ == "__main__": pattern_image = blend2d.Image(np.empty((256, 256, 4), dtype=np.uint8)) pattern_context = blend2d.Context(pattern_image) random_lines(pattern_context, 256, 256) @@ -28,19 +28,17 @@ def random_lines(context, width, height): array = np.empty((512, 512, 4), dtype=np.uint8) image = blend2d.Image(array) context = blend2d.Context(image) - context.clear() + context.clear_all() area = blend2d.RectI(0, 0, 256, 256) matrix = blend2d.Matrix2D() matrix.rotate(128.0, 128.0, 45.0) matrix.scale(0.25, 0.25) - pattern = blend2d.Pattern( - pattern_image, area, blend2d.ExtendMode.REPEAT, matrix - ) + pattern = blend2d.Pattern(pattern_image, area, blend2d.ExtendMode.REPEAT, matrix) context.set_fill_style(pattern) circle = blend2d.Path() - circle.ellipse(256, 256, 200, 200) - context.fill_path(circle) + circle.add_ellipse(256, 256, 200, 200) + context.fill_path((0, 0), circle) - imsave('pattern.png', array) + imsave("pattern.png", array) diff --git a/examples/spiral.py b/examples/spiral.py index b9313bd..989f585 100644 --- a/examples/spiral.py +++ b/examples/spiral.py @@ -32,11 +32,11 @@ def spiral(size, hue, sat, val): image = blend2d.Image(array) canvas = blend2d.Context(image) circle = blend2d.Path() - circle.ellipse(0, 0, CIRCLE_SIZE, CIRCLE_SIZE) + circle.add_ellipse(0, 0, CIRCLE_SIZE, CIRCLE_SIZE) - divisions = np.linspace(0, 2*np.pi, CIRCLE_COUNT, endpoint=False) + divisions = np.linspace(0, 2 * np.pi, CIRCLE_COUNT, endpoint=False) centers = np.stack((np.cos(divisions), np.sin(divisions)), axis=1) - offsets = compute_offsets(np.sqrt(size[0]**2 + size[1]**2) / 2) + offsets = compute_offsets(np.sqrt(size[0] ** 2 + size[1] ** 2) / 2) color_count = len(offsets) hsv = np.ones((color_count, 1, 3)) @@ -45,7 +45,7 @@ def spiral(size, hue, sat, val): hsv[:, 0, 2] = np.linspace(val[0], val[1], color_count, endpoint=False) spectrum = hsv2rgb(hsv).reshape(color_count, 3) - canvas.clear() # fill with black + canvas.clear_all() # fill with black for idx, offset in enumerate(offsets): canvas.set_fill_style(spectrum[idx]) radius = np.pi * offset / CIRCLE_COUNT @@ -54,22 +54,24 @@ def spiral(size, hue, sat, val): if ((idx + i) % 2) == 0: continue canvas.reset_matrix() - canvas.translate(size[0]/2 + offset*centers[i, 0], - size[1]/2 + offset*centers[i, 1]) + canvas.translate( + size[0] / 2 + offset * centers[i, 0], + size[1] / 2 + offset * centers[i, 1], + ) canvas.scale(scale, scale) - canvas.fill_path(circle) + canvas.fill_path((0, 0), circle) # BGRA -> RGBA array[:, :, [0, 1, 2]] = array[:, :, [2, 1, 0]] - imsave('spiral.png', array) + imsave("spiral.png", array) -if __name__ == '__main__': +if __name__ == "__main__": p = argparse.ArgumentParser() - p.add_argument('-z', '--size', nargs=2, default=[1000, 1000]) - p.add_argument('-u', '--hue', nargs=2, default=[0.0, 1.0]) - p.add_argument('-s', '--sat', nargs=2, default=[0.95, 0.95]) - p.add_argument('-v', '--val', nargs=2, default=[0.85, 0.85]) + p.add_argument("-z", "--size", nargs=2, default=[1000, 1000]) + p.add_argument("-u", "--hue", nargs=2, default=[0.0, 1.0]) + p.add_argument("-s", "--sat", nargs=2, default=[0.95, 0.95]) + p.add_argument("-v", "--val", nargs=2, default=[0.85, 0.85]) args = p.parse_args() size = tuple(int(a) for a in args.size) hue = tuple(float(a) for a in args.hue) diff --git a/examples/text.py b/examples/text.py index 2c2a2a7..411983a 100644 --- a/examples/text.py +++ b/examples/text.py @@ -2,16 +2,16 @@ import numpy as np from skimage.io import imsave -if __name__ == '__main__': +if __name__ == "__main__": array = np.empty((500, 500, 4), dtype=np.uint8) image = blend2d.Image(array) canvas = blend2d.Context(image) - canvas.clear() + canvas.clear_all() canvas.set_fill_style((1.0, 1.0, 1.0)) - text = u'Hello World!' - font = blend2d.Font('/Library/Fonts/Skia.ttf', 50) + text = "Hello World!" + font = blend2d.Font("/Library/Fonts/Skia.ttf", 50) canvas.fill_text((100, 100), font, text) - - imsave('text.png', array) + array[:, :, 3] = 255 + imsave("text.png", array) diff --git a/setup.py b/setup.py index d5e2dcf..61afc25 100644 --- a/setup.py +++ b/setup.py @@ -8,11 +8,11 @@ from setuptools.command.build_ext import build_ext # Set to 'Release' when building a release -BUILD_TYPE = 'Debug' +BUILD_TYPE = "Release" class CMakeExtension(Extension): - def __init__(self, name, cmake_lists_dir='.', sources=None, **kwa): + def __init__(self, name, cmake_lists_dir=".", sources=None, **kwa): sources = [] if sources is None else sources Extension.__init__(self, name, sources=sources, **kwa) self.cmake_lists_dir = os.path.abspath(cmake_lists_dir) @@ -21,9 +21,9 @@ def __init__(self, name, cmake_lists_dir='.', sources=None, **kwa): class cmake_build_ext(build_ext): def build_extensions(self): try: - subprocess.check_output(['cmake', '--version']) + subprocess.check_output(["cmake", "--version"]) except OSError: - raise RuntimeError('Cannot find CMake executable') + raise RuntimeError("Cannot find CMake executable") for ext in self.extensions: extpath = self.get_ext_fullpath(ext.name) @@ -31,51 +31,54 @@ def build_extensions(self): extfile = op.splitext(op.basename(extpath))[0] tmpdir = self.build_temp cmake_args = [ - '-DBLEND2D_STATIC=TRUE', - '-DBLEND2DPY_TARGET_NAME={}'.format(extfile), - '-DCMAKE_BUILD_TYPE={}'.format(BUILD_TYPE), - '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format( - BUILD_TYPE.upper(), extdir), - '-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_{}={}'.format( - BUILD_TYPE.upper(), extdir), - '-DPYTHON_EXECUTABLE={}'.format(sys.executable), + "-DBLEND2D_STATIC=TRUE", + "-DBLEND2DPY_TARGET_NAME={}".format(extfile), + "-DCMAKE_BUILD_TYPE={}".format(BUILD_TYPE), + "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}".format( + BUILD_TYPE.upper(), extdir + ), + "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_{}={}".format( + BUILD_TYPE.upper(), extdir + ), + "-DPYTHON_EXECUTABLE={}".format(sys.executable), ] - if platform.system() == 'Windows': - plat = ('x64' if platform.architecture()[0] == '64bit' - else 'Win32') + if platform.system() == "Windows": + plat = "x64" if platform.architecture()[0] == "64bit" else "Win32" cmake_args += [ - '-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE', - '-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_{}={}'.format( - BUILD_TYPE.upper(), extdir), + "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=TRUE", + "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_{}={}".format( + BUILD_TYPE.upper(), extdir + ), ] - if self.compiler.compiler_type == 'msvc': + if self.compiler.compiler_type == "msvc": cmake_args += [ - '-DCMAKE_GENERATOR_PLATFORM={}'.format(plat), + "-DCMAKE_GENERATOR_PLATFORM={}".format(plat), ] else: cmake_args += [ - '-G', 'MinGW Makefiles', + "-G", + "MinGW Makefiles", ] - elif platform.system() == 'Linux': + elif platform.system() == "Linux": cmake_args += [ - '-DCMAKE_C_FLAGS=-fPIC', - '-DCMAKE_CXX_FLAGS=-fPIC', + "-DCMAKE_C_FLAGS=-fPIC", + "-DCMAKE_CXX_FLAGS=-fPIC", ] if not op.exists(tmpdir): os.makedirs(tmpdir) # Config and build the extension - cmd = ['cmake', ext.cmake_lists_dir] + cmake_args + cmd = ["cmake", ext.cmake_lists_dir] + cmake_args subprocess.check_call(cmd, cwd=tmpdir) - cmd = ['cmake', '--build', '.', '--config', BUILD_TYPE] + cmd = ["cmake", "--build", ".", "--config", BUILD_TYPE] subprocess.check_call(cmd, cwd=tmpdir) -if __name__ == '__main__': +if __name__ == "__main__": # See setup.cfg for package metadata setup( - ext_modules=[CMakeExtension('blend2d._capi')], - cmdclass={'build_ext': cmake_build_ext}, + ext_modules=[CMakeExtension("blend2d._capi")], + cmdclass={"build_ext": cmake_build_ext}, ) diff --git a/src/_capi.pxd b/src/_capi.pxd index a8d82e9..a3809b8 100644 --- a/src/_capi.pxd +++ b/src/_capi.pxd @@ -1,3 +1,4 @@ +#cython: language_level=3 # The MIT License (MIT) # # Copyright (c) 2019 John Wiggins @@ -28,8 +29,10 @@ from libcpp cimport bool cdef extern from "blend2d.h": ctypedef uint32_t BLResult + ctypedef uint32_t BLGlyphId ctypedef uintptr_t BLBitWord ctypedef uint32_t BLTag + ctypedef void BLUnknown ctypedef struct BLRange: size_t start size_t end @@ -112,40 +115,39 @@ cdef extern from "blend2d.h": BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTI BL_GEOMETRY_TYPE_ARRAY_VIEW_RECTD BL_GEOMETRY_TYPE_PATH - BL_GEOMETRY_TYPE_REGION cdef enum BLGradientType: BL_GRADIENT_TYPE_LINEAR BL_GRADIENT_TYPE_RADIAL - BL_GRADIENT_TYPE_CONICAL - - cdef enum BLImplType: - BL_IMPL_TYPE_ARRAY_I8 - BL_IMPL_TYPE_ARRAY_U8 - BL_IMPL_TYPE_ARRAY_I16 - BL_IMPL_TYPE_ARRAY_U16 - BL_IMPL_TYPE_ARRAY_I32 - BL_IMPL_TYPE_ARRAY_U32 - BL_IMPL_TYPE_ARRAY_I64 - BL_IMPL_TYPE_ARRAY_U64 - BL_IMPL_TYPE_ARRAY_F32 - BL_IMPL_TYPE_ARRAY_F64 - - cdef enum BLMatrix2DOp: - BL_MATRIX2D_OP_RESET - BL_MATRIX2D_OP_ASSIGN - BL_MATRIX2D_OP_TRANSLATE - BL_MATRIX2D_OP_SCALE - BL_MATRIX2D_OP_SKEW - BL_MATRIX2D_OP_ROTATE - BL_MATRIX2D_OP_ROTATE_PT - BL_MATRIX2D_OP_TRANSFORM - BL_MATRIX2D_OP_POST_TRANSLATE - BL_MATRIX2D_OP_POST_SCALE - BL_MATRIX2D_OP_POST_SKEW - BL_MATRIX2D_OP_POST_ROTATE - BL_MATRIX2D_OP_POST_ROTATE_PT - BL_MATRIX2D_OP_POST_TRANSFORM + BL_GRADIENT_TYPE_CONIC + + cdef enum BLObjectType: + BL_OBJECT_TYPE_ARRAY_INT8 + BL_OBJECT_TYPE_ARRAY_UINT8 + BL_OBJECT_TYPE_ARRAY_INT16 + BL_OBJECT_TYPE_ARRAY_UINT16 + BL_OBJECT_TYPE_ARRAY_INT32 + BL_OBJECT_TYPE_ARRAY_UINT32 + BL_OBJECT_TYPE_ARRAY_INT64 + BL_OBJECT_TYPE_ARRAY_UINT64 + BL_OBJECT_TYPE_ARRAY_FLOAT32 + BL_OBJECT_TYPE_ARRAY_FLOAT64 + + cdef enum BLTransformOp: + BL_TRANSFORM_OP_RESET + BL_TRANSFORM_OP_ASSIGN + BL_TRANSFORM_OP_TRANSLATE + BL_TRANSFORM_OP_SCALE + BL_TRANSFORM_OP_SKEW + BL_TRANSFORM_OP_ROTATE + BL_TRANSFORM_OP_ROTATE_PT + BL_TRANSFORM_OP_TRANSFORM + BL_TRANSFORM_OP_POST_TRANSLATE + BL_TRANSFORM_OP_POST_SCALE + BL_TRANSFORM_OP_POST_SKEW + BL_TRANSFORM_OP_POST_ROTATE + BL_TRANSFORM_OP_POST_ROTATE_PT + BL_TRANSFORM_OP_POST_TRANSFORM cdef enum BLStrokeCap: BL_STROKE_CAP_BUTT @@ -172,6 +174,12 @@ cdef extern from "blend2d.h": BL_TEXT_ENCODING_UTF32 BL_TEXT_ENCODING_LATIN1 + cdef enum BLDataAccessFlags: + BL_DATA_ACCESS_NO_FLAGS + BL_DATA_ACCESS_READ + BL_DATA_ACCESS_WRITE + BL_DATA_ACCESS_RW + ctypedef struct BLApproximationOptions: pass @@ -184,6 +192,9 @@ cdef extern from "blend2d.h": double x1 double y1 + ctypedef struct BLBitArrayCore: + pass + ctypedef struct BLBoxI: pass @@ -262,7 +273,7 @@ cdef extern from "blend2d.h": ctypedef struct BLImageData: pass - ctypedef struct BLImageScaleOptions: + ctypedef struct BLImageScaleFilter: pass ctypedef struct BLMatrix2D: @@ -299,9 +310,6 @@ cdef extern from "blend2d.h": int w int h - ctypedef struct BLRegionCore: - pass - ctypedef struct BLRgba: pass @@ -319,15 +327,14 @@ cdef extern from "blend2d.h": ctypedef struct BLTextMetrics: pass - - ctypedef void (* BLDestroyImplFunc)(void* impl, void* destroyData) + + ctypedef void (* BLDestroyExternalDataFunc)(void* impl, void* externalData, void* userData) ctypedef BLResult (* BLPathSinkFunc)(BLPathCore* path, const void* info, void* closure) # BLArray BLResult blArrayInit(BLArrayCore* self, uint32_t arrayTypeId) BLResult blArrayDestroy(BLArrayCore* self) BLResult blArrayReset(BLArrayCore* self) - BLResult blArrayCreateFromData(BLArrayCore* self, void* data, size_t size, size_t capacity, uint32_t dataAccessFlags, BLDestroyImplFunc destroyFunc, void* destroyData) size_t blArrayGetSize(const BLArrayCore* self) size_t blArrayGetCapacity(const BLArrayCore* self) const void* blArrayGetData(const BLArrayCore* self) @@ -386,10 +393,10 @@ cdef extern from "blend2d.h": BLResult blContextQueryProperty(const BLContextCore* self, uint32_t propertyId, void* valueOut) BLResult blContextSave(BLContextCore* self, BLContextCookie* cookie) BLResult blContextRestore(BLContextCore* self, const BLContextCookie* cookie) - BLResult blContextGetMetaMatrix(const BLContextCore* self, BLMatrix2D* m) - BLResult blContextGetUserMatrix(const BLContextCore* self, BLMatrix2D* m) + BLResult blContextGetMetaTransform(const BLContextCore* self, BLMatrix2D* m) + BLResult blContextGetUserTransform(const BLContextCore* self, BLMatrix2D* m) BLResult blContextUserToMeta(BLContextCore* self) - BLResult blContextMatrixOp(BLContextCore* self, uint32_t opType, const void* opData) + BLResult blContextApplyTransformOp(BLContextCore* self, uint32_t opType, const void* opData) BLResult blContextSetHint(BLContextCore* self, uint32_t hintType, uint32_t value) BLResult blContextSetHints(BLContextCore* self, const BLContextHints* hints) BLResult blContextSetFlattenMode(BLContextCore* self, uint32_t mode) @@ -399,15 +406,14 @@ cdef extern from "blend2d.h": BLResult blContextSetGlobalAlpha(BLContextCore* self, double alpha) BLResult blContextSetFillAlpha(BLContextCore* self, double alpha) BLResult blContextGetFillStyle(const BLContextCore* self, BLStyleCore* styleOut) - BLResult blContextSetFillStyle(BLContextCore* self, const BLStyleCore* style) + BLResult blContextSetFillStyle(BLContextCore* self, const BLUnknown* style) BLResult blContextSetFillStyleRgba(BLContextCore* self, const BLRgba* rgba) BLResult blContextSetFillStyleRgba32(BLContextCore* self, uint32_t rgba32) BLResult blContextSetFillStyleRgba64(BLContextCore* self, uint64_t rgba64) - BLResult blContextSetFillStyleObject(BLContextCore* self, const void* object) BLResult blContextSetFillRule(BLContextCore* self, uint32_t fillRule) BLResult blContextSetStrokeAlpha(BLContextCore* self, double alpha) BLResult blContextGetStrokeStyle(const BLContextCore* self, BLStyleCore* styleOut) - BLResult blContextSetStrokeStyle(BLContextCore* self, const BLStyleCore* style) + BLResult blContextSetStrokeStyle(BLContextCore* self, const BLUnknown* style) BLResult blContextSetStrokeStyleRgba(BLContextCore* self, const BLRgba* rgba) BLResult blContextSetStrokeStyleRgba32(BLContextCore* self, uint32_t rgba32) BLResult blContextSetStrokeStyleRgba64(BLContextCore* self, uint64_t rgba64) @@ -431,18 +437,18 @@ cdef extern from "blend2d.h": BLResult blContextFillAll(BLContextCore* self) BLResult blContextFillRectI(BLContextCore* self, const BLRectI* rect) BLResult blContextFillRectD(BLContextCore* self, const BLRect* rect) - BLResult blContextFillPathD(BLContextCore* self, const BLPathCore* path) + BLResult blContextFillPathD(BLContextCore* self, const BLPoint* origin, const BLPathCore* path) BLResult blContextFillGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) - BLResult blContextFillTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) - BLResult blContextFillTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) + BLResult blContextFillUtf8TextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) + BLResult blContextFillUtf8TextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size) BLResult blContextFillGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) BLResult blContextFillGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) BLResult blContextStrokeRectI(BLContextCore* self, const BLRectI* rect) BLResult blContextStrokeRectD(BLContextCore* self, const BLRect* rect) - BLResult blContextStrokePathD(BLContextCore* self, const BLPathCore* path) + BLResult blContextStrokePathD(BLContextCore* self, const BLPoint* origin, const BLPathCore* path) BLResult blContextStrokeGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) - BLResult blContextStrokeTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) - BLResult blContextStrokeTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) + BLResult blContextStrokeUtf8TextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) + BLResult blContextStrokeUtf8TextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size) BLResult blContextStrokeGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) BLResult blContextStrokeGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) BLResult blContextBlitImageI(BLContextCore* self, const BLPointI* pt, const BLImageCore* img, const BLRectI* imgArea) @@ -460,18 +466,19 @@ cdef extern from "blend2d.h": BLResult blFontCreateFromFace(BLFontCore* self, const BLFontFaceCore* face, float size) BLResult blFontShape(const BLFontCore* self, BLGlyphBufferCore* gb) BLResult blFontMapTextToGlyphs(const BLFontCore* self, BLGlyphBufferCore* gb, BLGlyphMappingState* stateOut) - BLResult blFontPositionGlyphs(const BLFontCore* self, BLGlyphBufferCore* gb, uint32_t positioningFlags) + BLResult blFontPositionGlyphs(const BLFontCore* self, BLGlyphBufferCore* gb) BLResult blFontApplyKerning(const BLFontCore* self, BLGlyphBufferCore* gb) - BLResult blFontApplyGSub(const BLFontCore* self, BLGlyphBufferCore* gb, size_t index, BLBitWord lookups) - BLResult blFontApplyGPos(const BLFontCore* self, BLGlyphBufferCore* gb, size_t index, BLBitWord lookups) - BLResult blFontGetMatrix(const BLFontCore* self, BLFontMatrix* out) + BLResult blFontApplyGSub(const BLFontCore* self, BLGlyphBufferCore* gb, const BLBitArrayCore* lookups) + BLResult blFontApplyGPos(const BLFontCore* self, BLGlyphBufferCore* gb, const BLBitArrayCore* lookups) BLResult blFontGetMetrics(const BLFontCore* self, BLFontMetrics* out) + BLResult blFontGetMatrix(const BLFontCore* self, BLFontMatrix* out) BLResult blFontGetDesignMetrics(const BLFontCore* self, BLFontDesignMetrics* out) BLResult blFontGetTextMetrics(const BLFontCore* self, BLGlyphBufferCore* gb, BLTextMetrics* out) BLResult blFontGetGlyphBounds(const BLFontCore* self, const uint32_t* glyphData, intptr_t glyphAdvance, BLBoxI* out, size_t count) BLResult blFontGetGlyphAdvances(const BLFontCore* self, const uint32_t* glyphData, intptr_t glyphAdvance, BLGlyphPlacement* out, size_t count) - BLResult blFontGetGlyphOutlines(const BLFontCore* self, uint32_t glyphId, const BLMatrix2D* userMatrix, BLPathCore* out, BLPathSinkFunc sink, void* closure) - BLResult blFontGetGlyphRunOutlines(const BLFontCore* self, const BLGlyphRun* glyphRun, const BLMatrix2D* userMatrix, BLPathCore* out, BLPathSinkFunc sink, void* closure) + BLResult blFontGetGlyphOutlines(const BLFontCore* self, BLGlyphId glyphId, const BLMatrix2D* userTransform, BLPathCore* out, BLPathSinkFunc sink, void* userData) + BLResult blFontGetGlyphRunOutlines(const BLFontCore* self, const BLGlyphRun* glyphRun, const BLMatrix2D* userTransform, BLPathCore* out, BLPathSinkFunc sink, void* userData) + # BLFontData BLResult blFontDataInit(BLFontDataCore* self) @@ -481,7 +488,7 @@ cdef extern from "blend2d.h": BLResult blFontDataAssignWeak(BLFontDataCore* self, const BLFontDataCore* other) BLResult blFontDataCreateFromFile(BLFontDataCore* self, const char* fileName, uint32_t readFlags) BLResult blFontDataCreateFromDataArray(BLFontDataCore* self, const BLArrayCore* dataArray) - BLResult blFontDataCreateFromData(BLFontDataCore* self, const void* data, size_t dataSize, BLDestroyImplFunc destroyFunc, void* destroyData) + BLResult blFontDataCreateFromData(BLFontDataCore* self, const void* data, size_t dataSize, BLDestroyExternalDataFunc destroyFunc, void* destroyData) bool blFontDataEquals(const BLFontDataCore* a, const BLFontDataCore* b) BLResult blFontDataListTags(const BLFontDataCore* self, uint32_t faceIndex, BLArrayCore* dst) size_t blFontDataQueryTables(const BLFontDataCore* self, uint32_t faceIndex, BLFontTable* dst, const BLTag* tags, size_t count) @@ -570,20 +577,20 @@ cdef extern from "blend2d.h": # BLImage BLResult blImageInit(BLImageCore* self) - BLResult blImageInitAs(BLImageCore* self, int w, int h, uint32_t format) - BLResult blImageInitAsFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) + BLResult blImageInitAs(BLImageCore* self, int w, int h, BLFormat format) + BLResult blImageInitAsFromData(BLImageCore* self, int w, int h, BLFormat format, void* pixelData, intptr_t stride, BLDataAccessFlags accessFlags, BLDestroyExternalDataFunc destroyFunc, void* userData) BLResult blImageDestroy(BLImageCore* self) BLResult blImageReset(BLImageCore* self) BLResult blImageAssignMove(BLImageCore* self, BLImageCore* other) BLResult blImageAssignWeak(BLImageCore* self, const BLImageCore* other) BLResult blImageAssignDeep(BLImageCore* self, const BLImageCore* other) - BLResult blImageCreate(BLImageCore* self, int w, int h, uint32_t format) - BLResult blImageCreateFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) + BLResult blImageCreate(BLImageCore* self, int w, int h, BLFormat format) + BLResult blImageCreateFromData(BLImageCore* self, int w, int h, BLFormat format, void* pixelData, intptr_t stride, BLDataAccessFlags accessFlags, BLDestroyExternalDataFunc destroyFunc, void* userData) BLResult blImageGetData(const BLImageCore* self, BLImageData* dataOut) BLResult blImageMakeMutable(BLImageCore* self, BLImageData* dataOut) - BLResult blImageConvert(BLImageCore* self, uint32_t format) + BLResult blImageConvert(BLImageCore* self, BLFormat format) bool blImageEquals(const BLImageCore* a, const BLImageCore* b) - BLResult blImageScale(BLImageCore* dst, const BLImageCore* src, const BLSizeI* size, uint32_t filter, const BLImageScaleOptions* options) + BLResult blImageScale(BLImageCore* dst, const BLImageCore* src, const BLSizeI* size, BLImageScaleFilter filter) # BLMatrix2D BLResult blMatrix2DSetIdentity(BLMatrix2D* self) @@ -670,35 +677,6 @@ cdef extern from "blend2d.h": BLResult blPixelConverterCreate(BLPixelConverterCore* self, const BLFormatInfo* dstInfo, const BLFormatInfo* srcInfo, uint32_t createFlags) BLResult blPixelConverterConvert(const BLPixelConverterCore* self, void* dstData, intptr_t dstStride, const void* srcData, intptr_t srcStride, uint32_t w, uint32_t h, const BLPixelConverterOptions* options) - # BLRegion - BLResult blRegionInit(BLRegionCore* self) - BLResult blRegionDestroy(BLRegionCore* self) - BLResult blRegionReset(BLRegionCore* self) - size_t blRegionGetSize(const BLRegionCore* self) - size_t blRegionGetCapacity(const BLRegionCore* self) - const BLBoxI* blRegionGetData(const BLRegionCore* self) - BLResult blRegionClear(BLRegionCore* self) - BLResult blRegionShrink(BLRegionCore* self) - BLResult blRegionReserve(BLRegionCore* self, size_t n) - BLResult blRegionAssignMove(BLRegionCore* self, BLRegionCore* other) - BLResult blRegionAssignWeak(BLRegionCore* self, const BLRegionCore* other) - BLResult blRegionAssignDeep(BLRegionCore* self, const BLRegionCore* other) - BLResult blRegionAssignBoxI(BLRegionCore* self, const BLBoxI* src) - BLResult blRegionAssignBoxIArray(BLRegionCore* self, const BLBoxI* data, size_t n) - BLResult blRegionAssignRectI(BLRegionCore* self, const BLRectI* rect) - BLResult blRegionAssignRectIArray(BLRegionCore* self, const BLRectI* data, size_t n) - BLResult blRegionCombine(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, uint32_t booleanOp) - BLResult blRegionCombineRB(BLRegionCore* self, const BLRegionCore* a, const BLBoxI* b, uint32_t booleanOp) - BLResult blRegionCombineBR(BLRegionCore* self, const BLBoxI* a, const BLRegionCore* b, uint32_t booleanOp) - BLResult blRegionCombineBB(BLRegionCore* self, const BLBoxI* a, const BLBoxI* b, uint32_t booleanOp) - BLResult blRegionTranslate(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt) - BLResult blRegionTranslateAndClip(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt, const BLBoxI* clipBox) - BLResult blRegionIntersectAndClip(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, const BLBoxI* clipBox) - bool blRegionEquals(const BLRegionCore* a, const BLRegionCore* b) - uint32_t blRegionGetType(const BLRegionCore* self) - uint32_t blRegionHitTest(const BLRegionCore* self, const BLPointI* pt) - uint32_t blRegionHitTestBoxI(const BLRegionCore* self, const BLBoxI* box) - # BLRuntime BLResult blRuntimeInit() BLResult blRuntimeShutdown() diff --git a/src/_capi.pyx b/src/_capi.pyx index 2edc533..d88ddb3 100644 --- a/src/_capi.pyx +++ b/src/_capi.pyx @@ -26,7 +26,7 @@ from libc.stdint cimport uint32_t cimport _capi -cdef void _destroy_array_data(void* impl, void* destroyData): +cdef void _destroy_array_data(void* impl, void* externalData, void* userData) noexcept: pass cdef uint32_t _get_rgba32_value(color): @@ -40,7 +40,7 @@ cdef uint32_t _get_rgba32_value(color): else: alpha = 255 - return (alpha << 24) | (r << 16) | (g << 8) | b + return (alpha << 24) | (b << 16) | (g << 8) | r cdef bytes _utf8_string(s): if type(s) is unicode: diff --git a/src/array.pxi b/src/array.pxi index 3d65ae4..6c09bb8 100644 --- a/src/array.pxi +++ b/src/array.pxi @@ -24,7 +24,7 @@ # BLResult blArrayInit(BLArrayCore* self, uint32_t arrayTypeId) # BLResult blArrayDestroy(BLArrayCore* self) # BLResult blArrayReset(BLArrayCore* self) -# BLResult blArrayCreateFromData(BLArrayCore* self, void* data, size_t size, size_t capacity, uint32_t dataAccessFlags, BLDestroyImplFunc destroyFunc, void* destroyData) +# BLResult blArrayCreateFromData(BLArrayCore* self, void* data, size_t size, size_t capacity, uint32_t dataAccessFlags, BLDestroyExternalDataFunc destroyFunc, void* destroyData) # size_t blArrayGetSize(const BLArrayCore* self) # size_t blArrayGetCapacity(const BLArrayCore* self) # const void* blArrayGetData(const BLArrayCore* self) @@ -71,16 +71,16 @@ from libc.stddef cimport size_t _DTYPE_MAP = { - 'i1': _capi.BL_IMPL_TYPE_ARRAY_I8, - 'u1': _capi.BL_IMPL_TYPE_ARRAY_U8, - 'i2': _capi.BL_IMPL_TYPE_ARRAY_I16, - 'u2': _capi.BL_IMPL_TYPE_ARRAY_U16, - 'i4': _capi.BL_IMPL_TYPE_ARRAY_I32, - 'u4': _capi.BL_IMPL_TYPE_ARRAY_U32, - 'i8': _capi.BL_IMPL_TYPE_ARRAY_I64, - 'u8': _capi.BL_IMPL_TYPE_ARRAY_U64, - 'f4': _capi.BL_IMPL_TYPE_ARRAY_F32, - 'f8': _capi.BL_IMPL_TYPE_ARRAY_F64, + 'i1': _capi.BL_OBJECT_TYPE_ARRAY_INT8, + 'u1': _capi.BL_OBJECT_TYPE_ARRAY_UINT8, + 'i2': _capi.BL_OBJECT_TYPE_ARRAY_INT16, + 'u2': _capi.BL_OBJECT_TYPE_ARRAY_UINT16, + 'i4': _capi.BL_OBJECT_TYPE_ARRAY_INT32, + 'u4': _capi.BL_OBJECT_TYPE_ARRAY_UINT32, + 'i8': _capi.BL_OBJECT_TYPE_ARRAY_INT64, + 'u8': _capi.BL_OBJECT_TYPE_ARRAY_UINT64, + 'f4': _capi.BL_OBJECT_TYPE_ARRAY_FLOAT32, + 'f8': _capi.BL_OBJECT_TYPE_ARRAY_FLOAT64, } cdef class Array: @@ -108,21 +108,21 @@ cdef class Array: self._initialized = True for i in range(n_items): - if _type == _capi.BL_IMPL_TYPE_ARRAY_I8 or _type == _capi.BL_IMPL_TYPE_ARRAY_U8: + if _type == _capi.BL_OBJECT_TYPE_ARRAY_INT8 or _type == _capi.BL_OBJECT_TYPE_ARRAY_UINT8: _capi.blArrayAppendU8(&self._self, array[i]) - elif _type == _capi.BL_IMPL_TYPE_ARRAY_I16 or _type == _capi.BL_IMPL_TYPE_ARRAY_U16: + elif _type == _capi.BL_OBJECT_TYPE_ARRAY_INT16 or _type == _capi.BL_OBJECT_TYPE_ARRAY_UINT16: _capi.blArrayAppendU16(&self._self, array[i]) - elif _type == _capi.BL_IMPL_TYPE_ARRAY_I32 or _type == _capi.BL_IMPL_TYPE_ARRAY_U32: + elif _type == _capi.BL_OBJECT_TYPE_ARRAY_INT32 or _type == _capi.BL_OBJECT_TYPE_ARRAY_UINT32: _capi.blArrayAppendU32(&self._self, array[i]) - elif _type == _capi.BL_IMPL_TYPE_ARRAY_I64 or _type == _capi.BL_IMPL_TYPE_ARRAY_U8: + elif _type == _capi.BL_OBJECT_TYPE_ARRAY_INT64 or _type == _capi.BL_OBJECT_TYPE_ARRAY_UINT8: _capi.blArrayAppendU64(&self._self, array[i]) - elif _type == _capi.BL_IMPL_TYPE_ARRAY_F32: + elif _type == _capi.BL_OBJECT_TYPE_ARRAY_FLOAT32: _capi.blArrayAppendF32(&self._self, array[i]) - elif _type == _capi.BL_IMPL_TYPE_ARRAY_F64: + elif _type == _capi.BL_OBJECT_TYPE_ARRAY_FLOAT64: _capi.blArrayAppendF64(&self._self, array[i]) def __dealloc__(self): if self._initialized: _capi.blArrayDestroy(&self._self) - self._initialized = False \ No newline at end of file + self._initialized = False diff --git a/src/context.pxi b/src/context.pxi index 1e693f3..830e3c9 100644 --- a/src/context.pxi +++ b/src/context.pxi @@ -36,10 +36,10 @@ # BLResult blContextQueryProperty(const BLContextCore* self, uint32_t propertyId, void* valueOut) # BLResult blContextSave(BLContextCore* self, BLContextCookie* cookie) # BLResult blContextRestore(BLContextCore* self, const BLContextCookie* cookie) -# BLResult blContextGetMetaMatrix(const BLContextCore* self, BLMatrix2D* m) -# BLResult blContextGetUserMatrix(const BLContextCore* self, BLMatrix2D* m) +# BLResult blContextGetMetaTransform(const BLContextCore* self, BLMatrix2D* m) +# BLResult blContextGetUserTransform(const BLContextCore* self, BLMatrix2D* m) # BLResult blContextUserToMeta(BLContextCore* self) -# BLResult blContextMatrixOp(BLContextCore* self, uint32_t opType, const void* opData) +# BLResult blContextApplyTransformOp(BLContextCore* self, uint32_t opType, const void* opData) # BLResult blContextSetHint(BLContextCore* self, uint32_t hintType, uint32_t value) # BLResult blContextSetHints(BLContextCore* self, const BLContextHints* hints) # BLResult blContextSetFlattenMode(BLContextCore* self, uint32_t mode) @@ -49,11 +49,10 @@ # BLResult blContextSetGlobalAlpha(BLContextCore* self, double alpha) # BLResult blContextSetFillAlpha(BLContextCore* self, double alpha) # BLResult blContextGetFillStyle(const BLContextCore* self, BLStyleCore* styleOut) -# BLResult blContextSetFillStyle(BLContextCore* self, const BLStyleCore* style) +# BLResult blContextSetFillStyle(BLContextCore* self, const BLUnknown* style) # BLResult blContextSetFillStyleRgba(BLContextCore* self, const BLRgba* rgba) # BLResult blContextSetFillStyleRgba32(BLContextCore* self, uint32_t rgba32) # BLResult blContextSetFillStyleRgba64(BLContextCore* self, uint64_t rgba64) -# BLResult blContextSetFillStyleObject(BLContextCore* self, const void* object) # BLResult blContextSetFillRule(BLContextCore* self, uint32_t fillRule) # BLResult blContextSetStrokeAlpha(BLContextCore* self, double alpha) # BLResult blContextGetStrokeStyle(const BLContextCore* self, BLStyleCore* styleOut) @@ -83,16 +82,16 @@ # BLResult blContextFillRectD(BLContextCore* self, const BLRect* rect) # BLResult blContextFillPathD(BLContextCore* self, const BLPathCore* path) # BLResult blContextFillGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) -# BLResult blContextFillTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) -# BLResult blContextFillTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) +# BLResult blContextFillUtf8TextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size) +# BLResult blContextFillUtf8TextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size) # BLResult blContextFillGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) # BLResult blContextFillGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) # BLResult blContextStrokeRectI(BLContextCore* self, const BLRectI* rect) # BLResult blContextStrokeRectD(BLContextCore* self, const BLRect* rect) -# BLResult blContextStrokePathD(BLContextCore* self, const BLPathCore* path) +# BLResult blContextStrokePathD(BLContextCore* self, const BLPoint* origin, const BLPathCore* path) # BLResult blContextStrokeGeometry(BLContextCore* self, uint32_t geometryType, const void* geometryData) -# BLResult blContextStrokeTextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) -# BLResult blContextStrokeTextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text, size_t size, uint32_t encoding) +# BLResult blContextStrokeUtf8TextI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const void* text) +# BLResult blContextStrokeUtf8TextD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const void* text) # BLResult blContextStrokeGlyphRunI(BLContextCore* self, const BLPointI* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) # BLResult blContextStrokeGlyphRunD(BLContextCore* self, const BLPoint* pt, const BLFontCore* font, const BLGlyphRun* glyphRun) # BLResult blContextBlitImageI(BLContextCore* self, const BLPointI* pt, const BLImageCore* img, const BLRectI* imgArea) @@ -160,14 +159,14 @@ cdef class Context: """reset_matrix() Resets to the identity transform. """ - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_RESET, NULL) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_RESET, NULL) def meta_matrix(self): """meta_matrix() Return the meta matrix """ cdef Matrix2D mat = Matrix2D() - _capi.blContextGetMetaMatrix(&self._self, &mat._self) + _capi.blContextGetMetaTransform(&self._self, &mat._self) return mat def user_matrix(self): @@ -175,7 +174,7 @@ cdef class Context: Return the user matrix """ cdef Matrix2D mat = Matrix2D() - _capi.blContextGetUserMatrix(&self._self, &mat._self) + _capi.blContextGetUserTransform(&self._self, &mat._self) return mat def user_to_meta(self): @@ -200,7 +199,7 @@ cdef class Context: :param y: The scale factor in Y """ cdef double *data = [x, y] - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_SCALE, data) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_SCALE, data) def rotate(self, double angle): """rotate(angle) @@ -208,7 +207,7 @@ cdef class Context: :param angle: The desired rotation in radians. """ - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_ROTATE, &angle) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_ROTATE, &angle) def skew(self, double x, double y): """skew(x, y) @@ -218,7 +217,7 @@ cdef class Context: :param y: The skew factor in Y """ cdef double *data = [x, y] - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_SKEW, data) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_SKEW, data) def translate(self, double x, double y): """translate(x, y) @@ -228,7 +227,7 @@ cdef class Context: :param y: The translation in Y """ cdef double *data = [x, y] - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_TRANSLATE, data) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_TRANSLATE, data) def transform(self, Matrix2D mat): """transform(matrix) @@ -236,7 +235,7 @@ cdef class Context: :param matrix: A Matrix2D instance """ - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_TRANSFORM, &mat._self) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_TRANSFORM, &mat._self) def post_transform(self, Matrix2D mat): """post_transform(matrix) @@ -244,7 +243,7 @@ cdef class Context: :param matrix: A Matrix2D instance """ - _capi.blContextMatrixOp(&self._self, _capi.BL_MATRIX2D_OP_POST_TRANSFORM, &mat._self) + _capi.blContextApplyTransformOp(&self._self, _capi.BL_TRANSFORM_OP_POST_TRANSFORM, &mat._self) def set_alpha(self, float alpha): _capi.blContextSetGlobalAlpha(&self._self, alpha) @@ -253,16 +252,16 @@ cdef class Context: _capi.blContextSetCompOp(&self._self, op) cdef _apply_gradient_fill(self, Gradient style): - _capi.blContextSetFillStyleObject(&self._self, &style._self) + _capi.blContextSetFillStyle(&self._self, &style._self) cdef _apply_gradient_stroke(self, Gradient style): - _capi.blContextSetStrokeStyleObject(&self._self, &style._self) + _capi.blContextSetStrokeStyle(&self._self, &style._self) cdef _apply_pattern_fill(self, Pattern style): - _capi.blContextSetFillStyleObject(&self._self, &style._self) + _capi.blContextSetFillStyle(&self._self, &style._self) cdef _apply_pattern_stroke(self, Pattern style): - _capi.blContextSetStrokeStyleObject(&self._self, &style._self) + _capi.blContextSetStrokeStyle(&self._self, &style._self) def set_fill_style(self, style): if isinstance(style, Gradient): @@ -309,12 +308,12 @@ cdef class Context: def set_stroke_width(self, float width): _capi.blContextSetStrokeWidth(&self._self, width) - def blit_image(self, position, Image img, Rect img_area): + def blit_image(self, origin, Image img, Rect img_area): cdef: _capi.BLPoint point _capi.BLRectI rect - point.x = position[0]; point.y = position[1] + point.x = origin[0]; point.y = origin[1] rect.x = img_area._self.x; rect.y = img_area._self.y rect.w = img_area._self.w; rect.h = img_area._self.h _capi.blContextBlitImageD(&self._self, &point, &img._self, &rect) @@ -333,39 +332,45 @@ cdef class Context: def fill_rect(self, Rect rect): _capi.blContextFillRectD(&self._self, &rect._self) - def fill_path(self, Path path): - _capi.blContextFillPathD(&self._self, &path._self) - - def fill_text(self, position, Font font, text): + def fill_path(self, origin, Path path): + cdef: + _capi.BLPoint point + + point.x = origin[0] + point.y = origin[1] + _capi.blContextFillPathD(&self._self, &point, &path._self) + + def fill_text(self, origin, Font font, text): cdef: bytes utf8_text = _utf8_string(text) char * c_text = utf8_text size_t size = len(utf8_text) _capi.BLPoint point - point.x = position[0] - point.y = position[1] - _capi.blContextFillTextD( - &self._self, &point, &font._self, - c_text, size, _capi.BL_TEXT_ENCODING_UTF8 - ) + point.x = origin[0] + point.y = origin[1] + _capi.blContextFillUtf8TextD(&self._self, &point, &font._self, c_text, size) def stroke_rect(self, Rect rect): _capi.blContextStrokeRectD(&self._self, &rect._self) - def stroke_path(self, Path path): - _capi.blContextStrokePathD(&self._self, &path._self) + def stroke_path(self, origin, Path path): + cdef: + _capi.BLPoint point + + point.x = origin[0] + point.y = origin[1] + _capi.blContextStrokePathD(&self._self, &point, &path._self) - def stroke_text(self, position, Font font, text): + def stroke_text(self, origin, Font font, text): cdef: bytes utf8_text = _utf8_string(text) char * c_text = utf8_text size_t size = len(utf8_text) _capi.BLPoint point - point.x = position[0] - point.y = position[1] - _capi.blContextStrokeTextD( + point.x = origin[0] + point.y = origin[1] + _capi.blContextStrokeUtf8TextD( &self._self, &point, &font._self, - c_text, size, _capi.BL_TEXT_ENCODING_UTF8 - ) + c_text, size) diff --git a/src/enums.pxi b/src/enums.pxi index 2e5a2d9..94a9f12 100644 --- a/src/enums.pxi +++ b/src/enums.pxi @@ -21,16 +21,16 @@ # SOFTWARE. cpdef enum ArrayType: - ARRAY_I8 = _capi.BL_IMPL_TYPE_ARRAY_I8 - ARRAY_U8 = _capi.BL_IMPL_TYPE_ARRAY_U8 - ARRAY_I16 = _capi.BL_IMPL_TYPE_ARRAY_I16 - ARRAY_U16 = _capi.BL_IMPL_TYPE_ARRAY_U16 - ARRAY_I32 = _capi.BL_IMPL_TYPE_ARRAY_I32 - ARRAY_U32 = _capi.BL_IMPL_TYPE_ARRAY_U32 - ARRAY_I64 = _capi.BL_IMPL_TYPE_ARRAY_I64 - ARRAY_U64 = _capi.BL_IMPL_TYPE_ARRAY_U64 - ARRAY_F32 = _capi.BL_IMPL_TYPE_ARRAY_F32 - ARRAY_F64 = _capi.BL_IMPL_TYPE_ARRAY_F64 + ARRAY_I8 = _capi.BL_OBJECT_TYPE_ARRAY_INT8 + ARRAY_U8 = _capi.BL_OBJECT_TYPE_ARRAY_UINT8 + ARRAY_I16 = _capi.BL_OBJECT_TYPE_ARRAY_INT16 + ARRAY_U16 = _capi.BL_OBJECT_TYPE_ARRAY_UINT16 + ARRAY_I32 = _capi.BL_OBJECT_TYPE_ARRAY_INT32 + ARRAY_U32 = _capi.BL_OBJECT_TYPE_ARRAY_UINT32 + ARRAY_I64 = _capi.BL_OBJECT_TYPE_ARRAY_INT64 + ARRAY_U64 = _capi.BL_OBJECT_TYPE_ARRAY_UINT64 + ARRAY_F32 = _capi.BL_OBJECT_TYPE_ARRAY_FLOAT32 + ARRAY_F64 = _capi.BL_OBJECT_TYPE_ARRAY_FLOAT64 cpdef enum CompOp: SRC_OVER = _capi.BL_COMP_OP_SRC_OVER diff --git a/src/font.pxi b/src/font.pxi index 8acf6c7..c4b8ca2 100644 --- a/src/font.pxi +++ b/src/font.pxi @@ -51,7 +51,7 @@ # BLResult blFontDataAssignWeak(BLFontDataCore* self, const BLFontDataCore* other) # BLResult blFontDataCreateFromFile(BLFontDataCore* self, const char* fileName, uint32_t readFlags) # BLResult blFontDataCreateFromDataArray(BLFontDataCore* self, const BLArrayCore* dataArray) -# BLResult blFontDataCreateFromData(BLFontDataCore* self, const void* data, size_t dataSize, BLDestroyImplFunc destroyFunc, void* destroyData) +# BLResult blFontDataCreateFromData(BLFontDataCore* self, const void* data, size_t dataSize, BLDestroyExternalDataFunc destroyFunc, void* destroyData) # bool blFontDataEquals(const BLFontDataCore* a, const BLFontDataCore* b) # BLResult blFontDataListTags(const BLFontDataCore* self, uint32_t faceIndex, BLArrayCore* dst) # size_t blFontDataQueryTables(const BLFontDataCore* self, uint32_t faceIndex, BLFontTable* dst, const BLTag* tags, size_t count) diff --git a/src/geometry.pxi b/src/geometry.pxi index 0e34958..d94136e 100644 --- a/src/geometry.pxi +++ b/src/geometry.pxi @@ -26,39 +26,11 @@ # BLResult blMatrix2DSetScaling(BLMatrix2D* self, double x, double y) # BLResult blMatrix2DSetSkewing(BLMatrix2D* self, double x, double y) # BLResult blMatrix2DSetRotation(BLMatrix2D* self, double angle, double cx, double cy) -# BLResult blMatrix2DApplyOp(BLMatrix2D* self, uint32_t opType, const void* opData) +# BLResult blMatrix2DApplyOp(BLMatrix2D* self, BLTransformOp opType, const void* opData) # BLResult blMatrix2DInvert(BLMatrix2D* dst, const BLMatrix2D* src) # uint32_t blMatrix2DGetType(const BLMatrix2D* self) # BLResult blMatrix2DMapPointDArray(const BLMatrix2D* self, BLPoint* dst, const BLPoint* src, size_t count) -# BLRegion -# BLResult blRegionInit(BLRegionCore* self) -# BLResult blRegionDestroy(BLRegionCore* self) -# BLResult blRegionReset(BLRegionCore* self) -# size_t blRegionGetSize(const BLRegionCore* self) -# size_t blRegionGetCapacity(const BLRegionCore* self) -# const BLBoxI* blRegionGetData(const BLRegionCore* self) -# BLResult blRegionClear(BLRegionCore* self) -# BLResult blRegionShrink(BLRegionCore* self) -# BLResult blRegionReserve(BLRegionCore* self, size_t n) -# BLResult blRegionAssignMove(BLRegionCore* self, BLRegionCore* other) -# BLResult blRegionAssignWeak(BLRegionCore* self, const BLRegionCore* other) -# BLResult blRegionAssignDeep(BLRegionCore* self, const BLRegionCore* other) -# BLResult blRegionAssignBoxI(BLRegionCore* self, const BLBoxI* src) -# BLResult blRegionAssignBoxIArray(BLRegionCore* self, const BLBoxI* data, size_t n) -# BLResult blRegionAssignRectI(BLRegionCore* self, const BLRectI* rect) -# BLResult blRegionAssignRectIArray(BLRegionCore* self, const BLRectI* data, size_t n) -# BLResult blRegionCombine(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, uint32_t booleanOp) -# BLResult blRegionCombineRB(BLRegionCore* self, const BLRegionCore* a, const BLBoxI* b, uint32_t booleanOp) -# BLResult blRegionCombineBR(BLRegionCore* self, const BLBoxI* a, const BLRegionCore* b, uint32_t booleanOp) -# BLResult blRegionCombineBB(BLRegionCore* self, const BLBoxI* a, const BLBoxI* b, uint32_t booleanOp) -# BLResult blRegionTranslate(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt) -# BLResult blRegionTranslateAndClip(BLRegionCore* self, const BLRegionCore* r, const BLPointI* pt, const BLBoxI* clipBox) -# BLResult blRegionIntersectAndClip(BLRegionCore* self, const BLRegionCore* a, const BLRegionCore* b, const BLBoxI* clipBox) -# bool blRegionEquals(const BLRegionCore* a, const BLRegionCore* b) -# uint32_t blRegionGetType(const BLRegionCore* self) -# uint32_t blRegionHitTest(const BLRegionCore* self, const BLPointI* pt) -# uint32_t blRegionHitTestBoxI(const BLRegionCore* self, const BLBoxI* box) cdef class Matrix2D: @@ -72,19 +44,19 @@ cdef class Matrix2D: data[0] = angle data[1] = cx data[2] = cy - _capi.blMatrix2DApplyOp(&self._self, _capi.BLMatrix2DOp.BL_MATRIX2D_OP_ROTATE_PT, data) + _capi.blMatrix2DApplyOp(&self._self, _capi.BLTransformOp.BL_TRANSFORM_OP_ROTATE_PT, data) def scale(self, double x, double y): cdef double data[2] data[0] = x data[1] = y - _capi.blMatrix2DApplyOp(&self._self, _capi.BLMatrix2DOp.BL_MATRIX2D_OP_SCALE, data) + _capi.blMatrix2DApplyOp(&self._self, _capi.BLTransformOp.BL_TRANSFORM_OP_SCALE, data) def translate(self, double x, double y): cdef double data[2] data[0] = x data[1] = y - _capi.blMatrix2DApplyOp(&self._self, _capi.BLMatrix2DOp.BL_MATRIX2D_OP_TRANSLATE, data) + _capi.blMatrix2DApplyOp(&self._self, _capi.BLTransformOp.BL_TRANSFORM_OP_TRANSLATE, data) cdef class Rect: @@ -105,13 +77,3 @@ cdef class RectI: self._self.y = y self._self.w = w self._self.h = h - - -cdef class Region: - cdef _capi.BLRegionCore _self - - def __cinit__(self): - _capi.blRegionInit(&self._self) - - def __dealloc__(self): - _capi.blRegionDestroy(&self._self) diff --git a/src/gradient.pxi b/src/gradient.pxi index 90c8e13..adc97cb 100644 --- a/src/gradient.pxi +++ b/src/gradient.pxi @@ -81,7 +81,7 @@ cdef class ConicalGradient(Gradient): values[2] = angle _capi.blGradientInit(&self._self) - _capi.blGradientSetType(&self._self, _capi.BLGradientType.BL_GRADIENT_TYPE_CONICAL) + _capi.blGradientSetType(&self._self, _capi.BLGradientType.BL_GRADIENT_TYPE_CONIC) _capi.blGradientSetValues(&self._self, 0, values, 3) diff --git a/src/image.pxi b/src/image.pxi index 2ac0b47..6bfccbd 100644 --- a/src/image.pxi +++ b/src/image.pxi @@ -22,20 +22,26 @@ # BLImage # BLResult blImageInit(BLImageCore* self) -# BLResult blImageInitAs(BLImageCore* self, int w, int h, uint32_t format) -# BLResult blImageInitAsFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) +# BLResult blImageInitMove(BLImageCore* self, BLImageCore* other) +# BLResult blImageInitWeak(BLImageCore* self, const BLImageCore* other) +# BLResult blImageInitAs(BLImageCore* self, int w, int h, BLFormat format) +# BLResult blImageInitAsFromData(BLImageCore* self, int w, int h, BLFormat format, void* pixelData, intptr_t stride, BLDataAccessFlags accessFlags, BLDestroyExternalDataFunc destroyFunc, void* userData) # BLResult blImageDestroy(BLImageCore* self) # BLResult blImageReset(BLImageCore* self) # BLResult blImageAssignMove(BLImageCore* self, BLImageCore* other) # BLResult blImageAssignWeak(BLImageCore* self, const BLImageCore* other) # BLResult blImageAssignDeep(BLImageCore* self, const BLImageCore* other) -# BLResult blImageCreate(BLImageCore* self, int w, int h, uint32_t format) -# BLResult blImageCreateFromData(BLImageCore* self, int w, int h, uint32_t format, void* pixelData, intptr_t stride, BLDestroyImplFunc destroyFunc, void* destroyData) +# BLResult blImageCreate(BLImageCore* self, int w, int h, BLFormat format) +# BLResult blImageCreateFromData(BLImageCore* self, int w, int h, BLFormat format, void* pixelData, intptr_t stride, BLDataAccessFlags accessFlags, BLDestroyExternalDataFunc destroyFunc, void* userData) # BLResult blImageGetData(const BLImageCore* self, BLImageData* dataOut) # BLResult blImageMakeMutable(BLImageCore* self, BLImageData* dataOut) -# BLResult blImageConvert(BLImageCore* self, uint32_t format) +# BLResult blImageConvert(BLImageCore* self, BLFormat format) # bool blImageEquals(const BLImageCore* a, const BLImageCore* b) -# BLResult blImageScale(BLImageCore* dst, const BLImageCore* src, const BLSizeI* size, uint32_t filter, const BLImageScaleOptions* options) +# BLResult blImageScale(BLImageCore* dst, const BLImageCore* src, const BLSizeI* size, BLImageScaleFilter filter) +# BLResult blImageReadFromFile(BLImageCore* self, const char* fileName, const BLArrayCore* codecs) +# BLResult blImageReadFromData(BLImageCore* self, const void* data, size_t size, const BLArrayCore* codecs) +# BLResult blImageWriteToFile(const BLImageCore* self, const char* fileName, const BLImageCodecCore* codec) +# BLResult blImageWriteToData(const BLImageCore* self, BLArrayCore* dst, const BLImageCodecCore* codec) cdef class Image: cdef _capi.BLImageCore _self @@ -51,6 +57,7 @@ cdef class Image: _capi.BL_FORMAT_XRGB32, &array[0][0][0], array.strides[0], + _capi.BL_DATA_ACCESS_RW, _destroy_array_data, NULL ) self._array_ref = array diff --git a/src/path.pxi b/src/path.pxi index fb04fe3..98a3a72 100644 --- a/src/path.pxi +++ b/src/path.pxi @@ -86,6 +86,9 @@ cdef class Path: def clear(self): _capi.blPathClear(&self._self) + + def reset(self): + _capi.blPathReset(&self._self) def empty(self): return _capi.blPathGetSize(&self._self) == 0