ice-render 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,6 +26,14 @@ declare abstract class ICEComponent extends ICEEventTarget {
26
26
  parentNode: any;
27
27
  protected static instanceCounter: number;
28
28
  protected __dirty: boolean;
29
+ /**
30
+ * 本组件是否**已经真正绘制过一次**(`__renderCore` 走完了 doRender 才会置真)。
31
+ *
32
+ * 存在的意义:`dirty` 同时承担两个语义 —— 「本帧要重绘」和「几何缓存(`ICEPath.createPathObject`)
33
+ * 是否有效」。后者只在 doRender 里以 `if (this.dirty)` 的形式被消费,因此**从未渲染过的组件
34
+ * 一旦被置干净,它的路径缓存就永远不会被建立**,首次上屏是空的(见 `__applyDirty`)。
35
+ */
36
+ protected __everRendered: boolean;
29
37
  private __localBoxScratch;
30
38
  /** 本渲染通道的「本地 → 设备」CTM(主画布通道 = 视口·composed;离屏位图通道 = base·composed)。 */
31
39
  private __activeCtm;
@@ -335,6 +343,17 @@ declare abstract class ICEComponent extends ICEEventTarget {
335
343
  protected __afterStateMerge(sizeChanged: boolean): void;
336
344
  set dirty(flag: boolean);
337
345
  get dirty(): boolean;
346
+ /**
347
+ * 按 `markDirty` 语义更新脏标记。
348
+ *
349
+ * `markDirty = false` 的含义是「这次操作**不要**主动把组件标记为要重绘」(批量挂载时的性能优化),
350
+ * 而**不是**「把它强制置干净」:对从未绘制过的组件置干净会让几何缓存永不建立,首次上屏画不出
351
+ * 自身的路径(`ICEPath.doRender` 只在 dirty 时调用 `createPathObject`)。
352
+ *
353
+ * 例:`UIButton` 构造函数里 `addChild(this.label, false)` 会把自己置干净,导致按钮的圆角矩形
354
+ * 背景/边框在首帧是空路径 —— 页面上表现为「白底白字、完全看不见的按钮」。
355
+ */
356
+ protected __applyDirty(markDirty: boolean): void;
338
357
  set paramsDirty(flag: boolean);
339
358
  get paramsDirty(): boolean;
340
359
  /**
@@ -26,6 +26,14 @@ declare abstract class ICEComponent extends ICEEventTarget {
26
26
  parentNode: any;
27
27
  protected static instanceCounter: number;
28
28
  protected __dirty: boolean;
29
+ /**
30
+ * 本组件是否**已经真正绘制过一次**(`__renderCore` 走完了 doRender 才会置真)。
31
+ *
32
+ * 存在的意义:`dirty` 同时承担两个语义 —— 「本帧要重绘」和「几何缓存(`ICEPath.createPathObject`)
33
+ * 是否有效」。后者只在 doRender 里以 `if (this.dirty)` 的形式被消费,因此**从未渲染过的组件
34
+ * 一旦被置干净,它的路径缓存就永远不会被建立**,首次上屏是空的(见 `__applyDirty`)。
35
+ */
36
+ protected __everRendered: boolean;
29
37
  private __localBoxScratch;
30
38
  /** 本渲染通道的「本地 → 设备」CTM(主画布通道 = 视口·composed;离屏位图通道 = base·composed)。 */
31
39
  private __activeCtm;
@@ -335,6 +343,17 @@ declare abstract class ICEComponent extends ICEEventTarget {
335
343
  protected __afterStateMerge(sizeChanged: boolean): void;
336
344
  set dirty(flag: boolean);
337
345
  get dirty(): boolean;
346
+ /**
347
+ * 按 `markDirty` 语义更新脏标记。
348
+ *
349
+ * `markDirty = false` 的含义是「这次操作**不要**主动把组件标记为要重绘」(批量挂载时的性能优化),
350
+ * 而**不是**「把它强制置干净」:对从未绘制过的组件置干净会让几何缓存永不建立,首次上屏画不出
351
+ * 自身的路径(`ICEPath.doRender` 只在 dirty 时调用 `createPathObject`)。
352
+ *
353
+ * 例:`UIButton` 构造函数里 `addChild(this.label, false)` 会把自己置干净,导致按钮的圆角矩形
354
+ * 背景/边框在首帧是空路径 —— 页面上表现为「白底白字、完全看不见的按钮」。
355
+ */
356
+ protected __applyDirty(markDirty: boolean): void;
338
357
  set paramsDirty(flag: boolean);
339
358
  get paramsDirty(): boolean;
340
359
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "大漠穷秋",
3
3
  "name": "ice-render",
4
- "version": "1.0.7",
4
+ "version": "1.1.0",
5
5
  "description": "A canvas engine for interactive graphics.",
6
6
  "repository": {
7
7
  "type": "git",