diff --git a/.cargo/config.toml b/.cargo/config.toml index 7d318fa4..04c53e22 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,5 +1,5 @@ [target.x86_64-pc-windows-msvc] -rustflags = ["-C", "link-args=/NODEFAULTLIB:libcmt.lib"] +rustflags = ["-C", "link-args=/NODEFAULTLIB:libcmt.lib", "-C", "target-feature=+crt-static"] [target.aarch64-apple-darwin] rustflags = ["-C", "target-cpu=apple-a14"] diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index e8d4d2df..00439c78 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -19,13 +19,11 @@ on: jobs: build: - if: "!contains(github.event.head_commit.message, 'skip ci')" - strategy: fail-fast: false matrix: settings: - - host: macos-latest + - host: macos-14 target: 'x86_64-apple-darwin' setup: brew install nasm build: | @@ -56,7 +54,7 @@ jobs: export LIB_AOM_PKG_CONFIG_PATH=/usr/lib/pkgconfig && yarn build --target x86_64-unknown-linux-musl && strip skia.linux-x64-musl.node - - host: macos-latest + - host: macos-14 downloadTarget: 'aarch64-apple-darwin' target: 'aarch64-apple-darwin' build: | @@ -210,7 +208,7 @@ jobs: fail-fast: false matrix: settings: - - host: macos-latest + - host: macos-14 target: 'x86_64-apple-darwin' - host: windows-latest target: 'x86_64-pc-windows-msvc' diff --git a/.github/workflows/skia.yaml b/.github/workflows/skia.yaml index b381feb8..43c564f3 100644 --- a/.github/workflows/skia.yaml +++ b/.github/workflows/skia.yaml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, macos-14, windows-latest] name: stable - ${{ matrix.os }} - build skia runs-on: ${{ matrix.os }} @@ -23,6 +23,11 @@ jobs: with: submodules: true + - name: List llvm dir + if: matrix.os == 'windows-latest' + run: ls -R "C:\Program Files\LLVM" + shell: bash + - name: Setup node uses: actions/setup-node@v4 with: @@ -40,12 +45,13 @@ jobs: - name: Install tools on macOS run: brew install ninja - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-14' - name: Install tools on Windows if: matrix.os == 'windows-latest' run: | choco install llvm ninja -y + choco upgrade llvm pip install certifi - name: Login to GitHub Container Registry @@ -56,17 +62,20 @@ jobs: username: ${{ secrets.GH_CONTAINER_UNAME }} password: ${{ secrets.GH_TOKEN }} + - name: Sync deps on host + run: python ./tools/git-sync-deps + if: matrix.os == 'ubuntu-latest' + working-directory: skia + - name: Compile skia if: matrix.os == 'ubuntu-latest' run: | docker pull ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy docker tag ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy builder - docker run --user "$(id -u):$(id -g)" --rm -v $(pwd):/canvas -w /canvas builder node ./scripts/build-skia.js - env: - PYTHONHTTPSVERIFY: 0 + docker run --user "$(id -u):$(id -g)" -e PYTHONHTTPSVERIFY=0 -e SKIP_SYNC_SK_DEPS=0 --rm -v $(pwd):/canvas -w /canvas builder node ./scripts/build-skia.js - name: Compile skia - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-14' env: PYTHONHTTPSVERIFY: 0 run: | @@ -92,7 +101,7 @@ jobs: if: "!contains(github.event.head_commit.message, 'skip skia')" name: stable - apple-silicon - build skia - runs-on: macos-latest + runs-on: macos-14 steps: - uses: actions/checkout@v4 @@ -185,11 +194,20 @@ jobs: node-version: 18 cache: 'yarn' + - uses: actions/setup-python@v5 + with: + python-version: '3.x' + architecture: 'x64' + + - name: Sync deps on host + run: python ./tools/git-sync-deps + working-directory: skia + - name: Compile skia run: | docker pull ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy-aarch64 docker tag ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy-aarch64 builder - docker run --user "$(id -u):$(id -g)" --rm -v $(pwd):/canvas -w /canvas builder node ./scripts/build-skia.js --target=aarch64-unknown-linux-gnu + docker run --user "$(id -u):$(id -g)" -e SKIP_SYNC_SK_DEPS=0 --rm -v $(pwd):/canvas -w /canvas builder node ./scripts/build-skia.js --target=aarch64-unknown-linux-gnu - name: Install dependencies run: yarn install --immutable --mode=skip-build diff --git a/CHANGELOG.md b/CHANGELOG.md index 96b74239..7a4ba5c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,31 +1,22 @@ ## [0.1.44](https://github.com/Brooooooklyn/canvas/compare/v0.1.43...v0.1.44) (2023-08-22) - ### Bug Fixes -* file extensions in `loadFontsFromDir()` are no longer case-sensitive ([9342e33](https://github.com/Brooooooklyn/canvas/commit/9342e3386f575f3864c1bfa0036caa0956f1a914)) - - +- file extensions in `loadFontsFromDir()` are no longer case-sensitive ([9342e33](https://github.com/Brooooooklyn/canvas/commit/9342e3386f575f3864c1bfa0036caa0956f1a914)) ## [0.1.43](https://github.com/Brooooooklyn/canvas/compare/v0.1.42...v0.1.43) (2023-08-11) - - ## [0.1.42](https://github.com/Brooooooklyn/canvas/compare/v0.1.41...v0.1.42) (2023-08-08) - ### Bug Fixes -* add `ctx.canvas` property on svg context ([#697](https://github.com/Brooooooklyn/canvas/issues/697)) ([968e501](https://github.com/Brooooooklyn/canvas/commit/968e501e5d09d5b11fb02829b6ba402ffc3575d1)) -* **deps:** update rust crate infer to 0.15 ([376b19e](https://github.com/Brooooooklyn/canvas/commit/376b19ebc53640a89e1dad73b8281922675cf834)) -* url is string type ([#671](https://github.com/Brooooooklyn/canvas/issues/671)) ([31a8ff9](https://github.com/Brooooooklyn/canvas/commit/31a8ff9a5295697b965ba4e48a19a30dc0f0b1d6)) - +- add `ctx.canvas` property on svg context ([#697](https://github.com/Brooooooklyn/canvas/issues/697)) ([968e501](https://github.com/Brooooooklyn/canvas/commit/968e501e5d09d5b11fb02829b6ba402ffc3575d1)) +- **deps:** update rust crate infer to 0.15 ([376b19e](https://github.com/Brooooooklyn/canvas/commit/376b19ebc53640a89e1dad73b8281922675cf834)) +- url is string type ([#671](https://github.com/Brooooooklyn/canvas/issues/671)) ([31a8ff9](https://github.com/Brooooooklyn/canvas/commit/31a8ff9a5295697b965ba4e48a19a30dc0f0b1d6)) ### Features -* upgrade skia to m116 ([#702](https://github.com/Brooooooklyn/canvas/issues/702)) ([926c472](https://github.com/Brooooooklyn/canvas/commit/926c47249b77894eb96fd002755ad73e50e602d6)) - - +- upgrade skia to m116 ([#702](https://github.com/Brooooooklyn/canvas/issues/702)) ([926c472](https://github.com/Brooooooklyn/canvas/commit/926c47249b77894eb96fd002755ad73e50e602d6)) ## [0.1.41](https://github.com/Brooooooklyn/canvas/compare/v0.1.40...v0.1.41) (2023-05-22) diff --git a/Cargo.toml b/Cargo.toml index 7f0c5fca..121a8faf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ anyhow = "1" base64 = "0.21" cssparser = "0.29" infer = "0.15" -libavif = { version = "0.11", default-features = false, features = [ +libavif = { version = "0.12", default-features = false, features = [ "codec-aom", ] } napi = { version = "2", default-features = false, features = [ diff --git a/README-zh.md b/README-zh.md index f2453326..f422a334 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,7 +1,7 @@ # `skr canvas` ![CI](https://github.com/Brooooooklyn/canvas/workflows/CI/badge.svg) -![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm116-hotpink) +![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm118-hotpink) [![install size](https://packagephobia.com/badge?p=@napi-rs/canvas)](https://packagephobia.com/result?p=@napi-rs/canvas) [![Downloads](https://img.shields.io/npm/dm/@napi-rs/canvas.svg?sanitize=true)](https://npmcharts.com/compare/@napi-rs/canvas?minimal=true) diff --git a/README.md b/README.md index f6d0f8bb..32176769 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # `skr canvas` ![CI](https://github.com/Brooooooklyn/canvas/workflows/CI/badge.svg) -![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm116-hotpink) +![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm118-hotpink) [![install size](https://packagephobia.com/badge?p=@napi-rs/canvas)](https://packagephobia.com/result?p=@napi-rs/canvas) [![Downloads](https://img.shields.io/npm/dm/@napi-rs/canvas.svg?sanitize=true)](https://npmcharts.com/compare/@napi-rs/canvas?minimal=true) diff --git a/__test__/snapshots/draw-image-svg-noto-emoji.png b/__test__/snapshots/draw-image-svg-noto-emoji.png index 9d235b44..58f6ffe4 100644 Binary files a/__test__/snapshots/draw-image-svg-noto-emoji.png and b/__test__/snapshots/draw-image-svg-noto-emoji.png differ diff --git a/__test__/snapshots/svg-transparent-background.png b/__test__/snapshots/svg-transparent-background.png index 733ef28f..7f103641 100644 Binary files a/__test__/snapshots/svg-transparent-background.png and b/__test__/snapshots/svg-transparent-background.png differ diff --git a/__test__/snapshots/transform-with-radial-gradient-x.png b/__test__/snapshots/transform-with-radial-gradient-x.png index 39ba478d..247ea223 100644 Binary files a/__test__/snapshots/transform-with-radial-gradient-x.png and b/__test__/snapshots/transform-with-radial-gradient-x.png differ diff --git a/npm/android-arm64/package.json b/npm/android-arm64/package.json index 186f7ab5..7f71d200 100644 --- a/npm/android-arm64/package.json +++ b/npm/android-arm64/package.json @@ -34,4 +34,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/darwin-arm64/package.json b/npm/darwin-arm64/package.json index 549b14fd..17718302 100644 --- a/npm/darwin-arm64/package.json +++ b/npm/darwin-arm64/package.json @@ -34,4 +34,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/darwin-x64/package.json b/npm/darwin-x64/package.json index 07b3666f..e547584d 100644 --- a/npm/darwin-x64/package.json +++ b/npm/darwin-x64/package.json @@ -34,4 +34,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/linux-arm-gnueabihf/package.json b/npm/linux-arm-gnueabihf/package.json index 50a335cc..7bbb31ea 100644 --- a/npm/linux-arm-gnueabihf/package.json +++ b/npm/linux-arm-gnueabihf/package.json @@ -34,4 +34,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/linux-arm64-gnu/package.json b/npm/linux-arm64-gnu/package.json index b1a969b7..ba1082d6 100644 --- a/npm/linux-arm64-gnu/package.json +++ b/npm/linux-arm64-gnu/package.json @@ -41,4 +41,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/linux-arm64-musl/package.json b/npm/linux-arm64-musl/package.json index 0446f643..3a0403b0 100644 --- a/npm/linux-arm64-musl/package.json +++ b/npm/linux-arm64-musl/package.json @@ -41,4 +41,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/linux-x64-gnu/package.json b/npm/linux-x64-gnu/package.json index 23d1028c..1672d8d6 100644 --- a/npm/linux-x64-gnu/package.json +++ b/npm/linux-x64-gnu/package.json @@ -41,4 +41,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/linux-x64-musl/package.json b/npm/linux-x64-musl/package.json index 5e075940..edcd3b5b 100644 --- a/npm/linux-x64-musl/package.json +++ b/npm/linux-x64-musl/package.json @@ -41,4 +41,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/npm/win32-x64-msvc/package.json b/npm/win32-x64-msvc/package.json index 60564676..aced4c9d 100644 --- a/npm/win32-x64-msvc/package.json +++ b/npm/win32-x64-msvc/package.json @@ -35,4 +35,4 @@ "access": "public" }, "repository": "https://github.com/Brooooooklyn/canvas.git" -} \ No newline at end of file +} diff --git a/scripts/build-skia.js b/scripts/build-skia.js index b9ba1367..148e270d 100644 --- a/scripts/build-skia.js +++ b/scripts/build-skia.js @@ -1,7 +1,7 @@ -const { execSync } = require('child_process') -const { readFileSync, writeFileSync } = require('fs') -const path = require('path') -const { platform, arch } = require('os') +const { execSync } = require('node:child_process') +const { readFileSync, writeFileSync, existsSync, readdirSync } = require('node:fs') +const path = require('node:path') +const { platform, arch } = require('node:os') const PLATFORM_NAME = platform() const HOST_ARCH = arch() @@ -25,10 +25,12 @@ function exec(command) { }) } -exec('python ./tools/git-sync-deps') +if (process.env.SKIP_SYNC_SK_DEPS !== 'false' && process.env.SKIP_SYNC_SK_DEPS !== '0') { + exec('python ./tools/git-sync-deps') +} const CC = PLATFORM_NAME === 'win32' ? '\\"clang-cl\\"' : '"clang"' -const CXX = PLATFORM_NAME === 'win32' ? '\\"clang-cl\\"' : '"clang++"' +const CXX = PLATFORM_NAME === 'win32' ? '\\"clang-cpp\\"' : '"clang++"' let ExtraCflagsCC = '' let ExtraSkiaBuildFlag = '' let ExtraCflags @@ -51,7 +53,6 @@ const GN_ARGS = [ `skia_enable_tools=false`, `skia_enable_svg=true`, `skia_enable_skparagraph=true`, - `skia_enable_sktext=true`, `skia_pdf_subset_harfbuzz=true`, `skia_use_expat=true`, `skia_use_system_expat=false`, @@ -101,9 +102,13 @@ switch (PLATFORM_NAME) { '\\"-DSK_CODEC_DECODES_JPEG\\",' + '\\"-DSK_HAS_HEIF_LIBRARY\\",' + '\\"-DSK_SHAPER_HARFBUZZ_AVAILABLE\\"' - ExtraSkiaBuildFlag = 'clang_win=\\"C:\\\\Program Files\\\\LLVM\\"' + const clangVersion = findClangWinVersion() + if (clangVersion) { + console.info(`Found clang version: ${clangVersion}`) + ExtraSkiaBuildFlag = `clang_win_version=\\"${clangVersion}\\"` + } + GN_ARGS.push(`clang_win=\\"C:\\\\Program Files\\\\LLVM\\"`) GN_ARGS.push(`skia_enable_fontmgr_win=false`) - GN_ARGS.push(`skia_fontmgr_factory=\\":fontmgr_custom_directory_factory\\"`) break case 'linux': case 'darwin': @@ -126,11 +131,13 @@ switch (PLATFORM_NAME) { PLATFORM_NAME === 'linux' && !TARGET_TRIPLE && HOST_LIBC === 'glibc' && - (HOST_ARCH === 'x64' || HOST_ARCH === 'arm64') + HOST_ARCH === 'x64' ) { - ExtraCflagsCC += ',"-stdlib=libc++", "-static", "-I/usr/lib/llvm-16/include/c++/v1"' + ExtraCflagsCC += ',"-stdlib=libc++","-static","-I/usr/lib/llvm-16/include/c++/v1"' + } + if (PLATFORM_NAME === 'linux' && (!TARGET_TRIPLE || TARGET_TRIPLE.startsWith('x86_64'))) { + ExtraCflagsCC += ',"-Wno-psabi"' } - GN_ARGS.push(`skia_fontmgr_factory=":fontmgr_custom_directory_factory"`) break default: throw new TypeError(`Don't support ${PLATFORM_NAME} for now`) @@ -161,8 +168,7 @@ switch (TARGET_TRIPLE) { ExtraCflags = `"--target=aarch64-unknown-linux-musl", "-B/aarch64-linux-musl-cross/aarch64-linux-musl/bin", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}/aarch64-linux-musl", "-march=armv8-a"` ExtraCflagsCC += `, "--target=aarch64-unknown-linux-musl", "-B/aarch64-linux-musl-cross/aarch64-linux-musl/bin", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}/aarch64-linux-musl", "-march=armv8-a"` ExtraLdFlags = `"--target=aarch64-unknown-linux-musl", "-B/aarch64-linux-musl-cross/usr/aarch64-linux-musl/bin", "-L/aarch64-linux-musl-cross/usr/aarch64-linux-musl/lib", "-L/aarch64-linux-musl-cross/usr/lib/gcc/aarch64-linux-musl/${gccVersion}"` - ExtraAsmFlags = - '"--target=aarch64-unknown-linux-musl", "-march=armv8-a"' + ExtraAsmFlags = '"--target=aarch64-unknown-linux-musl", "-march=armv8-a"' GN_ARGS.push( `extra_ldflags=[${ExtraLdFlags}]`, `ar="aarch64-linux-musl-ar"`, @@ -268,3 +274,14 @@ console.time('Build Skia') exec(`ninja -C ${OUTPUT_PATH}`) console.timeEnd('Build Skia') + +function findClangWinVersion() { + const stdout = execSync('clang --version', { + encoding: 'utf8', + }) + const clangVersion = stdout.match(/clang version\s(\d+\.\d+\.\d+)/) + if (!clangVersion) { + return null + } + return clangVersion[1]?.split('.')?.at(0) +} diff --git a/scripts/release-skia-binary.js b/scripts/release-skia-binary.js index af486de9..80a9eec4 100644 --- a/scripts/release-skia-binary.js +++ b/scripts/release-skia-binary.js @@ -18,7 +18,7 @@ if (TARGET && TARGET.startsWith('--target=')) { TARGET_TRIPLE = TARGET.replace('--target=', '') } -const LIB = ['skia', 'skparagraph', 'skshaper', 'svg', 'sktext', 'skunicode'] +const LIB = ['skia', 'skparagraph', 'skshaper', 'svg', 'skunicode'] const ICU_DAT = 'icudtl.dat' const CLIENT = new Octokit({ @@ -119,6 +119,7 @@ async function download() { }) for (const lib of LIB) { const { downloadUrl, binary } = libPath(lib, PLATFORM_NAME, TARGET_TRIPLE) + console.info(`downloading ${downloadUrl} to ${binary}`) execSync(`curl -J -L -H "Accept: application/octet-stream" ${downloadUrl} -o ${binary}`, { stdio: 'inherit', }) diff --git a/skia b/skia index 7bfc95e8..98287499 160000 --- a/skia +++ b/skia @@ -1 +1 @@ -Subproject commit 7bfc95e8576e909bd0ecab9c9c6ff9280e2f473c +Subproject commit 982874994d829e7a9c1aa38f429a66cd32a2d0a2 diff --git a/skia-c/skia_c.cpp b/skia-c/skia_c.cpp index 49b126f6..69bf77f5 100644 --- a/skia-c/skia_c.cpp +++ b/skia-c/skia_c.cpp @@ -1389,14 +1389,14 @@ extern "C" } } - skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, int tile_mode, skiac_image_filter *c_image_filter) + skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, skiac_image_filter *c_image_filter) { auto chained_filter = sk_sp(IMAGE_FILTER_CAST); if (c_image_filter) { chained_filter->ref(); } - auto filter = SkImageFilters::Blur(sigma_x, sigma_y, (SkTileMode)tile_mode, chained_filter).release(); + auto filter = SkImageFilters::Blur(sigma_x, sigma_y, chained_filter).release(); if (filter) { return reinterpret_cast(filter); diff --git a/skia-c/skia_c.hpp b/skia-c/skia_c.hpp index 42179c0d..bd7d7fca 100644 --- a/skia-c/skia_c.hpp +++ b/skia-c/skia_c.hpp @@ -2,19 +2,16 @@ #define SKIA_CAPI_H #include +#include #include #include #include -#include -#include -#include #include #include #include #include #include #include -#include #include #include #include @@ -30,6 +27,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -134,9 +135,9 @@ struct skiac_font_collection sk_sp collection; sk_sp font_mgr; sk_sp assets; - skiac_font_collection() : collection(sk_make_sp()), font_mgr(SkFontMgr::RefDefault()), assets(sk_make_sp(font_mgr)) + skiac_font_collection() : collection(sk_make_sp()), font_mgr(SkFontMgr_New_Custom_Empty()), assets(sk_make_sp(font_mgr)) { - collection->setDefaultFontManager(SkFontMgr::RefDefault()); + collection->setDefaultFontManager(SkFontMgr_New_Custom_Empty()); collection->setAssetFontManager(font_mgr); collection->setDynamicFontManager(assets); collection->enableFontFallback(); @@ -457,7 +458,7 @@ extern "C" // ImageFilter skiac_image_filter *skiac_image_filter_make_drop_shadow_only(float dx, float dy, float sigma_x, float sigma_y, uint32_t color, skiac_image_filter *c_image_filter); skiac_image_filter *skiac_image_filter_make_drop_shadow(float dx, float dy, float sigma_x, float sigma_y, uint32_t color, skiac_image_filter *c_image_filter); - skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, int tile_mode, skiac_image_filter *c_image_filter); + skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, skiac_image_filter *c_image_filter); skiac_image_filter *skiac_image_filter_color_filter(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22, float opacity, skiac_image_filter *c_image_filter); skiac_image_filter *skiac_image_filter_from_argb(const uint8_t table_a[256], const uint8_t table_r[256], const uint8_t table_g[256], const uint8_t table_b[256], skiac_image_filter *c_image_filter); void skiac_image_filter_destroy(skiac_image_filter *c_image_filter); diff --git a/src/avif.rs b/src/avif.rs index 27735edf..f1118c2e 100644 --- a/src/avif.rs +++ b/src/avif.rs @@ -117,8 +117,8 @@ pub(crate) fn encode( let rgb = RgbPixels::new(width, height, avif_image).map_err(SkError::PixelsToRgb)?; let image = rgb.to_image(config.chroma_subsampling.into()); let mut encoder = libavif::Encoder::new(); - encoder.set_quantizer((63.0 * (1.0 - config.quality as f32 / 100.0)) as u8); - encoder.set_quantizer_alpha((63.0 * (1.0 - config.alpha_quality as f32 / 100.0)) as u8); + encoder.set_quality((63.0 * (1.0 - config.quality as f32 / 100.0)) as u8); + encoder.set_alpha_quality((63.0 * (1.0 - config.alpha_quality as f32 / 100.0)) as u8); encoder.set_speed(config.speed); encoder.set_max_threads(config.threads); encoder.encode(&image).map_err(SkError::EncodeAvifError) diff --git a/src/ctx.rs b/src/ctx.rs index 769ea291..9b89ba92 100644 --- a/src/ctx.rs +++ b/src/ctx.rs @@ -2132,9 +2132,12 @@ impl Task for ContextData { }, ContextOutputData::Avif(output) => unsafe { env - .create_buffer_with_borrowed_data(output.as_ptr(), output.len(), output, |data_ref, _| { - mem::drop(data_ref) - }) + .create_buffer_with_borrowed_data( + output.as_ptr().cast_mut(), + output.len(), + output, + |data_ref, _| mem::drop(data_ref), + ) .map(|b| b.into_raw()) }, } diff --git a/src/filter.rs b/src/filter.rs index 3370b213..daf5c4d6 100644 --- a/src/filter.rs +++ b/src/filter.rs @@ -12,7 +12,7 @@ use nom::{ }; use thiserror::Error; -use crate::sk::{degrees_to_radians, ImageFilter, TileMode}; +use crate::sk::{degrees_to_radians, ImageFilter}; #[derive(Error, Debug)] pub enum ParseFilterError<'a> { @@ -264,9 +264,7 @@ pub(crate) fn css_filters_to_image_filter(filters: Vec) -> Option { - ImageFilter::make_blur(blur, blur, TileMode::Clamp, Some(&image_filter)) - } + CssFilter::Blur(blur) => ImageFilter::make_blur(blur, blur, Some(&image_filter)), CssFilter::Brightness(brightness) => { let brightness = brightness.max(0.0); ImageFilter::make_image_filter( diff --git a/src/global_fonts.rs b/src/global_fonts.rs index ee519d5c..067e7d76 100644 --- a/src/global_fonts.rs +++ b/src/global_fonts.rs @@ -30,9 +30,9 @@ fn into_napi_error(err: PoisonError>) -> napi::Er napi::Error::new(napi::Status::GenericFailure, format!("{err}")) } -#[napi] +#[napi(js_name = "GlobalFonts")] #[allow(non_snake_case)] -pub mod GlobalFonts { +pub mod global_fonts { use napi::bindgen_prelude::*; use super::{get_font, into_napi_error, FONT_DIR, FONT_PATH}; diff --git a/src/lib.rs b/src/lib.rs index e3ea8344..f080cff2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -235,9 +235,12 @@ impl CanvasElement { }, ContextOutputData::Avif(output) => unsafe { env - .create_buffer_with_borrowed_data(output.as_ptr(), output.len(), output, |data, _| { - mem::drop(data) - }) + .create_buffer_with_borrowed_data( + output.as_ptr().cast_mut(), + output.len(), + output, + |data, _| mem::drop(data), + ) .map(|b| b.into_raw()) }, } @@ -257,7 +260,7 @@ impl CanvasElement { })?; unsafe { env - .create_buffer_with_borrowed_data(ptr, size, 0, noop_finalize) + .create_buffer_with_borrowed_data(ptr.cast_mut(), size, 0, noop_finalize) .map(|value| value.into_raw()) } } diff --git a/src/sk.rs b/src/sk.rs index 97ee4a62..d630a2f7 100644 --- a/src/sk.rs +++ b/src/sk.rs @@ -12,6 +12,7 @@ use crate::error::SkError; use crate::font::{FontStretch, FontStyle}; use crate::image::ImageData; +#[allow(non_camel_case_types)] pub mod ffi { use std::ffi::c_void; use std::os::raw::c_char; @@ -769,7 +770,6 @@ pub mod ffi { pub fn skiac_image_filter_make_blur( sigma_x: f32, sigma_y: f32, - tile_mode: i32, chained_filter: *mut skiac_image_filter, ) -> *mut skiac_image_filter; @@ -3321,14 +3321,12 @@ impl ImageFilter { pub fn make_blur( sigma_x: f32, sigma_y: f32, - tile_mode: TileMode, chained_filter: Option<&ImageFilter>, ) -> Option { let raw_ptr = unsafe { ffi::skiac_image_filter_make_blur( sigma_x, sigma_y, - tile_mode as i32, chained_filter.map(|c| c.0).unwrap_or(ptr::null_mut()), ) };