diff --git a/src/components/composition/ElementRenderer.tsx b/src/components/composition/ElementRenderer.tsx index 546372e..9fe12e3 100644 --- a/src/components/composition/ElementRenderer.tsx +++ b/src/components/composition/ElementRenderer.tsx @@ -3,6 +3,7 @@ import { Img, Video } from '../../engine/components'; import { TimelineElement, DesignMD } from '../../types'; import { ChromaKeyImage } from './ChromaKeyImage'; import { ChromaKeyVideo } from './ChromaKeyVideo'; +import { useVideoConfig } from '../../engine/player'; interface ElementRendererProps { element: TimelineElement; @@ -28,23 +29,34 @@ export const ElementRenderer: React.FC = ({ ckTolerance, ckSoftness, }) => { + const { width } = useVideoConfig(); + const scaleFactor = width / 1080; + if (el.type === 'text') { + const fontSize = (el.fontSize ?? 56) * scaleFactor; + const shadowOffset = (el.shadowOffset ?? 3) * scaleFactor; + const shadowBlur = (el.shadowBlur ?? 6) * scaleFactor; + const letterSpacing = el.letterSpacing ? el.letterSpacing * scaleFactor : undefined; + const strokeWidth = el.textStrokeWidth ? el.textStrokeWidth * scaleFactor : undefined; + const bgPadding = (el.textBackgroundPadding ?? 8) * scaleFactor; + const bgRadius = (el.textBackgroundRadius ?? 4) * scaleFactor; + return (
= ({ backgroundClip: 'text', } : el.textBackground ? { background: el.textBackground, - padding: `${el.textBackgroundPadding ?? 8}px ${(el.textBackgroundPadding ?? 8) * 2}px`, - borderRadius: `${el.textBackgroundRadius ?? 4}px`, + padding: `${bgPadding}px ${bgPadding * 2}px`, + borderRadius: `${bgRadius}px`, display: 'inline-block', } : {}), whiteSpace: 'pre-wrap',