Skip to content

Commit f12c3fe

Browse files
committed
feat(backmoji): allow passing canvas element as a param
1 parent d94c9ef commit f12c3fe

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

packages/core/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export * from "./utils/shared";
88
export * from "./utils/math";
99

1010
export interface BackmojiOptions {
11+
canvas?: HTMLCanvasElement;
1112
width?: number;
1213
height?: number;
1314
degree?: number;
@@ -32,9 +33,8 @@ export interface RendererContext {
3233
export type Renderer = (context: RendererContext) => void;
3334

3435
export function backmoji(renderer: Renderer, options?: BackmojiOptions) {
35-
const { width = 300, height = 150, degree = 0, rowGap = 0, columnGap = 0 } = options || {};
36+
const { width = 300, height = 150, degree = 0, rowGap = 0, columnGap = 0, canvas = document.createElement("canvas") } = options || {};
3637

37-
const canvas = document.createElement("canvas");
3838
const ctx = canvas.getContext("2d")!;
3939
assert(ctx, "Current environment does not support 2d canvas rendering");
4040

packages/react/src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
import { type BackmojiOptions, type CreateImageRendererOptions, type CreateTextRendererOptions, type Renderer, backmoji, createImageRenderer, createTextRenderer } from "backmoji";
2-
import { useEffect, useMemo, useState } from "react";
2+
import { type RefObject, useEffect, useMemo, useState } from "react";
33

44
export type BackmojiResult = ReturnType<typeof backmoji>;
55

6-
export function useBackmoji(renderer: Renderer | null, options?: BackmojiOptions, deps?: any[]) {
6+
export function useBackmoji(renderer: Renderer | null, canvas: RefObject<HTMLCanvasElement>, options?: Omit<BackmojiOptions, "canvas">, deps?: any[]) {
77
const [backmojiResult, setBackmojiResult] = useState<Partial<BackmojiResult>>({});
88

99
useEffect(() => {
10-
if (!renderer) {
10+
if (!renderer || !canvas.current) {
1111
return;
1212
}
1313

14-
setBackmojiResult(backmoji(renderer, options));
14+
setBackmojiResult(backmoji(renderer, { ...options, canvas: canvas.current }));
1515

1616
return () => {
1717
if (backmojiResult?.canvas) {
1818
backmojiResult.canvas.remove();
1919
}
2020
};
21-
}, [renderer, ...(deps || [])]);
21+
}, [renderer, canvas, ...(deps || [])]);
2222

2323
return backmojiResult;
2424
}

0 commit comments

Comments
 (0)