@gedit/editor-2d 0.1.115 → 0.2.4

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.
Files changed (100) hide show
  1. package/lib/browser/editor2d-context-key-service.js.map +1 -1
  2. package/lib/browser/editor2d-contribution.js.map +1 -1
  3. package/lib/browser/editor2d-label-provider.js.map +1 -1
  4. package/lib/browser/editor2d-model-provider.js.map +1 -1
  5. package/lib/browser/editor2d-ref-provider-contribution.d.ts +1 -1
  6. package/lib/browser/editor2d-ref-provider-contribution.d.ts.map +1 -1
  7. package/lib/browser/editor2d-ref-provider-contribution.js +8 -8
  8. package/lib/browser/editor2d-ref-provider-contribution.js.map +1 -1
  9. package/lib/browser/editor2d-service.js.map +1 -1
  10. package/lib/browser/model/editor2d-document.d.ts +45 -19
  11. package/lib/browser/model/editor2d-document.d.ts.map +1 -1
  12. package/lib/browser/model/editor2d-document.js +291 -70
  13. package/lib/browser/model/editor2d-document.js.map +1 -1
  14. package/lib/browser/model/editor2d-model.js.map +1 -1
  15. package/lib/browser/model/editor2d-selection.js.map +1 -1
  16. package/lib/browser/model/editor2d-widget.js.map +1 -1
  17. package/lib/browser/model/editor2d.d.ts +8 -4
  18. package/lib/browser/model/editor2d.d.ts.map +1 -1
  19. package/lib/browser/model/editor2d.js +23 -4
  20. package/lib/browser/model/editor2d.js.map +1 -1
  21. package/lib/browser/model/utils/anim.utils.d.ts +3 -0
  22. package/lib/browser/model/utils/anim.utils.d.ts.map +1 -1
  23. package/lib/browser/model/utils/anim.utils.js +10 -4
  24. package/lib/browser/model/utils/anim.utils.js.map +1 -1
  25. package/lib/browser/playground/canvas-draw.d.ts +8 -0
  26. package/lib/browser/playground/canvas-draw.d.ts.map +1 -1
  27. package/lib/browser/playground/canvas-draw.js +29 -15
  28. package/lib/browser/playground/canvas-draw.js.map +1 -1
  29. package/lib/browser/playground/canvas-layer.d.ts +10 -2
  30. package/lib/browser/playground/canvas-layer.d.ts.map +1 -1
  31. package/lib/browser/playground/canvas-layer.js +25 -2
  32. package/lib/browser/playground/canvas-layer.js.map +1 -1
  33. package/lib/browser/playground/entities/extend-entity.d.ts +10 -0
  34. package/lib/browser/playground/entities/extend-entity.d.ts.map +1 -0
  35. package/lib/browser/playground/entities/extend-entity.js +34 -0
  36. package/lib/browser/playground/entities/extend-entity.js.map +1 -0
  37. package/lib/browser/playground/entities/index.d.ts +1 -0
  38. package/lib/browser/playground/entities/index.d.ts.map +1 -1
  39. package/lib/browser/playground/entities/index.js +1 -0
  40. package/lib/browser/playground/entities/index.js.map +1 -1
  41. package/lib/browser/playground/extend-edit-layer-point-event.d.ts +30 -0
  42. package/lib/browser/playground/extend-edit-layer-point-event.d.ts.map +1 -0
  43. package/lib/browser/playground/extend-edit-layer-point-event.js +50 -0
  44. package/lib/browser/playground/extend-edit-layer-point-event.js.map +1 -0
  45. package/lib/browser/playground/extend-edit-layer.d.ts +38 -0
  46. package/lib/browser/playground/extend-edit-layer.d.ts.map +1 -0
  47. package/lib/browser/playground/extend-edit-layer.js +335 -0
  48. package/lib/browser/playground/extend-edit-layer.js.map +1 -0
  49. package/lib/browser/playground/index.d.ts +1 -0
  50. package/lib/browser/playground/index.d.ts.map +1 -1
  51. package/lib/browser/playground/index.js +1 -0
  52. package/lib/browser/playground/index.js.map +1 -1
  53. package/lib/browser/playground/path-edit-layer-move-point.d.ts +15 -0
  54. package/lib/browser/playground/path-edit-layer-move-point.d.ts.map +1 -0
  55. package/lib/browser/playground/path-edit-layer-move-point.js +47 -0
  56. package/lib/browser/playground/path-edit-layer-move-point.js.map +1 -0
  57. package/lib/browser/playground/path-edit-layer-svg-path.d.ts +11 -0
  58. package/lib/browser/playground/path-edit-layer-svg-path.d.ts.map +1 -0
  59. package/lib/browser/playground/path-edit-layer-svg-path.js +21 -0
  60. package/lib/browser/playground/path-edit-layer-svg-path.js.map +1 -0
  61. package/lib/browser/playground/path-edit-layer.d.ts +36 -0
  62. package/lib/browser/playground/path-edit-layer.d.ts.map +1 -0
  63. package/lib/browser/playground/path-edit-layer.js +257 -0
  64. package/lib/browser/playground/path-edit-layer.js.map +1 -0
  65. package/lib/browser/playground/playground-context.js.map +1 -1
  66. package/lib/browser/playground/playground-contribution.d.ts +2 -0
  67. package/lib/browser/playground/playground-contribution.d.ts.map +1 -1
  68. package/lib/browser/playground/playground-contribution.js +40 -3
  69. package/lib/browser/playground/playground-contribution.js.map +1 -1
  70. package/lib/browser/utils/snapshot.d.ts.map +1 -1
  71. package/lib/browser/utils/snapshot.js +1 -1
  72. package/lib/browser/utils/snapshot.js.map +1 -1
  73. package/package.json +9 -7
  74. package/src/browser/editor2d-ref-provider-contribution.ts +8 -8
  75. package/src/browser/model/editor2d-document.ts +278 -49
  76. package/src/browser/model/editor2d.ts +22 -6
  77. package/src/browser/model/utils/anim.utils.ts +9 -2
  78. package/src/browser/playground/canvas-draw.ts +31 -17
  79. package/src/browser/playground/canvas-layer.ts +25 -3
  80. package/src/browser/playground/entities/extend-entity.ts +37 -0
  81. package/src/browser/playground/entities/index.ts +1 -0
  82. package/src/browser/playground/extend-edit-layer-point-event.tsx +71 -0
  83. package/src/browser/playground/extend-edit-layer.tsx +442 -0
  84. package/src/browser/playground/index.ts +1 -0
  85. package/src/browser/playground/path-edit-layer-move-point.tsx +71 -0
  86. package/src/browser/playground/path-edit-layer-svg-path.tsx +50 -0
  87. package/src/browser/playground/path-edit-layer.tsx +330 -0
  88. package/src/browser/playground/playground-contribution.ts +37 -3
  89. package/src/browser/style/canvas-layer.css +16 -0
  90. package/src/browser/style/extend-edit-layer.less +127 -0
  91. package/src/browser/style/index.less +2 -1
  92. package/src/browser/style/path-edit-layer.less +72 -0
  93. package/src/browser/svg/pen+.svg +24 -0
  94. package/src/browser/utils/snapshot.ts +1 -0
  95. package/lib/browser/playground/canvas-draw-layer.d.ts +0 -22
  96. package/lib/browser/playground/canvas-draw-layer.d.ts.map +0 -1
  97. package/lib/browser/playground/canvas-draw-layer.js +0 -102
  98. package/lib/browser/playground/canvas-draw-layer.js.map +0 -1
  99. package/src/browser/playground/canvas-draw-layer.tsx +0 -88
  100. package/src/browser/style/canvas-draw-layer.less +0 -24
