diff --git a/docs/static/img/mask/blend-mode-mask.png b/docs/static/img/mask/blend-mode-mask.png new file mode 100644 index 0000000000..47cd28a665 Binary files /dev/null and b/docs/static/img/mask/blend-mode-mask.png differ diff --git a/example/src/Tests/assets/mask.png b/example/src/Tests/assets/mask.png new file mode 100644 index 0000000000..0a9ac0ecc0 Binary files /dev/null and b/example/src/Tests/assets/mask.png differ diff --git a/example/src/Tests/useAssets.ts b/example/src/Tests/useAssets.ts index 28f86e73ee..607cae163b 100644 --- a/example/src/Tests/useAssets.ts +++ b/example/src/Tests/useAssets.ts @@ -18,6 +18,7 @@ const NotoColorEmojiSrc = export const useAssets = () => { const [error, setError] = useState(null); const errorHandler = useCallback((e: Error) => setError(e), []); + const mask = useImage(require("./assets/mask.png"), errorHandler); const oslo = useImage(require("./assets/oslo.jpg"), errorHandler); const skiaLogoJpeg = useImage(SkiaLogoJpeg, errorHandler); const skiaLogoPng = useImage(SkiaLogo, errorHandler); @@ -39,7 +40,8 @@ export const useAssets = () => { !NotoColorEmoji || !NotoSansSCRegular || !skiaLogoJpeg || - !skiaLogoPng + !skiaLogoPng || + !mask ) { return null; } @@ -50,5 +52,6 @@ export const useAssets = () => { oslo, skiaLogoJpeg, skiaLogoPng, + mask, }; }; diff --git a/package/src/renderer/__tests__/e2e/Mask.spec.tsx b/package/src/renderer/__tests__/e2e/Mask.spec.tsx index b30d16dd70..2a486afcb6 100644 --- a/package/src/renderer/__tests__/e2e/Mask.spec.tsx +++ b/package/src/renderer/__tests__/e2e/Mask.spec.tsx @@ -1,11 +1,11 @@ import React from "react"; import { docPath, checkImage } from "../../../__tests__/setup"; -import { Group, Mask, Circle, Rect } from "../../components"; -import { surface } from "../setup"; +import { Group, Mask, Circle, Rect, Image, Paint } from "../../components"; +import { importSkia, surface, images } from "../setup"; describe("Mask Documentation Examples", () => { - it("Should draw an alpha mask", async () => { + it("should draw an alpha mask", async () => { const { width } = surface; const r = width / 2; const image = await surface.draw( @@ -24,7 +24,7 @@ describe("Mask Documentation Examples", () => { ); checkImage(image, docPath("mask/alpha-mask.png")); }); - it("Should draw an luminance mask", async () => { + it("should draw an luminance mask", async () => { const { width } = surface; const r = width / 2; const image = await surface.draw( @@ -44,4 +44,42 @@ describe("Mask Documentation Examples", () => { ); checkImage(image, docPath("mask/luminance-mask.png")); }); + it("should blend a mask", async () => { + const { width, height } = surface; + const { rect } = importSkia(); + const rct = rect(0, 0, width, height); + const { mask } = images; + const image = await surface.draw( + <> + + }> + + + + + } + > + + + + + ); + checkImage(image, docPath("mask/blend-mode-mask.png")); + }); }); diff --git a/package/src/renderer/__tests__/setup.tsx b/package/src/renderer/__tests__/setup.tsx index 5721bae5a9..6dd8374952 100644 --- a/package/src/renderer/__tests__/setup.tsx +++ b/package/src/renderer/__tests__/setup.tsx @@ -33,6 +33,7 @@ export let images: { oslo: SkImage; skiaLogoPng: SkImage; skiaLogoJpeg: SkImage; + mask: SkImage; }; export let fonts: { RobotoMedium: SkFont; @@ -62,8 +63,10 @@ beforeAll(async () => { const oslo = loadImage("skia/__tests__/assets/oslo.jpg"); const skiaLogoPng = loadImage("skia/__tests__/assets/skia_logo.png"); const skiaLogoJpeg = loadImage("skia/__tests__/assets/skia_logo_jpeg.jpg"); - images = { oslo, skiaLogoPng, skiaLogoJpeg }; + const mask = loadImage("skia/__tests__/assets/mask.png"); + images = { oslo, skiaLogoPng, skiaLogoJpeg, mask }; fonts = { RobotoMedium, NotoColorEmoji, NotoSansSCRegular }; + assets.set(mask, "mask"); assets.set(oslo, "oslo"); assets.set(RobotoMedium, "RobotoMedium"); assets.set(NotoColorEmoji, "NotoColorEmoji"); diff --git a/package/src/skia/__tests__/assets/mask.png b/package/src/skia/__tests__/assets/mask.png new file mode 100644 index 0000000000..0a9ac0ecc0 Binary files /dev/null and b/package/src/skia/__tests__/assets/mask.png differ