modern-canvas 0.4.6 → 0.4.8

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.
package/dist/index.cjs CHANGED
@@ -5898,6 +5898,17 @@ exports.Node = class Node extends CoreObject {
5898
5898
  this._parent.moveChild(sibling, this.getIndex(true) + 1);
5899
5899
  return this;
5900
5900
  }
5901
+ prepend(...nodes) {
5902
+ let _nodes;
5903
+ if (Array.isArray(nodes[0])) {
5904
+ _nodes = nodes[0];
5905
+ } else {
5906
+ _nodes = nodes;
5907
+ }
5908
+ _nodes.forEach((node) => {
5909
+ this.moveChild(node, 0);
5910
+ });
5911
+ }
5901
5912
  append(...nodes) {
5902
5913
  let _nodes;
5903
5914
  if (Array.isArray(nodes[0])) {
@@ -5909,6 +5920,35 @@ exports.Node = class Node extends CoreObject {
5909
5920
  this.appendChild(node);
5910
5921
  });
5911
5922
  }
5923
+ before(...nodes) {
5924
+ let _nodes;
5925
+ if (Array.isArray(nodes[0])) {
5926
+ _nodes = nodes[0];
5927
+ } else {
5928
+ _nodes = nodes;
5929
+ }
5930
+ _nodes.forEach((node) => {
5931
+ this._parent?.moveChild(node, this.getIndex(true));
5932
+ });
5933
+ }
5934
+ after(...nodes) {
5935
+ let _nodes;
5936
+ if (Array.isArray(nodes[0])) {
5937
+ _nodes = nodes[0];
5938
+ } else {
5939
+ _nodes = nodes;
5940
+ }
5941
+ _nodes.forEach((node) => {
5942
+ this._parent?.moveChild(node, this.getIndex(true) + 1);
5943
+ });
5944
+ }
5945
+ insertBefore(node, child) {
5946
+ if (!child.hasParent() || !this.is(child.parent)) {
5947
+ return node;
5948
+ }
5949
+ this.moveChild(node, child.getIndex(true));
5950
+ return node;
5951
+ }
5912
5952
  appendChild(node, internalMode = node.internalMode) {
5913
5953
  if (this.is(node) || node.hasParent()) {
5914
5954
  return node;
@@ -7256,7 +7296,7 @@ exports.GlitchEffect = class GlitchEffect extends exports.Effect {
7256
7296
  _texture;
7257
7297
  _sizes;
7258
7298
  _offsets;
7259
- _redraw = false;
7299
+ _needsRedraw = false;
7260
7300
  slices = 10;
7261
7301
  sampleSize = 512;
7262
7302
  offset = 100;
@@ -7294,8 +7334,8 @@ exports.GlitchEffect = class GlitchEffect extends exports.Effect {
7294
7334
  texture.requestUpload();
7295
7335
  }
7296
7336
  apply(renderer, source) {
7297
- if (!this._redraw) {
7298
- this._redraw = true;
7337
+ if (!this._needsRedraw) {
7338
+ this._needsRedraw = true;
7299
7339
  this.redraw();
7300
7340
  }
7301
7341
  const width = source.width;
@@ -8085,22 +8125,37 @@ exports.CanvasItem = class CanvasItem extends exports.TimelineNode {
8085
8125
  this.requestRepaint();
8086
8126
  }
8087
8127
  }
8128
+ _draw() {
8129
+ this.emit("draw");
8130
+ }
8131
+ _redraw() {
8132
+ this._tree?.log(this.name, "redrawing");
8133
+ this._draw();
8134
+ return this.context.toBatchables();
8135
+ }
8088
8136
  _relayout(batchables) {
8089
- return this._repaint(batchables);
8137
+ this._tree?.log(this.name, "relayouting");
8138
+ return batchables;
8090
8139
  }
8091
8140
  _repaint(batchables) {
8141
+ this._tree?.log(this.name, "repainting");
8092
8142
  return batchables.map((batchable) => {
8093
8143
  return {
8094
8144
  ...batchable,
8095
8145
  modulate: this._modulate.toArgb(this.globalOpacity, true),
8096
- // backgroundColor: this.style.getComputedBackgroundColor().abgr,
8097
- // colorMatrix: colorMatrix.toMatrix4().toArray(true),
8098
- // colorMatrixOffset: colorMatrix.toVector4().toArray(),
8099
8146
  blendMode: this.blendMode
8100
8147
  };
8101
8148
  });
8102
8149
  }
8103
- _draw() {
8150
+ _process(delta) {
8151
+ super._process(delta);
8152
+ const parent = this.getParent();
8153
+ if (this._parentGlobalVisible !== parent?.globalVisible) {
8154
+ this.requestUpdate();
8155
+ }
8156
+ if (this._parentGlobalOpacity !== parent?.globalOpacity) {
8157
+ this.requestUpdate();
8158
+ }
8104
8159
  }
8105
8160
  _update() {
8106
8161
  const parent = this.getParent();
@@ -8110,20 +8165,25 @@ exports.CanvasItem = class CanvasItem extends exports.TimelineNode {
8110
8165
  if (this._parentGlobalOpacity !== parent?.globalOpacity) {
8111
8166
  this._updateGlobalOpacity();
8112
8167
  }
8168
+ const redrawing = this._redrawing;
8169
+ let relayouting = this._relayouting;
8170
+ let repainting = this._repainting;
8113
8171
  let batchables;
8114
- if (this._redrawing) {
8115
- this.emit("draw");
8116
- this._draw();
8117
- this._originalBatchables = this.context.toBatchables();
8118
- batchables = this._relayout(this._originalBatchables);
8172
+ if (redrawing) {
8173
+ this._originalBatchables = this._redraw();
8174
+ relayouting = true;
8175
+ }
8176
+ if (relayouting) {
8177
+ this._layoutedBatchables = this._relayout(this._originalBatchables);
8178
+ repainting = true;
8179
+ }
8180
+ if (repainting) {
8181
+ batchables = this._repaint(this._layoutedBatchables);
8182
+ }
8183
+ if (redrawing) {
8119
8184
  if (this._resetContext) {
8120
8185
  this.context.reset();
8121
8186
  }
8122
- } else if (this._relayouting) {
8123
- this._layoutedBatchables = this._relayout(this._originalBatchables);
8124
- batchables = this._layoutedBatchables;
8125
- } else if (this._repainting) {
8126
- batchables = this._repaint(this._layoutedBatchables);
8127
8187
  }
8128
8188
  if (batchables) {
8129
8189
  this._batchables = batchables;
@@ -8287,6 +8347,11 @@ class SceneTree extends MainLoop {
8287
8347
  break;
8288
8348
  }
8289
8349
  }
8350
+ log(...args) {
8351
+ if (this.debug) {
8352
+ console.log(`[modern-canvas]`, ...args);
8353
+ }
8354
+ }
8290
8355
  _render(renderer, delta = 0) {
8291
8356
  this.timeline.addTime(delta);
8292
8357
  this.emit("processing");
@@ -8332,6 +8397,9 @@ __decorateClass$r([
8332
8397
  __decorateClass$r([
8333
8398
  property()
8334
8399
  ], SceneTree.prototype, "backgroundColor");
8400
+ __decorateClass$r([
8401
+ protectedProperty({ default: false })
8402
+ ], SceneTree.prototype, "debug");
8335
8403
 
8336
8404
  var __getOwnPropDesc$p = Object.getOwnPropertyDescriptor;
8337
8405
  var __decorateClass$q = (decorators, target, key, kind) => {
@@ -8667,21 +8735,19 @@ exports.Node2D = class Node2D extends exports.CanvasItem {
8667
8735
  _relayout(batchables) {
8668
8736
  this._updateTransform();
8669
8737
  this._updateGlobalTransform();
8670
- return super._relayout(
8671
- batchables.map((batchable) => {
8672
- return {
8673
- ...batchable,
8674
- vertices: this._transformVertices(batchable.vertices)
8675
- };
8676
- })
8677
- );
8738
+ return super._relayout(batchables).map((batchable) => {
8739
+ return {
8740
+ ...batchable,
8741
+ vertices: this._transformVertices(batchable.vertices)
8742
+ };
8743
+ });
8678
8744
  }
8679
8745
  _process(delta) {
8746
+ super._process(delta);
8680
8747
  const parent = this.getParent();
8681
- if (parent?.transform?.dirtyId !== this._parentTransformDirtyId) {
8748
+ if (this._parentTransformDirtyId !== parent?.globalTransform?.dirtyId) {
8682
8749
  this.requestRelayout();
8683
8750
  }
8684
- super._process(delta);
8685
8751
  }
8686
8752
  };
8687
8753
  exports.Node2D = __decorateClass$n([
@@ -8892,6 +8958,7 @@ exports.BaseElement2D = class BaseElement2D extends exports.Node2D {
8892
8958
  }
8893
8959
  }
8894
8960
  _draw() {
8961
+ super._draw();
8895
8962
  this._drawBackground();
8896
8963
  this._drawContent();
8897
8964
  this._drawBorder();
@@ -8947,14 +9014,12 @@ exports.BaseElement2D = class BaseElement2D extends exports.Node2D {
8947
9014
  }
8948
9015
  _repaint(batchables) {
8949
9016
  const colorMatrix = parseCSSFilter(this.style.filter);
8950
- return batchables.map((batchable) => {
9017
+ return super._repaint(batchables).map((batchable) => {
8951
9018
  return {
8952
9019
  ...batchable,
8953
9020
  backgroundColor: this.style.getComputedBackgroundColor().abgr,
8954
- modulate: this._modulate.toArgb(this.globalOpacity, true),
8955
9021
  colorMatrix: colorMatrix.toMatrix4().toArray(true),
8956
- colorMatrixOffset: colorMatrix.toVector4().toArray(),
8957
- blendMode: this.blendMode
9022
+ colorMatrixOffset: colorMatrix.toVector4().toArray()
8958
9023
  };
8959
9024
  });
8960
9025
  }
@@ -13049,6 +13114,7 @@ class Engine extends SceneTree {
13049
13114
  }) : void 0;
13050
13115
  constructor(options = {}) {
13051
13116
  const {
13117
+ debug = false,
13052
13118
  view,
13053
13119
  width,
13054
13120
  height,
@@ -13060,6 +13126,7 @@ class Engine extends SceneTree {
13060
13126
  ...glOptions
13061
13127
  } = options;
13062
13128
  super(timeline);
13129
+ this.debug = debug;
13063
13130
  this.renderer = new WebGLRenderer(view, {
13064
13131
  ...defaultOptions,
13065
13132
  ...glOptions
package/dist/index.d.cts CHANGED
@@ -1571,6 +1571,7 @@ interface SceneTree {
1571
1571
  declare class SceneTree extends MainLoop {
1572
1572
  paused: boolean;
1573
1573
  backgroundColor?: ColorValue;
1574
+ debug: boolean;
1574
1575
  readonly input: Input;
1575
1576
  readonly renderStack: RenderStack;
1576
1577
  readonly root: Viewport;
@@ -1581,6 +1582,7 @@ declare class SceneTree extends MainLoop {
1581
1582
  setCurrentViewport(viewport: Viewport | undefined): void;
1582
1583
  constructor(timeline?: Timeline);
1583
1584
  protected _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void;
1585
+ log(...args: any[]): void;
1584
1586
  protected _render(renderer: WebGLRenderer, delta?: number): this;
1585
1587
  protected _renderScreen(renderer: WebGLRenderer): void;
1586
1588
  free(): void;
@@ -1681,8 +1683,15 @@ declare class Node extends CoreObject {
1681
1683
  getNode<T extends Node>(path: string): T | undefined;
1682
1684
  removeNode(path: string): void;
1683
1685
  addSibling(sibling: Node): this;
1684
- append(nodes: Node[]): void;
1685
- append(...nodes: Node[]): void;
1686
+ prepend<T extends Node>(nodes: T[]): void;
1687
+ prepend<T extends Node>(...nodes: T[]): void;
1688
+ append<T extends Node>(nodes: T[]): void;
1689
+ append<T extends Node>(...nodes: T[]): void;
1690
+ before<T extends Node>(nodes: T[]): void;
1691
+ before<T extends Node>(...nodes: T[]): void;
1692
+ after<T extends Node>(nodes: T[]): void;
1693
+ after<T extends Node>(...nodes: T[]): void;
1694
+ insertBefore<T extends Node>(node: T, child: Node): T;
1686
1695
  appendChild<T extends Node>(node: T, internalMode?: InternalMode): T;
1687
1696
  moveChild(child: Node, toIndex: number, internalMode?: InternalMode): this;
1688
1697
  removeChild<T extends Node>(child: T): T;
@@ -1787,9 +1796,11 @@ declare class CanvasItem extends TimelineNode {
1787
1796
  requestRepaint(): void;
1788
1797
  protected _updateGlobalVisible(): void;
1789
1798
  protected _updateGlobalOpacity(): void;
1799
+ protected _draw(): void;
1800
+ protected _redraw(): CanvasBatchable[];
1790
1801
  protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
1791
1802
  protected _repaint(batchables: CanvasBatchable[]): CanvasBatchable[];
1792
- protected _draw(): void;
1803
+ protected _process(delta: number): void;
1793
1804
  protected _update(): void;
1794
1805
  protected _render(renderer: WebGLRenderer): void;
1795
1806
  }
@@ -2662,7 +2673,7 @@ declare class GlitchEffect extends Effect {
2662
2673
  protected _texture: Texture2D;
2663
2674
  protected _sizes: Float32Array;
2664
2675
  protected _offsets: Float32Array;
2665
- protected _redraw: boolean;
2676
+ protected _needsRedraw: boolean;
2666
2677
  slices: number;
2667
2678
  sampleSize: number;
2668
2679
  offset: number;
@@ -2979,6 +2990,7 @@ declare class CanvasItemEditor extends Control {
2979
2990
  }
2980
2991
 
2981
2992
  interface EngineOptions extends WebGLContextAttributes {
2993
+ debug?: boolean;
2982
2994
  view?: HTMLCanvasElement | WebGLRenderingContext | WebGL2RenderingContext;
2983
2995
  width?: number;
2984
2996
  height?: number;
package/dist/index.d.mts CHANGED
@@ -1571,6 +1571,7 @@ interface SceneTree {
1571
1571
  declare class SceneTree extends MainLoop {
1572
1572
  paused: boolean;
1573
1573
  backgroundColor?: ColorValue;
1574
+ debug: boolean;
1574
1575
  readonly input: Input;
1575
1576
  readonly renderStack: RenderStack;
1576
1577
  readonly root: Viewport;
@@ -1581,6 +1582,7 @@ declare class SceneTree extends MainLoop {
1581
1582
  setCurrentViewport(viewport: Viewport | undefined): void;
1582
1583
  constructor(timeline?: Timeline);
1583
1584
  protected _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void;
1585
+ log(...args: any[]): void;
1584
1586
  protected _render(renderer: WebGLRenderer, delta?: number): this;
1585
1587
  protected _renderScreen(renderer: WebGLRenderer): void;
1586
1588
  free(): void;
@@ -1681,8 +1683,15 @@ declare class Node extends CoreObject {
1681
1683
  getNode<T extends Node>(path: string): T | undefined;
1682
1684
  removeNode(path: string): void;
1683
1685
  addSibling(sibling: Node): this;
1684
- append(nodes: Node[]): void;
1685
- append(...nodes: Node[]): void;
1686
+ prepend<T extends Node>(nodes: T[]): void;
1687
+ prepend<T extends Node>(...nodes: T[]): void;
1688
+ append<T extends Node>(nodes: T[]): void;
1689
+ append<T extends Node>(...nodes: T[]): void;
1690
+ before<T extends Node>(nodes: T[]): void;
1691
+ before<T extends Node>(...nodes: T[]): void;
1692
+ after<T extends Node>(nodes: T[]): void;
1693
+ after<T extends Node>(...nodes: T[]): void;
1694
+ insertBefore<T extends Node>(node: T, child: Node): T;
1686
1695
  appendChild<T extends Node>(node: T, internalMode?: InternalMode): T;
1687
1696
  moveChild(child: Node, toIndex: number, internalMode?: InternalMode): this;
1688
1697
  removeChild<T extends Node>(child: T): T;
@@ -1787,9 +1796,11 @@ declare class CanvasItem extends TimelineNode {
1787
1796
  requestRepaint(): void;
1788
1797
  protected _updateGlobalVisible(): void;
1789
1798
  protected _updateGlobalOpacity(): void;
1799
+ protected _draw(): void;
1800
+ protected _redraw(): CanvasBatchable[];
1790
1801
  protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
1791
1802
  protected _repaint(batchables: CanvasBatchable[]): CanvasBatchable[];
1792
- protected _draw(): void;
1803
+ protected _process(delta: number): void;
1793
1804
  protected _update(): void;
1794
1805
  protected _render(renderer: WebGLRenderer): void;
1795
1806
  }
@@ -2662,7 +2673,7 @@ declare class GlitchEffect extends Effect {
2662
2673
  protected _texture: Texture2D;
2663
2674
  protected _sizes: Float32Array;
2664
2675
  protected _offsets: Float32Array;
2665
- protected _redraw: boolean;
2676
+ protected _needsRedraw: boolean;
2666
2677
  slices: number;
2667
2678
  sampleSize: number;
2668
2679
  offset: number;
@@ -2979,6 +2990,7 @@ declare class CanvasItemEditor extends Control {
2979
2990
  }
2980
2991
 
2981
2992
  interface EngineOptions extends WebGLContextAttributes {
2993
+ debug?: boolean;
2982
2994
  view?: HTMLCanvasElement | WebGLRenderingContext | WebGL2RenderingContext;
2983
2995
  width?: number;
2984
2996
  height?: number;
package/dist/index.d.ts CHANGED
@@ -1571,6 +1571,7 @@ interface SceneTree {
1571
1571
  declare class SceneTree extends MainLoop {
1572
1572
  paused: boolean;
1573
1573
  backgroundColor?: ColorValue;
1574
+ debug: boolean;
1574
1575
  readonly input: Input;
1575
1576
  readonly renderStack: RenderStack;
1576
1577
  readonly root: Viewport;
@@ -1581,6 +1582,7 @@ declare class SceneTree extends MainLoop {
1581
1582
  setCurrentViewport(viewport: Viewport | undefined): void;
1582
1583
  constructor(timeline?: Timeline);
1583
1584
  protected _updateProperty(key: PropertyKey, value: any, oldValue: any, declaration?: PropertyDeclaration): void;
1585
+ log(...args: any[]): void;
1584
1586
  protected _render(renderer: WebGLRenderer, delta?: number): this;
1585
1587
  protected _renderScreen(renderer: WebGLRenderer): void;
1586
1588
  free(): void;
@@ -1681,8 +1683,15 @@ declare class Node extends CoreObject {
1681
1683
  getNode<T extends Node>(path: string): T | undefined;
1682
1684
  removeNode(path: string): void;
1683
1685
  addSibling(sibling: Node): this;
1684
- append(nodes: Node[]): void;
1685
- append(...nodes: Node[]): void;
1686
+ prepend<T extends Node>(nodes: T[]): void;
1687
+ prepend<T extends Node>(...nodes: T[]): void;
1688
+ append<T extends Node>(nodes: T[]): void;
1689
+ append<T extends Node>(...nodes: T[]): void;
1690
+ before<T extends Node>(nodes: T[]): void;
1691
+ before<T extends Node>(...nodes: T[]): void;
1692
+ after<T extends Node>(nodes: T[]): void;
1693
+ after<T extends Node>(...nodes: T[]): void;
1694
+ insertBefore<T extends Node>(node: T, child: Node): T;
1686
1695
  appendChild<T extends Node>(node: T, internalMode?: InternalMode): T;
1687
1696
  moveChild(child: Node, toIndex: number, internalMode?: InternalMode): this;
1688
1697
  removeChild<T extends Node>(child: T): T;
@@ -1787,9 +1796,11 @@ declare class CanvasItem extends TimelineNode {
1787
1796
  requestRepaint(): void;
1788
1797
  protected _updateGlobalVisible(): void;
1789
1798
  protected _updateGlobalOpacity(): void;
1799
+ protected _draw(): void;
1800
+ protected _redraw(): CanvasBatchable[];
1790
1801
  protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
1791
1802
  protected _repaint(batchables: CanvasBatchable[]): CanvasBatchable[];
1792
- protected _draw(): void;
1803
+ protected _process(delta: number): void;
1793
1804
  protected _update(): void;
1794
1805
  protected _render(renderer: WebGLRenderer): void;
1795
1806
  }
@@ -2662,7 +2673,7 @@ declare class GlitchEffect extends Effect {
2662
2673
  protected _texture: Texture2D;
2663
2674
  protected _sizes: Float32Array;
2664
2675
  protected _offsets: Float32Array;
2665
- protected _redraw: boolean;
2676
+ protected _needsRedraw: boolean;
2666
2677
  slices: number;
2667
2678
  sampleSize: number;
2668
2679
  offset: number;
@@ -2979,6 +2990,7 @@ declare class CanvasItemEditor extends Control {
2979
2990
  }
2980
2991
 
2981
2992
  interface EngineOptions extends WebGLContextAttributes {
2993
+ debug?: boolean;
2982
2994
  view?: HTMLCanvasElement | WebGLRenderingContext | WebGL2RenderingContext;
2983
2995
  width?: number;
2984
2996
  height?: number;