import { ColorRGBInstance, TextGradientStyleInstance, MultiTextInfoInstance, Vector } from '../../core/resource/type-helper/base/instcance.js'; import { AEStyleInstance } from '../../core/resource/type-helper/AEStyle/instance.js'; import { TTrack } from '../index.js'; import { Options } from '../../utils/EngineManager/baseEngine.js'; import Base, { BaseLayerProps } from '../BaseLayer/index.js'; import { TaskQueue } from '../../shared/pipline.js'; interface CommonStyle { color: { R: number; G: number; B: number; }; opacity: number; } declare const textPipline: TaskQueue; declare const initPipline: TaskQueue; interface StyleConfig { fill: Partial; shadow: Partial; stroke: Partial; background: Partial<{ showBoard: boolean; boardRound: number; color: { R: number; G: number; B: number; }; opacity: number; }>; } type AssetInfo = { text: Array; fontUrl: string; themeUrl: string; fontId?: string; themeId?: string; defaultFontListConfig?: Array<{ fontId: string; fontUrl: string; }>; }; interface Delta { shift: { y: number[]; }; } interface PostionWithPartial { scale?: Partial<{ x: number; y: number; z: number; }>; shift?: Partial<{ x: number; y: number; z: number; }>; anchor?: Partial<{ x: number; y: number; z: number; }>; angle?: Partial<{ x: number; y: number; z: number; }>; } type CaptionLayerProps = { uuid?: string; assetInfo: AssetInfo; srcRange?: Range; trimRange?: Range; destRange?: Range; tokenInfo?: Array[]; dstPos?: number; styleConfig?: StyleConfig; fontStyle?: IFontStyle; fontSize?: number; lineHeight?: number; position?: PostionWithPartial; delta?: Delta; defaultBottom?: number; isPrimal?: boolean; } & BaseLayerProps; type Range = { start: number; end: number; }; interface TokenStyleConfig { fill: CommonStyle & { fillType: number; gradient?: any; }; stroke: CommonStyle & { size: number; }; background: { showBoard: boolean; boardRound?: number; color: { R: number; G: number; B: number; }; opacity: number; }; } interface TokenRangeConfig { textOffset: { start: number; end: number; }; timeRange: { start: number; end: number; }; styleConfig: TokenStyleConfig; } type ColorType = { r: number; g: number; b: number; a: number; }; type IFontStyle = Partial<{ italic: boolean; blod: boolean; underline: boolean; align: 1 | 2 | 32; }>; interface IThemeStyle { fontFamily?: string; fontSize?: number; fontStyle?: IFontStyle; fill?: ColorType & { fillType: number; gradient?: any; }; stroke?: ColorType & { fSize: number; }; shadow?: ColorType & { angle: number; distance: number; size: number; spread: number; }; } declare class CaptionLayer extends Base { srcRange?: Range; trimRange?: Range; destRange?: Range; dstPos: number; parent: TTrack; preAssetInfo: AssetInfo | null; assetInfo: AssetInfo; styleConfig: StyleConfig | undefined; fontStyle: IFontStyle; fontSize?: number; lineHeight: number | undefined; position?: PostionWithPartial; delta?: Delta; defaultBottom: number; isPrimal: boolean; tokenInfo: Array[]; constructor(namespace: string, props: CaptionLayerProps); init(options?: Options): Promise; /** * 创建颜色 */ createColor: (config: { R: number; G: number; B: number; }) => ColorRGBInstance; /** * 创建渐变 */ createGradient: (config: { angle: number; scale: number; point: Array<{ position: number; color: { R: number; G: number; B: number; }; }>; }) => TextGradientStyleInstance; /** * 打开样式实例 */ getStyle: (path: string) => AEStyleInstance; /** * 设置默认位置 */ setDefaultPositon: (withRefresh?: boolean) => void; /** * 设置字体样式 */ changeFontStyle: (style: IFontStyle, withRefresh?: boolean) => void; /** * 设置字体大小 */ changeFontSize: (fontSize: number, withRefresh?: boolean) => void; /** * 初始化资源(下载&存储DB) */ prepareAssets: (assetsConfig: Array<{ assetId: string; url: string; type: "font" | "theme" | "zip"; }>, options?: Options) => Promise; /** * 初始化主题资源 */ prepareThemeAssets: (themePath: string) => Promise<{ fontFilePath: string; themeFilePath: string; } | null>; /** * 设置字体 */ changeFont: (config: { fontId: string; fontUrl: string; }, options?: Options, withRefresh?: boolean) => Promise; /** * 设置字体主题 */ changeTheme: (assetsInfo: { themeId: string; themeUrl: string; fontId?: string; fontUrl?: string; }, options?: Options, withRefresh?: boolean) => Promise; /** * 重置字体主题 */ resetTheme: (callback?: () => void, withRefresh?: boolean) => Promise; /** * 获取模板信息 */ getTemplete: (config: AssetInfo, options?: Options) => { info: MultiTextInfoInstance; measureResMax: { bubbleW: number; bubbleH: number; }; measureResDefault: { bubbleW: number; bubbleH: number; }; }; /** * 设置字幕位置 */ changeTransform: (position: PostionWithPartial, withRefresh?: boolean) => void; changeDelta: (delta: Delta, withRefresh?: boolean) => void; getThemeStyle: () => IThemeStyle; /** * 设置字幕样式 */ changeStyle: (style: Partial, withRefresh?: boolean) => void; /** * 获取当前字幕尺寸位置信息 */ getCurrentPosition(): { width: number; height: number; x: any; y: any; scaleX: any; scaleY: any; }; /** * 设置默认垂直位置 */ getDefaultPosition(measureResMax: { bubbleW: number; bubbleH: number; }): number; /** * 设置字幕媒体合成 */ setComp(config: AssetInfo, options?: Options): void; /** * 创建TextPlayInfo */ protected createTextPlayInfo(range: { textOffset: { start: number; end: number; }; timeRange: { start: number; end: number; }; }): any; /** * 创建Source Toekn */ createToken(range: TokenRangeConfig): any; /** * 设置分词 */ setToken(ranges: Array, withRefresh?: boolean): void; /** * 清除分词,不传递index会清除全部 */ clearToken(index?: number, withRefresh?: boolean): void; setLineHeight(lineHeight: number, withRefresh?: boolean): void; /** * 更新字幕 */ updateBubble(text: Array): void; setSrcRange(range: Range): void; setTrimRange(range: Range): void; setDestRange(range: Range): void; setDstPos(pos: number): void; /** * 设置默认字体 */ initDefaultFont(options?: Options): Vector; /** * 获取草稿 */ getLayerDraft(): CaptionLayerProps; duplicate(): CaptionLayer; } export { CaptionLayer, initPipline, textPipline }; export type { CaptionLayerProps, IFontStyle, IThemeStyle, TokenRangeConfig, TokenStyleConfig };