import type { Fonts } from 'modern-font'; import type { Hex8Color } from 'modern-idoc'; import type { ImagePipelineResolver } from '../2d/element/imagePipeline'; import type { InputEvents, MainLoopEvents, MainLoopProperties, WebGLRenderer } from '../../core'; import type { Node } from './Node'; import type { Viewport } from './Viewport'; import { Color, Input, MainLoop } from '../../core'; import { RenderStack } from './RenderStack'; import { Timeline } from './Timeline'; import { Window } from './Window'; export interface SceneTreeEvents extends MainLoopEvents, InputEvents { processing: []; processed: []; rendering: []; rendered: []; nodeEnter: [node: Node]; nodeExit: [node: Node]; nodeProcessing: [node: Node]; nodeProcessed: [node: Node]; } export interface SceneTree { on: (event: K, listener: (...args: SceneTreeEvents[K]) => void) => this; once: (event: K, listener: (...args: SceneTreeEvents[K]) => void) => this; off: (event: K, listener: (...args: SceneTreeEvents[K]) => void) => this; emit: (event: K, ...args: SceneTreeEvents[K]) => this; } /** 语义色 token 调色板:token 名 → 各主题实际色(如 { surface: { light: '#fff', dark: '#1e1e1e' } })。 */ export type ThemeTokens = Record>; export interface SceneTreeProperties extends MainLoopProperties { msaa: boolean; fxaa: boolean; pixelate: boolean; roundPixels: boolean; backgroundColor: Hex8Color; /** 当前主题名(默认 'light')。元素颜色为 `@token` 时按此主题查 themeTokens 解析。 */ theme: string; /** token 调色板;由宿主注入,引擎自身不含具体颜色。 */ themeTokens: ThemeTokens; debug: boolean; processPaused: boolean; fonts: Fonts; timeline: Timeline; } export declare class SceneTree extends MainLoop { msaa: boolean; /** 最终合成时做 FXAA 后处理(零额外 pass / 显存,MSAA 之外的轻量抗锯齿路线)。 */ fxaa: boolean; /** 描边流动效果的高亮色(如主题主色);见 Element2DOutline.flow。 */ flowColor?: Hex8Color; /** 流动亮段的间距(路径像素,亮段约占其 30%);固定物理尺度,长短线亮段一致。 */ flowPeriod?: number; pixelate: boolean; roundPixels: boolean; backgroundColor?: Hex8Color; /** 语义色主题;变更时重解析全树 token 色。见 resolveThemeColor。 */ theme: string; themeTokens?: ThemeTokens; debug: boolean; processPaused: boolean; fonts: Fonts | undefined; readonly input: Input; readonly renderStack: RenderStack; readonly root: Window; timeline: Timeline; /** * 图片处理管线解析器(实例级,非全局)。图片填充带 `imagePipelines` 时, * 子节点经 `this.tree?.imagePipelineResolver` 取用,把图片烘焙到运行时纹理。 * 由宿主按引擎实例注入;未注入则不处理、沿用原图。 */ imagePipelineResolver?: ImagePipelineResolver; readonly nodeMap: Map; /** 已订阅 load 事件的 fonts 实例,用于在 fonts 切换 / 销毁时解绑。 */ protected _boundFonts?: Fonts; protected _textRemeasureScheduled: boolean; protected _onFontLoad: () => void; protected _backgroundColor: Color; protected _flowColor: Color; protected _flowColorArray?: Float32Array; protected _previousViewport?: Viewport; protected _currentViewport?: Viewport; getPreviousViewport(): Viewport | undefined; getCurrentViewport(): Viewport | undefined; setCurrentViewport(viewport: Viewport | undefined): void; getNodeById(id: string): T | undefined; /** * 语义色 token 解析:`@token` → 当前主题下的实际色。 * 非 token(普通颜色字符串/数值)原样返回;token 未在调色板命中时也原样返回(安全回退)。 */ resolveThemeColor(value: T): T | string; /** 主题 / 调色板变更后,重解析全树元素的 token 色(bg/border 即时重设,文字重排重栅格)。 */ protected _applyThemeToTree(): void; constructor(properties?: Partial); /** 订阅 fonts 的 load 事件,并在切换 fonts / 销毁时解绑,避免重复订阅与泄漏。 */ protected _bindFonts(next?: Fonts): void; /** * 字体到位后,重排树内全部文字(含表格 back 层单元格——它们也在 nodeMap)。 * 一个 tick 内多次 load 合并为一次。文字创建时字体可能尚未就绪、按 0 宽 glyph 测量挤成一坨, * 这里在字体可用时自动重新测量,使所有消费方无需各自轮询字体状态。 */ protected _scheduleTextRemeasure(): void; protected _updateProperty(key: string, value: any, oldValue: any): void; setProperties(properties?: Record): this; log(...args: any[]): void; protected _process(delta?: number): void; protected _render(renderer: WebGLRenderer): void; protected _renderScreen(renderer: WebGLRenderer): void; protected _destroy(): void; }