refactor: move rendering primitives into model

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Maze Winther 2026-05-03 04:20:00 +02:00
parent ab982b888e
commit 02d957582b
17 changed files with 44 additions and 43 deletions

View File

@ -1,7 +1,7 @@
import type { Effect } from "@/model/decorations/effect";
import type { Mask } from "@/model/decorations/mask";
import type { ParamValues } from "@/model/decorations/param-values";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { BaseTimelineElement } from "./base";
export interface GraphicElement extends BaseTimelineElement {

View File

@ -1,6 +1,6 @@
import type { Effect } from "@/model/decorations/effect";
import type { Mask } from "@/model/decorations/mask";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { BaseTimelineElement } from "./base";
export interface ImageElement extends BaseTimelineElement {

View File

@ -5,7 +5,7 @@ import type { ImageElement } from "./image";
import type { StickerElement } from "./sticker";
import type { TextElement } from "./text";
import type { VideoElement } from "./video";
import type { Transform } from "@/rendering";
import type { Transform } from "@/model/rendering";
export * from "./audio";
export * from "./base";

View File

@ -1,5 +1,5 @@
import type { Effect } from "@/model/decorations/effect";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { BaseTimelineElement } from "./base";
export interface StickerElement extends BaseTimelineElement {

View File

@ -1,5 +1,5 @@
import type { Effect } from "@/model/decorations/effect";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { BaseTimelineElement } from "./base";
export interface TextBackground {

View File

@ -1,6 +1,6 @@
import type { Effect } from "@/model/decorations/effect";
import type { Mask } from "@/model/decorations/mask";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { BaseTimelineElement, RetimeConfig } from "./base";
export interface VideoElement extends BaseTimelineElement {

View File

@ -3,6 +3,7 @@ export * from "./decorations";
export * from "./element-ref";
export * from "./elements";
export * from "./ids";
export * from "./rendering";
export * from "./scene";
export * from "./time";
export * from "./track";

View File

@ -1,28 +1,28 @@
export interface Transform {
scaleX: number;
scaleY: number;
position: {
x: number;
y: number;
};
rotate: number;
}
export type BlendMode =
| "normal"
| "darken"
| "multiply"
| "color-burn"
| "lighten"
| "screen"
| "plus-lighter"
| "color-dodge"
| "overlay"
| "soft-light"
| "hard-light"
| "difference"
| "exclusion"
| "hue"
| "saturation"
| "color"
| "luminosity";
export interface Transform {
scaleX: number;
scaleY: number;
position: {
x: number;
y: number;
};
rotate: number;
}
export type BlendMode =
| "normal"
| "darken"
| "multiply"
| "color-burn"
| "lighten"
| "screen"
| "plus-lighter"
| "color-dodge"
| "overlay"
| "soft-light"
| "hard-light"
| "difference"
| "exclusion"
| "hue"
| "saturation"
| "color"
| "luminosity";

View File

@ -18,7 +18,7 @@ import {
type PreviewSnapLine,
} from "@/preview/preview-snap";
import type { TCanvasSize } from "@/project/types";
import type { Transform } from "@/rendering";
import type { Transform } from "@/model/rendering";
import { isVisualElement } from "@/timeline/element-utils";
import type { ElementRef, SceneTracks, TextElement, TimelineElement, TimelineTrack, VisualElement } from "@/model";

View File

@ -23,7 +23,7 @@ import {
setChannel,
} from "@/animation";
import type { ElementAnimations } from "@/model/decorations/animations";
import type { Transform } from "@/rendering";
import type { Transform } from "@/model/rendering";
import { resolveTransformAtTime } from "@/rendering/animation-values";
import type { ElementRef, SceneTracks, TimelineElement, VisualElement } from "@/model";

View File

@ -1,6 +1,6 @@
import type { ElementAnimations } from "@/model/decorations/animations";
import { resolveAnimationPathValueAtTime } from "@/animation";
import type { Transform } from "./index";
import type { Transform } from "@/model/rendering";
export function resolveTransformAtTime({
baseTransform,

View File

@ -19,7 +19,7 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import type { BlendMode } from "@/rendering";
import type { BlendMode } from "@/model/rendering";
import type { ElementType } from "@/model";
import type { ElementAnimations } from "@/model/decorations/animations";
import { HugeiconsIcon } from "@hugeicons/react";

View File

@ -1,4 +1,4 @@
import type { BlendMode } from "@/rendering";
import type { BlendMode } from "@/model/rendering";
import type { EffectPass } from "@/model/decorations/effect";
export type FrameDescriptor = {

View File

@ -1,7 +1,7 @@
import { BaseNode } from "./base-node";
import type { TextElement } from "@/model";
import type { EffectPass } from "@/model/decorations/effect";
import type { Transform } from "@/rendering";
import type { Transform } from "@/model/rendering";
import { drawMeasuredTextLayout } from "@/text/primitives";
import type { MeasuredTextElement } from "@/text/measure-element";

View File

@ -1,7 +1,7 @@
import { BaseNode } from "./base-node";
import type { Effect, EffectPass } from "@/model/decorations/effect";
import type { Mask } from "@/model/decorations/mask";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { RetimeConfig, VisualElement } from "@/model";
export interface VisualNodeParams {

View File

@ -1,6 +1,6 @@
import { DEFAULT_NEW_ELEMENT_DURATION } from "@/timeline/creation";
import type { TTimelineViewState } from "@/project/types";
import type { BlendMode, Transform } from "@/rendering";
import type { BlendMode, Transform } from "@/model/rendering";
import type { TextElement } from "@/model";
const defaultTransform: Transform = {

View File

@ -13,7 +13,7 @@ import {
type VideoElement,
type VideoTrack,
} from "@/model";
import type { Transform } from "@/rendering";
import type { Transform } from "@/model/rendering";
import { resolveTrackPlacement } from "@/timeline/placement";
function buildTransform(): Transform {