@@ -17,6 +17,7 @@ export interface CanvasDrawOpts {
17
17
  renderEngine: RenderEngineIDEService,
18
18
  assetsURI: string, // 资源地址
19
19
  getComponentContent: (compId: string, parentNode: Editor2dNode) => Editor2dNode[] | undefined
20
+ isSnapshot?: boolean
20
21
  isTemplate?: boolean
21
22
  }
22
23
  export interface CanvasDrawData {
@@ -86,6 +87,7 @@ export class CanvasDraw extends DisposableImpl {
86
87
  protected onDrawEmitter = new Emitter<GameConfig.SceneSizeConfig>();
87
88
  protected onLoadingEmitter = new Emitter<CanvasDrawLoadingState>();
88
89
  protected onGameObjectChangeEmitter = new Emitter<GameObjectChangeEvent>();
90
+ protected onRenderWidgetCreateEmitter = new Emitter<GameWidgetIDE>();
89
91
  protected data?: CanvasDrawData;
90
92
  private booted: boolean = false;
91
93
  private libLoaded = false;
@@ -95,6 +97,7 @@ export class CanvasDraw extends DisposableImpl {
95
97
  readonly gameObjectCache: Map<string, GameObject> = new Map();
96
98
  readonly nodeCache: Map<string, Editor2dNode> = new Map();
97
99
  protected nodeVersionCache: Map<string, string> = new Map();
100
+ protected maskCache: Map<string, {mask?: string; isMask?: boolean; ignoreMask?: boolean }> = new Map();
98
101
  protected lastRenderKeys: string[] = [];
99
102
  protected renderWidgetDispose: Disposable | undefined;
100
103
  protected pixelArt: boolean;
@@ -103,6 +106,7 @@ export class CanvasDraw extends DisposableImpl {
103
106
  readonly onDraw = this.onDrawEmitter.event;
104
107
  readonly onLoading = this.onLoadingEmitter.event;
105
108
  readonly onGameObjectChange = this.onGameObjectChangeEmitter.event;
109
+ readonly onRenderWidgetCreate = this.onRenderWidgetCreateEmitter.event;
106
110
  loading = true;
107
111
  constructor(
108
112
  protected opts: CanvasDrawOpts,
@@ -112,6 +116,7 @@ export class CanvasDraw extends DisposableImpl {
112
116
  this.onDrawEmitter,
113
117
  this.onLoadingEmitter,
114
118
  this.onGameObjectChangeEmitter,
119
+ this.onRenderWidgetCreateEmitter,
115
120
  ]);
116
121
  }
117
122
  protected async startLoadLibs(): Promise<void> {
@@ -154,6 +159,7 @@ export class CanvasDraw extends DisposableImpl {
154
159
  canvas: element,
155
160
  backgroundColor,
156
161
  assetsURI: this.opts.assetsURI, // 资源路径
162
+ isSnapshot: this.opts.isSnapshot,
157
163
  isIDE: true,
158
164
  });
159
165
  this.renderWidget.toDispose.push(Disposable.create(() => {
@@ -161,7 +167,8 @@ export class CanvasDraw extends DisposableImpl {
161
167
  this.renderWidgetDispose.dispose();
162
168
  this.renderWidgetDispose = undefined;
163
169
  }
164
- this.opts.host.removeChild(element);
170
+ element.remove();
171
+ // this.opts.host.removeChild(element);
165
172
  this.renderWidget = undefined;
166
173
  this.booted = false;
167
174
  this.loading = true;
@@ -173,7 +180,8 @@ export class CanvasDraw extends DisposableImpl {
173
180
  });
174
181
  }));
175
182
  this.renderWidgetDispose = this.toDispose.push(this.renderWidget);
176
- this.renderWidget.start().then(() => {
183
+ Promise.resolve(this.renderWidget.start()).then(() => {
184
+ this.onRenderWidgetCreateEmitter.fire(this.renderWidget!);
177
185
  this.booted = true;
178
186
  this.draw();
179
187
  });
@@ -250,9 +258,11 @@ export class CanvasDraw extends DisposableImpl {
250
258
  if (!gameObject) {
251
259
  const gameObjectChildren = children ? children.map(c => gameObjectCache.get(Editor2dNode.getNodePath(c))!) : [];
252
260
  try {
253
- gameObject = scene.createAuto({...nodeData, id: nodePath, depth: currentDepth, parentId},
254
- gameObjectChildren,
255
- );
261
+ const d = { ...nodeData, id: nodePath, depth: currentDepth, parentId };
262
+ if (d.mask) {
263
+ d.mask = `${parentId}/${d.mask}`;
264
+ }
265
+ gameObject = scene.createAuto(d, gameObjectChildren);
256
266
  } catch (e) {
257
267
  console.error(e);
258
268
  return depth;
@@ -262,6 +272,7 @@ export class CanvasDraw extends DisposableImpl {
262
272
  this.gameObjectCache.delete(nodePath);
263
273
  this.nodeVersionCache.delete(nodePath);
264
274
  this.nodeCache.delete(nodePath);
275
+ this.maskCache.delete(nodePath);
265
276
  this.onGameObjectChangeEmitter.fire({ type: GameObjectEventType.DESTROY, gameObject: gameObject!, node: this.nodeCache.get(nodePath)! });
266
277
  });
267
278
  scene.onGameObjectUpdate(gameObject, () => {
@@ -273,6 +284,7 @@ export class CanvasDraw extends DisposableImpl {
273
284
  });
274
285
  scene.onGameObjectCreate(gameObject, () => {
275
286
  this.nodeVersionCache.set(nodePath, newVersion);
287
+ this.maskCache.set(nodePath, { mask: node.mask, isMask: node.isMask, ignoreMask: node.ignoreMask });
276
288
  // 根节点创建完成则代表加载完成
277
289
  this.fireLoading(Editor2dNode.isRootNode(this.nodeCache.get(nodePath)!));
278
290
  });
@@ -292,11 +304,11 @@ export class CanvasDraw extends DisposableImpl {
292
304
  });
293
305
  firstCreate = true;
294
306
  }
295
- if (gameObject && gameObject.getTextureId) {
296
- const oldTexture = gameObject.getTextureId();
297
- const newTexture = nodeData.textureId;
307
+ if (gameObject && gameObject.needResource) {
308
+ const oldTexture = gameObject.data.textureId! || '';
309
+ const newTexture = nodeData.textureId || '';
298
310
  // 素材更新则销毁重新创建
299
- if (oldTexture !== newTexture) {
311
+ if (oldTexture.toString() !== newTexture.toString()) {
300
312
  gameObject.dispose();
301
313
  this.nodeCache.set(nodePath, node);
302
314
  return this.updateGameObject(scene, node, currentDepth, renderKeys, isInside, parentId);
@@ -304,15 +316,22 @@ export class CanvasDraw extends DisposableImpl {
304
316
  }
305
317
  const update = () => {
306
318
  const oldVersion = this.nodeVersionCache.get(nodePath);
307
- if (nodeChanged || oldVersion !== newVersion) {
308
- gameObject!.update({
319
+ const oldMask = this.maskCache.get(nodePath);
320
+ const maskChange = oldMask?.mask !== node.mask || oldMask?.isMask !== node.isMask || oldMask?.ignoreMask !== node.ignoreMask;
321
+ if (nodeChanged || maskChange || oldVersion !== newVersion) {
322
+ const d = {
309
323
  ...nodeData,
310
324
  parentId,
311
325
  id: nodePath,
312
326
  textureId: nodeData.textureId,
313
327
  depth: currentDepth,
314
- });
328
+ };
329
+ if (d.mask) {
330
+ d.mask = `${parentId}/${d.mask}`;
331
+ }
332
+ gameObject!.update(d);
315
333
  this.nodeVersionCache.set(nodePath, newVersion);
334
+ this.maskCache.set(nodePath, { mask: node.mask, isMask: node.isMask, ignoreMask: node.ignoreMask });
316
335
  }
317
336
  };
318
337
  if (!firstCreate && gameObject.created) {
@@ -388,11 +407,6 @@ export class CanvasDraw extends DisposableImpl {
388
407
  * 加载scene的资源文件并渲染
389
408
  */
390
409
  this.renderWidget.loadCurrentScene();
391
- /**
392
- * 动态计算画布宽高
393
- */
394
- // const enlargeBounds = this.selectionEntityManager.getEntityEnlargeBounds(CANVAS_MIN_WIDTH, CANVAS_MIN_HEIGHT);
395
- // this.renderWidget.updateCanvasBounds(enlargeBounds);
396
410
  this.onDrawEmitter.fire(size);
397
411
  }
398
412
  }
@@ -1,4 +1,4 @@
1
- import { entity, Layer } from '@gedit/playground';
1
+ import { entity, Layer, PipelineDimension } from '@gedit/playground';
2
2
  import { DocumentEntity } from './entities';
3
3
  import { domUtils } from '@gedit/utils/lib/browser';
4
4
  import { PlaygroundContext2d } from './playground-context';
@@ -6,6 +6,8 @@ import { Editor2dDocument } from '../model';
6
6
  import { Rectangle } from '@gedit/math';
7
7
  import { SelectionEntityManager } from './selection-entity-manager';
8
8
  import { CanvasDraw, CanvasDrawLoadingState, GameObjectChangeEvent, GameObjectEventType } from './canvas-draw';
9
+ import { debounce } from '@gedit/utils';
10
+ import { GameWidgetIDE } from '@gedit/render-engine-ide';
9
11
 
10
12
  export class CanvasLayer extends Layer<PlaygroundContext2d> {
11
13
  @entity(DocumentEntity) documentEntity: DocumentEntity;
@@ -30,6 +32,7 @@ export class CanvasLayer extends Layer<PlaygroundContext2d> {
30
32
  });
31
33
  this.toDispose.pushAll([
32
34
  this.canvasDrawer,
35
+ this.canvasDrawer.onRenderWidgetCreate(this.onWidgetUpdate.bind(this)),
33
36
  this.canvasDrawer.onGameObjectChange(this.onGameObjectChange.bind(this)),
34
37
  this.canvasDrawer.onLoading(this.updateLoading.bind(this)),
35
38
  this.listenPlaygroundEvent('mousedown', () => {
@@ -101,11 +104,30 @@ export class CanvasLayer extends Layer<PlaygroundContext2d> {
101
104
  }
102
105
  }
103
106
  }
104
-
105
- onZoom(): void {
107
+ protected onWidgetUpdate(renderWidget: GameWidgetIDE): void {
106
108
  const config = this.config.config;
107
109
  this.canvasDrawer?.refreshScale(true, config.zoom);
110
+ renderWidget.onPlaygroundResize?.(config, config.scrollX, config.scrollY);
108
111
  }
112
+
113
+ onZoom = debounce(() => {
114
+ const config = this.config.config;
115
+ this.canvasDrawer?.refreshScale(true, config.zoom);
116
+ });
117
+ onResize = debounce((size: PipelineDimension) => {
118
+ const renderWidget = this.canvasDrawer?.renderWidget;
119
+ if (renderWidget) {
120
+ const config = this.config.config;
121
+ renderWidget.onPlaygroundResize?.(size, config.scrollX, config.scrollY);
122
+ }
123
+ });
124
+ onScroll = debounce((scroll: { scrollX: number; scrollY: number }) => {
125
+ const renderWidget = this.canvasDrawer?.renderWidget;
126
+ if (renderWidget) {
127
+ renderWidget.onPlaygroundScroll?.(scroll.scrollX, scroll.scrollY);
128
+ }
129
+ });
130
+
109
131
  private currentRectangle: Rectangle | undefined;
110
132
  // private currentResolution = 1;
111
133
 
@@ -0,0 +1,37 @@
1
+ import { ConfigEntity, EntityJSON } from '@gedit/playground';
2
+
3
+ export interface ExtendData {
4
+ selectColorUUid?: string
5
+ }
6
+
7
+ export class ExtendEntity extends ConfigEntity<ExtendData> {
8
+ static type = 'ExtendConfigEntity';
9
+ getDefaultConfig(): ExtendData {
10
+ return {
11
+
12
+ };
13
+ }
14
+ /*
15
+ /!**
16
+ * 会触发CanvasLayer刷新
17
+ * @param oldData
18
+ * @param newData
19
+ *!/
20
+ checkChanged(oldData: DocumentData, newData: Partial<DocumentData>): boolean {
21
+ // 只判断version变化
22
+ if (newData.document) {
23
+ return oldData.document !== newData.document || oldData.version !== newData.version;
24
+ }
25
+ return false;
26
+ }
27
+ */
28
+
29
+ toJSON(): EntityJSON {
30
+ return {
31
+ type: this.type,
32
+ id: this.id,
33
+ ableList: this.ables.toJSON(),
34
+ dataList: []
35
+ };
36
+ }
37
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './document-entity';
2
2
  export * from './editor2d-entity';
3
+ export * from './extend-entity';
3
4
 
@@ -0,0 +1,71 @@
1
+ import * as React from 'react';
2
+
3
+ export interface DifferProps {
4
+ x: number;
5
+ y: number;
6
+ current: { x: number; y: number };
7
+ start: { x: number; y: number };
8
+ prev?: { x: number; y: number };
9
+ }
10
+
11
+ interface Props {
12
+ className?: string;
13
+ active?: boolean;
14
+ pointClassName?: string;
15
+ style?: React.CSSProperties;
16
+ pointStyle?: React.CSSProperties;
17
+ onChange?: (differ: DifferProps) => void;
18
+ onMouseDown?: (e: React.MouseEvent) => void;
19
+ onMouseUp?: (e: MouseEvent) => void;
20
+ }
21
+
22
+ export default (props: Props) => {
23
+ const startPoint = React.useRef<{ x: number; y: number }>();
24
+ const prevPoint = React.useRef<{ x: number; y: number }>();
25
+ const onMouseUp = (e: MouseEvent) => {
26
+ startPoint.current = undefined;
27
+ prevPoint.current = undefined;
28
+ window.removeEventListener('mousemove', onMouseMove);
29
+ window.removeEventListener('mouseup', onMouseUp);
30
+ props.onMouseUp?.(e);
31
+ };
32
+ const onMouseMove = (e: MouseEvent) => {
33
+ if (startPoint.current) {
34
+ const x = e.clientX;
35
+ const y = e.clientY;
36
+ props.onChange?.({
37
+ x: x - startPoint.current.x,
38
+ y: y - startPoint.current.y,
39
+ current: { x, y },
40
+ prev: prevPoint.current,
41
+ start: startPoint.current,
42
+ });
43
+ prevPoint.current = {
44
+ x: e.clientX,
45
+ y: e.clientY,
46
+ };
47
+ }
48
+ };
49
+ const onMouseDown = (e: React.MouseEvent) => {
50
+ startPoint.current = {
51
+ x: e.clientX,
52
+ y: e.clientY,
53
+ };
54
+ prevPoint.current = {
55
+ x: e.clientX,
56
+ y: e.clientY,
57
+ };
58
+ props.onMouseDown?.(e);
59
+ window.addEventListener('mousemove', onMouseMove);
60
+ window.addEventListener('mouseup', onMouseUp);
61
+ };
62
+ return (
63
+ <div className={props.className} style={props.style}>
64
+ <div
65
+ className={props.pointClassName}
66
+ style={props.pointStyle}
67
+ onMouseDown={onMouseDown}
68
+ />
69
+ </div>
70
+ );
71
+ };