chore: formatting

This commit is contained in:
Maze Winther 2026-04-22 02:05:41 +02:00
parent 75eebf52bc
commit a709af0059
7 changed files with 54 additions and 37 deletions

View File

@ -1,16 +1,16 @@
export function createOffscreenCanvas({
width,
height,
}: {
width: number;
height: number;
}): OffscreenCanvas | HTMLCanvasElement {
try {
return new OffscreenCanvas(width, height);
} catch {
const canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
return canvas;
}
}
export function createOffscreenCanvas({
width,
height,
}: {
width: number;
height: number;
}): OffscreenCanvas | HTMLCanvasElement {
try {
return new OffscreenCanvas(width, height);
} catch {
const canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
return canvas;
}
}

View File

@ -6,7 +6,10 @@ import { createOffscreenCanvas } from "../canvas-utils";
import { BlurBackgroundNode } from "../nodes/blur-background-node";
import { ColorNode } from "../nodes/color-node";
import { EffectLayerNode } from "../nodes/effect-layer-node";
import { GraphicNode, type ResolvedGraphicNodeState } from "../nodes/graphic-node";
import {
GraphicNode,
type ResolvedGraphicNodeState,
} from "../nodes/graphic-node";
import { ImageNode } from "../nodes/image-node";
import { RootNode } from "../nodes/root-node";
import { StickerNode } from "../nodes/sticker-node";
@ -367,7 +370,9 @@ function computeVisualTransform({
};
}
function fullCanvasTransform(renderer: CanvasRenderer): QuadTransformDescriptor {
function fullCanvasTransform(
renderer: CanvasRenderer,
): QuadTransformDescriptor {
return {
centerX: renderer.width / 2,
centerY: renderer.height / 2,
@ -425,7 +430,8 @@ function buildMaskArtifacts({
const shouldRenderMaskDirectly =
canRenderMaskDirectly &&
(!definition.renderer.buildPath ||
(mask.params.feather > 0 && definition.renderer.renderMaskHandlesFeather));
(mask.params.feather > 0 &&
definition.renderer.renderMaskHandlesFeather));
if (shouldRenderMaskDirectly && definition.renderer.renderMask) {
definition.renderer.renderMask({
resolvedParams: mask.params,
@ -437,11 +443,12 @@ function buildMaskArtifacts({
if (definition.renderer.renderMaskHandlesFeather) {
feather = 0;
}
strokePath = definition.renderer.buildStrokePath?.({
resolvedParams: mask.params,
width: transform.width,
height: transform.height,
}) ?? null;
strokePath =
definition.renderer.buildStrokePath?.({
resolvedParams: mask.params,
width: transform.width,
height: transform.height,
}) ?? null;
} else {
if (!definition.renderer.buildPath) {
return { mask: null, strokeLayer: null };
@ -487,7 +494,10 @@ function buildMaskArtifacts({
});
let strokeLayer: FrameItemDescriptor | null = null;
if (mask.params.strokeWidth > 0 && (strokePath || definition.renderer.renderStroke)) {
if (
mask.params.strokeWidth > 0 &&
(strokePath || definition.renderer.renderStroke)
) {
const strokeCanvas = createOffscreenCanvas({
width: Math.round(transform.width),
height: Math.round(transform.height),
@ -580,4 +590,3 @@ function drawTransformedCanvas({
ctx.drawImage(source, x, y, transform.width, transform.height);
ctx.restore();
}

View File

@ -42,7 +42,11 @@ export function loadStickerSource({
image.src = url;
});
return { source: image, width: image.naturalWidth, height: image.naturalHeight };
return {
source: image,
width: image.naturalWidth,
height: image.naturalHeight,
};
})();
stickerSourceCache.set(stickerId, promise);

View File

@ -2,9 +2,7 @@ import { BaseNode } from "./base-node";
import type { TextElement } from "@/timeline";
import type { EffectPass } from "@/effects/types";
import type { Transform } from "@/rendering";
import {
drawMeasuredTextLayout,
} from "@/text/primitives";
import { drawMeasuredTextLayout } from "@/text/primitives";
import type { MeasuredTextElement } from "@/text/measure-element";
export type TextNodeParams = TextElement & {

View File

@ -25,8 +25,7 @@ export interface ResolvedVisualNodeState {
effectPasses: EffectPass[][];
}
export interface ResolvedVisualSourceNodeState
extends ResolvedVisualNodeState {
export interface ResolvedVisualSourceNodeState extends ResolvedVisualNodeState {
source: CanvasImageSource;
sourceWidth: number;
sourceHeight: number;

View File

@ -27,7 +27,10 @@ import {
type BackdropSource,
type ResolvedBlurBackgroundNodeState,
} from "./nodes/blur-background-node";
import { EffectLayerNode, type ResolvedEffectLayerNodeState } from "./nodes/effect-layer-node";
import {
EffectLayerNode,
type ResolvedEffectLayerNodeState,
} from "./nodes/effect-layer-node";
import {
GraphicNode,
type ResolvedGraphicNodeState,
@ -232,7 +235,10 @@ async function resolveImageNode({
node: ImageNode;
context: ResolveContext;
}): Promise<ResolvedVisualSourceNodeState | null> {
const source = await loadImageSource(node.params.url, node.params.maxSourceSize);
const source = await loadImageSource(
node.params.url,
node.params.maxSourceSize,
);
const visualState = resolveVisualState({
params: node.params,
context,

View File

@ -86,7 +86,9 @@ export class SceneExporter extends EventEmitter<SceneExporterEvents> {
}): Promise<ArrayBuffer | null> {
const fps = this.renderer.fps;
const fpsFloat = frameRateToFloat(fps);
const ticksPerFrame = Math.round(TICKS_PER_SECOND * fps.denominator / fps.numerator);
const ticksPerFrame = Math.round(
(TICKS_PER_SECOND * fps.denominator) / fps.numerator,
);
const frameCount = Math.floor(rootNode.duration / ticksPerFrame);
const outputFormat =
@ -106,8 +108,7 @@ export class SceneExporter extends EventEmitter<SceneExporterEvents> {
let audioSource: AudioBufferSource | null = null;
if (this.shouldIncludeAudio && this.audioBuffer) {
let audioCodec: "aac" | "opus" =
this.format === "webm" ? "opus" : "aac";
let audioCodec: "aac" | "opus" = this.format === "webm" ? "opus" : "aac";
if (audioCodec === "aac" && typeof AudioEncoder !== "undefined") {
const { supported } = await AudioEncoder.isConfigSupported({