@visactor/vrender-core 1.1.0-alpha.2 → 1.1.0-alpha.20
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/cjs/canvas/constants.js +2 -1
- package/cjs/color-string/index.js +1 -2
- package/cjs/common/diff.js +1 -2
- package/cjs/common/event-transformer.js +2 -1
- package/cjs/common/rect-utils.js +1 -1
- package/cjs/common/render-area.js +1 -1
- package/cjs/common/render-command-list.js +1 -1
- package/cjs/common/render-curve.js +1 -1
- package/cjs/common/render-utils.js +1 -1
- package/cjs/common/seg-context.js +1 -2
- package/cjs/common/simplify.js +1 -1
- package/cjs/common/sort.js +1 -1
- package/cjs/common/split-path.js +1 -1
- package/cjs/common/store.js +1 -1
- package/cjs/common/text.js +1 -1
- package/cjs/common/utils.js +1 -1
- package/cjs/core/camera.js +1 -1
- package/cjs/core/constants.js +1 -1
- package/cjs/core/core-modules.js +1 -1
- package/cjs/core/global-module.js +2 -0
- package/cjs/core/global.js +1 -1
- package/cjs/core/graphic-utils.js +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/layer-service.js +2 -1
- package/cjs/core/layer.js +1 -1
- package/cjs/core/light.js +1 -1
- package/cjs/core/stage.d.ts +4 -1
- package/cjs/core/stage.js +24 -12
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.js +1 -1
- package/cjs/graphic/graphic-service/graphic-service.d.ts +4 -0
- package/cjs/graphic/graphic-service/graphic-service.js +6 -5
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.d.ts +72 -11
- package/cjs/graphic/graphic.js +509 -158
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.d.ts +5 -1
- package/cjs/graphic/group.js +37 -18
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/rect.d.ts +2 -0
- package/cjs/graphic/rect.js +44 -0
- package/cjs/graphic/rect.js.map +1 -1
- package/cjs/graphic/state/shared-state-refresh.js +4 -3
- package/cjs/graphic/state/shared-state-refresh.js.map +1 -1
- package/cjs/graphic/state/shared-state-scope.js +1 -1
- package/cjs/graphic/state/shared-state-scope.js.map +1 -1
- package/cjs/graphic/state/state-engine.js +2 -2
- package/cjs/graphic/state/state-engine.js.map +1 -1
- package/cjs/graphic/state/state-perf-monitor.d.ts +1 -0
- package/cjs/graphic/state/state-perf-monitor.js +9 -2
- package/cjs/graphic/state/state-perf-monitor.js.map +1 -1
- package/cjs/graphic/state/state-style-resolver.d.ts +0 -9
- package/cjs/graphic/state/state-style-resolver.js +0 -23
- package/cjs/graphic/state/state-style-resolver.js.map +1 -1
- package/cjs/graphic/state/state-transition-orchestrator.d.ts +5 -0
- package/cjs/graphic/state/state-transition-orchestrator.js +17 -5
- package/cjs/graphic/state/state-transition-orchestrator.js.map +1 -1
- package/cjs/interface/animation/animate.d.ts +1 -0
- package/cjs/interface/animation/animate.js.map +1 -1
- package/cjs/interface/graphic.d.ts +9 -0
- package/cjs/interface/graphic.js.map +1 -1
- package/cjs/interface/node-tree.js.map +1 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.d.ts +4 -1
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js +20 -10
- package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js +3 -2
- package/cjs/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/cjs/render/contributions/render/base-render.js +8 -7
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/dist/index.es.js +1134 -279
- package/es/canvas/constants.js +2 -1
- package/es/color-string/index.js +1 -2
- package/es/common/diff.js +1 -2
- package/es/common/event-transformer.js +2 -1
- package/es/common/rect-utils.js +1 -1
- package/es/common/render-area.js +1 -1
- package/es/common/render-command-list.js +1 -1
- package/es/common/render-curve.js +1 -1
- package/es/common/render-utils.js +1 -1
- package/es/common/seg-context.js +1 -2
- package/es/common/simplify.js +1 -1
- package/es/common/sort.js +1 -1
- package/es/common/split-path.js +1 -1
- package/es/common/store.js +1 -1
- package/es/common/text.js +1 -1
- package/es/common/utils.js +1 -1
- package/es/core/camera.js +1 -1
- package/es/core/constants.js +1 -1
- package/es/core/core-modules.js +1 -1
- package/es/core/global-module.js +2 -0
- package/es/core/global.js +1 -1
- package/es/core/graphic-utils.js +1 -1
- package/es/core/index.js +1 -1
- package/es/core/layer-service.js +2 -1
- package/es/core/layer.js +1 -1
- package/es/core/light.js +1 -1
- package/es/core/stage.d.ts +4 -1
- package/es/core/stage.js +22 -11
- package/es/core/stage.js.map +1 -1
- package/es/core/window.js +1 -1
- package/es/graphic/graphic-service/graphic-service.d.ts +4 -0
- package/es/graphic/graphic-service/graphic-service.js +6 -5
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.d.ts +72 -11
- package/es/graphic/graphic.js +504 -151
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.d.ts +5 -1
- package/es/graphic/group.js +36 -18
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/rect.d.ts +2 -0
- package/es/graphic/rect.js +44 -0
- package/es/graphic/rect.js.map +1 -1
- package/es/graphic/state/shared-state-refresh.js +5 -4
- package/es/graphic/state/shared-state-refresh.js.map +1 -1
- package/es/graphic/state/shared-state-scope.js +2 -2
- package/es/graphic/state/shared-state-scope.js.map +1 -1
- package/es/graphic/state/state-engine.js +3 -3
- package/es/graphic/state/state-engine.js.map +1 -1
- package/es/graphic/state/state-perf-monitor.d.ts +1 -0
- package/es/graphic/state/state-perf-monitor.js +7 -0
- package/es/graphic/state/state-perf-monitor.js.map +1 -1
- package/es/graphic/state/state-style-resolver.d.ts +0 -9
- package/es/graphic/state/state-style-resolver.js +0 -23
- package/es/graphic/state/state-style-resolver.js.map +1 -1
- package/es/graphic/state/state-transition-orchestrator.d.ts +5 -0
- package/es/graphic/state/state-transition-orchestrator.js +17 -5
- package/es/graphic/state/state-transition-orchestrator.js.map +1 -1
- package/es/interface/animation/animate.d.ts +1 -0
- package/es/interface/animation/animate.js.map +1 -1
- package/es/interface/graphic.d.ts +9 -0
- package/es/interface/graphic.js.map +1 -1
- package/es/interface/node-tree.js.map +1 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.d.ts +4 -1
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js +20 -10
- package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
- package/es/plugins/builtin-plugin/flex-layout-plugin.js +3 -2
- package/es/plugins/builtin-plugin/flex-layout-plugin.js.map +1 -1
- package/es/render/contributions/render/base-render.js +8 -6
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/package.json +3 -3
package/cjs/graphic/group.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class Group extends Graphic<IGroupGraphicAttribute> implements IG
|
|
|
17
17
|
_childUpdateTag: number;
|
|
18
18
|
theme?: ITheme;
|
|
19
19
|
protected _sharedStateDefinitions?: StateDefinitionsInput<Record<string, any>>;
|
|
20
|
+
protected _hasSharedStateDefinitions: boolean;
|
|
20
21
|
sharedStateScope?: SharedStateScope<Record<string, any>>;
|
|
21
22
|
deferredStateConfig?: IDeferredStateOwnerConfig;
|
|
22
23
|
static NOWORK_ANIMATE_ATTR: {
|
|
@@ -78,7 +79,7 @@ export declare class Group extends Graphic<IGroupGraphicAttribute> implements IG
|
|
|
78
79
|
insertBefore(newNode: INode, referenceNode: INode): INode | null;
|
|
79
80
|
insertAfter(newNode: INode, referenceNode: INode): INode | null;
|
|
80
81
|
insertInto(newNode: INode, idx: number): INode | null;
|
|
81
|
-
removeChild(child: IGraphic): IGraphic;
|
|
82
|
+
removeChild(child: IGraphic, highPerformance?: boolean): IGraphic;
|
|
82
83
|
removeAllChild(deep?: boolean): void;
|
|
83
84
|
setStage(stage?: IStage, layer?: ILayer): void;
|
|
84
85
|
addUpdatePositionTag(): void;
|
|
@@ -90,7 +91,10 @@ export declare class Group extends Graphic<IGroupGraphicAttribute> implements IG
|
|
|
90
91
|
clone(): Group;
|
|
91
92
|
getNoWorkAnimateAttr(): Record<string, number>;
|
|
92
93
|
release(all?: boolean): void;
|
|
94
|
+
detachStageForRelease(): void;
|
|
93
95
|
protected ensureSharedStateScopeBound(): void;
|
|
96
|
+
protected hasSharedStateDefinitions(): boolean;
|
|
97
|
+
protected notifyChildrenSharedStateTreeChanged(): void;
|
|
94
98
|
onParentSharedStateTreeChanged(stage?: IStage, layer?: ILayer): void;
|
|
95
99
|
}
|
|
96
100
|
export declare function createGroup(attributes: IGroupGraphicAttribute): IGroup;
|
package/cjs/graphic/group.js
CHANGED
|
@@ -15,16 +15,19 @@ var GroupUpdateAABBBoundsMode;
|
|
|
15
15
|
|
|
16
16
|
class Group extends graphic_1.Graphic {
|
|
17
17
|
constructor(params) {
|
|
18
|
-
super(params), this.type = "group", this.parent = null, this.isContainer = !0, this.
|
|
19
|
-
this._childUpdateTag = enums_1.UpdateTag.UPDATE_BOUNDS;
|
|
18
|
+
super(params), this.type = "group", this.parent = null, this.isContainer = !0, this._hasSharedStateDefinitions = !1,
|
|
19
|
+
this.numberType = constants_1.GROUP_NUMBER_TYPE, this._childUpdateTag = enums_1.UpdateTag.UPDATE_BOUNDS;
|
|
20
20
|
}
|
|
21
21
|
get sharedStateDefinitions() {
|
|
22
22
|
return this._sharedStateDefinitions;
|
|
23
23
|
}
|
|
24
24
|
set sharedStateDefinitions(value) {
|
|
25
|
-
|
|
25
|
+
if (this._sharedStateDefinitions === value) return;
|
|
26
|
+
const previousScope = this.sharedStateScope;
|
|
27
|
+
this._sharedStateDefinitions = value, this._hasSharedStateDefinitions = !!value && Object.keys(value).length > 0,
|
|
26
28
|
this.ensureSharedStateScopeBound(), this.sharedStateScope && ((0, shared_state_scope_1.setSharedStateScopeLocalDefinitions)(this.sharedStateScope, value),
|
|
27
|
-
(0, shared_state_refresh_1.markScopeActiveDescendantsDirty)(this.sharedStateScope, this.stage))
|
|
29
|
+
(0, shared_state_refresh_1.markScopeActiveDescendantsDirty)(this.sharedStateScope, this.stage)),
|
|
30
|
+
previousScope !== this.sharedStateScope && this.notifyChildrenSharedStateTreeChanged();
|
|
28
31
|
}
|
|
29
32
|
setMode(mode) {
|
|
30
33
|
"3d" === mode ? this.set3dMode() : this.set2dMode();
|
|
@@ -142,10 +145,12 @@ class Group extends graphic_1.Graphic {
|
|
|
142
145
|
insertInto(newNode, idx) {
|
|
143
146
|
return this._updateChildToStage(super.insertInto(newNode, idx));
|
|
144
147
|
}
|
|
145
|
-
removeChild(child) {
|
|
148
|
+
removeChild(child, highPerformance = !1) {
|
|
149
|
+
var _a;
|
|
146
150
|
const data = super.removeChild(child);
|
|
147
|
-
return
|
|
148
|
-
data
|
|
151
|
+
return data ? highPerformance ? (null === (_a = child.detachStageForRelease) || void 0 === _a || _a.call(child),
|
|
152
|
+
data) : (this.getGraphicService().onRemove(child), child.setStage(null, null), this.addUpdateBoundTag(),
|
|
153
|
+
data) : data;
|
|
149
154
|
}
|
|
150
155
|
removeAllChild(deep = !1) {
|
|
151
156
|
const children = this.children.slice();
|
|
@@ -157,17 +162,16 @@ class Group extends graphic_1.Graphic {
|
|
|
157
162
|
}
|
|
158
163
|
setStage(stage, layer) {
|
|
159
164
|
var _a, _b, _c, _d, _e, _f;
|
|
160
|
-
const graphicService = null !== (_c = null !== (_a = null == stage ? void 0 : stage.graphicService) && void 0 !== _a ? _a : null === (_b = this.stage) || void 0 === _b ? void 0 : _b.graphicService) && void 0 !== _c ? _c : application_1.application.graphicService;
|
|
161
|
-
if (this.stage !== stage) return this.stage = stage, this.layer = layer, this.ensureSharedStateScopeBound(),
|
|
162
|
-
this.
|
|
163
|
-
this.
|
|
164
|
-
null === (_e = null == graphicService ? void 0 : graphicService.onSetStage) || void 0 === _e || _e.call(graphicService, this, stage),
|
|
165
|
+
const graphicService = null !== (_c = null !== (_a = null == stage ? void 0 : stage.graphicService) && void 0 !== _a ? _a : null === (_b = this.stage) || void 0 === _b ? void 0 : _b.graphicService) && void 0 !== _c ? _c : application_1.application.graphicService, needsSharedStateTreeSync = this._hasSharedStateDefinitions || this.sharedStateScope || (null === (_d = this.currentStates) || void 0 === _d ? void 0 : _d.length) || this.boundSharedStateScope || (null === (_e = this.registeredActiveScopes) || void 0 === _e ? void 0 : _e.size) || this.sharedStateDirty;
|
|
166
|
+
if (this.stage !== stage) return this.stage = stage, this.layer = layer, needsSharedStateTreeSync && (this.ensureSharedStateScopeBound(),
|
|
167
|
+
this.syncSharedStateScopeBindingOnTreeChange(!0)), this.setStageToShadowRoot(stage, layer),
|
|
168
|
+
this._onSetStage && this._onSetStage(this, stage, layer), null === (_f = null == graphicService ? void 0 : graphicService.onSetStage) || void 0 === _f || _f.call(graphicService, this, stage),
|
|
165
169
|
void this.forEachChildren((item => {
|
|
166
170
|
item.setStage(stage, this.layer);
|
|
167
171
|
}));
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
this.forEachChildren((item => {
|
|
172
|
+
const layerChanged = this.layer !== layer;
|
|
173
|
+
layerChanged && (this.layer = layer), needsSharedStateTreeSync ? (this.ensureSharedStateScopeBound(),
|
|
174
|
+
this.syncSharedStateScopeBindingOnTreeChange(!0), this.notifyChildrenSharedStateTreeChanged()) : layerChanged && this.forEachChildren((item => {
|
|
171
175
|
item.onParentSharedStateTreeChanged && item.onParentSharedStateTreeChanged(stage, this.layer);
|
|
172
176
|
}));
|
|
173
177
|
}
|
|
@@ -215,8 +219,15 @@ class Group extends graphic_1.Graphic {
|
|
|
215
219
|
g.release(all);
|
|
216
220
|
})), super.release();
|
|
217
221
|
}
|
|
222
|
+
detachStageForRelease() {
|
|
223
|
+
super.detachStageForRelease(), this.sharedStateScope = void 0, this.forEachChildren((item => {
|
|
224
|
+
var _a;
|
|
225
|
+
null === (_a = item.detachStageForRelease) || void 0 === _a || _a.call(item);
|
|
226
|
+
}));
|
|
227
|
+
}
|
|
218
228
|
ensureSharedStateScopeBound() {
|
|
219
229
|
var _a, _b, _c;
|
|
230
|
+
if (!this.hasSharedStateDefinitions()) return void (this.sharedStateScope = void 0);
|
|
220
231
|
const parentScope = null !== (_b = null === (_a = this.parent) || void 0 === _a ? void 0 : _a.sharedStateScope) && void 0 !== _b ? _b : null === (_c = this.stage) || void 0 === _c ? void 0 : _c.rootSharedStateScope;
|
|
221
232
|
this.sharedStateScope ? (this.sharedStateScope.ownerGroup = this, this.sharedStateScope.ownerStage = this.stage,
|
|
222
233
|
(0, shared_state_scope_1.setSharedStateScopeParent)(this.sharedStateScope, parentScope),
|
|
@@ -224,11 +235,19 @@ class Group extends graphic_1.Graphic {
|
|
|
224
235
|
shared_state_scope_1.setSharedStateScopeLocalDefinitions)(this.sharedStateScope, this._sharedStateDefinitions)) : this.sharedStateScope = (0,
|
|
225
236
|
shared_state_scope_1.createGroupSharedStateScope)(this, parentScope, this._sharedStateDefinitions);
|
|
226
237
|
}
|
|
238
|
+
hasSharedStateDefinitions() {
|
|
239
|
+
return this._hasSharedStateDefinitions;
|
|
240
|
+
}
|
|
241
|
+
notifyChildrenSharedStateTreeChanged() {
|
|
242
|
+
this.forEachChildren((item => {
|
|
243
|
+
item.onParentSharedStateTreeChanged && item.onParentSharedStateTreeChanged(this.stage, this.layer);
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
227
246
|
onParentSharedStateTreeChanged(stage, layer) {
|
|
247
|
+
var _a;
|
|
228
248
|
this.stage === stage && this.layer === layer ? (this.ensureSharedStateScopeBound(),
|
|
229
|
-
this.
|
|
230
|
-
|
|
231
|
-
}))) : this.setStage(stage, layer);
|
|
249
|
+
this.syncSharedStateScopeBindingOnTreeChange(!!(null === (_a = this.currentStates) || void 0 === _a ? void 0 : _a.length)),
|
|
250
|
+
this.notifyChildrenSharedStateTreeChanged()) : this.setStage(stage, layer);
|
|
232
251
|
}
|
|
233
252
|
}
|
|
234
253
|
|
package/cjs/graphic/group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/group.ts"],"names":[],"mappings":"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","file":"group.js","sourcesContent":["import { Point, type IAABBBounds, type Matrix } from '@visactor/vutils';\nimport { application } from '../application';\nimport type {\n IStage,\n GraphicAttributeMap,\n INode,\n IGraphic,\n ITheme,\n IThemeSpec,\n ILayer,\n GraphicType\n} from '../interface';\nimport type { IGroup, IGroupGraphicAttribute } from '../interface/graphic/group';\nimport type { IDeferredStateOwnerConfig } from './state/state-perf-monitor';\nimport { Graphic, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme, Theme } from './theme';\nimport { UpdateTag, IContainPointMode } from '../common/enums';\nimport { GROUP_NUMBER_TYPE } from './constants';\nimport { DefaultTransform } from './config';\nimport type { StateDefinitionsInput } from './state/state-definition';\nimport {\n type SharedStateScope,\n createGroupSharedStateScope,\n setSharedStateScopeLocalDefinitions,\n setSharedStateScopeParent\n} from './state/shared-state-scope';\nimport { markScopeActiveDescendantsDirty } from './state/shared-state-refresh';\n\n// Group更新AABBBounds的策略\nexport enum GroupUpdateAABBBoundsMode {\n // Group较少的情况,不会批量设置所有父层的tag,而是每次都查找\n LESS_GROUP = 0,\n // Group较多的情况,每次都会设置tag到最顶层\n MORE_GROUP = 1\n}\n\nexport class Group extends Graphic<IGroupGraphicAttribute> implements IGroup {\n type: GraphicType = 'group';\n parent: any = null;\n isContainer: boolean = true;\n // 子元素的更新标记\n declare _childUpdateTag: number;\n\n declare theme?: ITheme;\n protected _sharedStateDefinitions?: StateDefinitionsInput<Record<string, any>>;\n declare sharedStateScope?: SharedStateScope<Record<string, any>>;\n declare deferredStateConfig?: IDeferredStateOwnerConfig;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n this.numberType = GROUP_NUMBER_TYPE;\n this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;\n // this.theme = new Theme();\n }\n\n get sharedStateDefinitions(): StateDefinitionsInput<Record<string, any>> | undefined {\n return this._sharedStateDefinitions;\n }\n\n set sharedStateDefinitions(value: StateDefinitionsInput<Record<string, any>> | undefined) {\n if (this._sharedStateDefinitions === value) {\n return;\n }\n\n this._sharedStateDefinitions = value;\n this.ensureSharedStateScopeBound();\n if (this.sharedStateScope) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, value);\n markScopeActiveDescendantsDirty(this.sharedStateScope, this.stage);\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('3d');\n // });\n }\n set2dMode() {\n this.in3dMode = false;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('2d');\n // });\n }\n\n setTheme(t: IThemeSpec) {\n if (!this.theme) {\n this.theme = new Theme();\n }\n return this.theme.setTheme(t, this);\n }\n\n createTheme() {\n if (!this.theme) {\n this.theme = new Theme();\n }\n }\n\n visibleAll(visible: boolean) {\n this.setAttribute('visible', visible);\n this.forEachChildren((item: IGraphic) => {\n if (item.isContainer && (item as any).visibleAll) {\n (item as any).visibleAll(visible);\n } else {\n item.setAttribute('visible', visible);\n }\n });\n }\n\n hideAll() {\n this.visibleAll(false);\n }\n\n showAll() {\n this.visibleAll(true);\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * group containsPoint 只需要判断bounds\n * TODO: group的shape判断\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode): boolean {\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n return this.AABBBounds.contains(point.x, point.y);\n }\n return this.AABBBounds.contains(x, y);\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 检索自己是否需要更新\n if (super.shouldUpdateAABBBounds()) {\n return true;\n }\n // 检索叶子节点是否有更新(如果children是叶子节点的话)\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return true;\n }\n return false;\n // // 检索是否子group需要更新\n // let needUpdate = false;\n // this.forEachChildren((node: IGraphic) => {\n // // 只查找group层级\n // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // needUpdate = true;\n // return true;\n // }\n // return false;\n // });\n // return needUpdate;\n }\n\n protected tryUpdateAABBBounds(): IAABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n this.getGraphicService().beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n this.getGraphicService().afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n // 直接返回空Bounds,但是前面的流程还是要走\n if (this.attribute.boundsMode === 'empty') {\n bounds.clear();\n }\n return bounds;\n }\n\n /**\n * 大部分group不需要更新matrix,这里特殊优化一下\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n dx = DefaultTransform.dx,\n dy = DefaultTransform.dy,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n postMatrix\n } = this.attribute;\n if (x === 0 && y === 0 && dx === 0 && dy === 0 && scaleX === 1 && scaleY === 1 && angle === 0 && !postMatrix) {\n this._transMatrix.reset();\n return;\n }\n return super.doUpdateLocalMatrix();\n }\n\n getGraphicTheme(): Required<IGroupGraphicAttribute> {\n return getTheme(this).group;\n }\n\n protected updateAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required<IGroupGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n const originalAABBBounds = aabbBounds; // fix aabbbounds update error in flex layout\n aabbBounds = aabbBounds.clone();\n\n const { width, height, path, clip = groupTheme.clip } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, Math.max(0, width), Math.max(0, height)); // fix bounds set when auto size in vtable\n }\n if (!clip) {\n // 添加子节点\n this.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n // 如果没有clip的话,还需要加一下scroll\n const { scrollX = 0, scrollY = 0 } = attribute;\n aabbBounds.translate(scrollX, scrollY);\n }\n application.graphicService.updateTempAABBBounds(aabbBounds);\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, groupTheme, false, this);\n\n originalAABBBounds.copy(aabbBounds);\n return originalAABBBounds;\n }\n\n protected doUpdateAABBBounds(): IAABBBounds {\n this.updateAABBBoundsStamp++;\n const bounds = super.doUpdateAABBBounds();\n\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this._emitCustomEvent('AAABBBoundsChange');\n\n return bounds;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n this._childUpdateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n }\n\n addChildUpdateBoundTag() {\n // 如果已经设置过updateTag,那就不需要设置了\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return;\n }\n // 如果没有设置过,那么继续向上设置\n this._childUpdateTag |= UpdateTag.UPDATE_BOUNDS;\n this.parent && this.parent.addChildUpdateBoundTag();\n }\n\n getTheme() {\n return this.theme.getTheme(this);\n }\n\n /* 场景树结构 */\n incrementalAppendChild(node: INode): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n this.getGraphicService().onAddIncremental(node as unknown as IGraphic, this, this.stage);\n return data;\n }\n incrementalClearChild(): void {\n super.removeAllChild();\n this.addUpdateBoundTag();\n this.getGraphicService().onClearIncremental(this, this.stage);\n return;\n }\n\n protected _updateChildToStage(child: IGraphic) {\n if (child) {\n if (this.stage && (child.stage !== this.stage || child.layer !== this.layer)) {\n child.setStage(this.stage, this.layer);\n } else if ((child as any).onParentSharedStateTreeChanged) {\n (child as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return child;\n }\n // TODO 代码优化\n appendChild(node: INode, addStage: boolean = true): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n addStage &&\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertBefore(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertBefore(newNode, referenceNode) as undefined as IGraphic);\n }\n insertAfter(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertAfter(newNode, referenceNode) as undefined as IGraphic);\n }\n insertInto(newNode: INode, idx: number): INode | null {\n return this._updateChildToStage(super.insertInto(newNode, idx) as undefined as IGraphic);\n }\n\n removeChild(child: IGraphic): IGraphic {\n const data = super.removeChild(child);\n this.getGraphicService().onRemove(child);\n child.setStage(null as any, null as any);\n this.addUpdateBoundTag();\n return data as IGraphic;\n }\n\n removeAllChild(deep: boolean = false): void {\n const children = this.children.slice() as IGraphic[];\n this.forEachChildren((child: IGraphic) => {\n this.getGraphicService().onRemove(child);\n if (deep && child.isContainer) {\n child.removeAllChild(deep);\n }\n });\n super.removeAllChild();\n children.forEach(child => {\n child.setStage(null as any, null as any);\n });\n this.addUpdateBoundTag();\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n const graphicService = stage?.graphicService ?? this.stage?.graphicService ?? application.graphicService;\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingFromTree(!!this.currentStates?.length);\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n graphicService?.onSetStage?.(this, stage);\n this.forEachChildren(item => {\n (item as any).setStage(stage, this.layer);\n });\n return;\n }\n\n if (this.layer !== layer) {\n this.layer = layer;\n }\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingFromTree(!!this.currentStates?.length);\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(stage, this.layer);\n }\n });\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n super.addUpdatePositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n super.addUpdateGlobalPositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * group更新全局的transMatrix\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (this.shouldUpdateGlobalMatrix()) {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n this.doUpdateGlobalMatrix();\n clearTag && this.clearUpdateGlobalPositionTag();\n }\n return this._globalTransMatrix;\n }\n /**\n * 查找自身更新global的tag,如果存在,就更新\n * @returns\n */\n shouldUpdateGlobalMatrix(): boolean {\n const shouldUpdate = !!(this._updateTag & UpdateTag.UPDATE_GLOBAL_MATRIX);\n return shouldUpdate;\n }\n\n private _getChildByName<T extends INode = INode>(name: string, deep?: boolean): T | null {\n return this.find(node => node.name === name, deep);\n }\n\n /**\n * if graphic exist then update attributes, otherwise create a new instance\n * @param graphicName the name of graphic\n * @param attributes the attributes of graphic\n * @param graphicType the type of graphic\n * @returns the graphic instance\n */\n createOrUpdateChild<T extends keyof GraphicAttributeMap>(\n graphicName: string,\n attributes: GraphicAttributeMap[T],\n graphicType: T\n ): INode {\n let graphic = this._getChildByName(graphicName) as IGraphic;\n if (graphic) {\n graphic.setAttributes(attributes);\n } else {\n graphic = application.graphicService.creator[graphicType](attributes as any);\n graphic.name = graphicName;\n this.add(graphic);\n }\n\n return graphic;\n }\n\n clone() {\n return new Group({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Group.NOWORK_ANIMATE_ATTR;\n }\n\n release(all?: boolean) {\n if (all) {\n this.forEachChildren((g: IGraphic) => {\n g.release(all);\n });\n }\n super.release();\n }\n\n protected ensureSharedStateScopeBound(): void {\n const parentScope = (this.parent as any)?.sharedStateScope ?? this.stage?.rootSharedStateScope;\n if (!this.sharedStateScope) {\n this.sharedStateScope = createGroupSharedStateScope(this, parentScope, this._sharedStateDefinitions);\n return;\n }\n\n this.sharedStateScope.ownerGroup = this;\n this.sharedStateScope.ownerStage = this.stage;\n setSharedStateScopeParent(this.sharedStateScope, parentScope);\n\n if (this.sharedStateScope.localStateDefinitions !== this._sharedStateDefinitions) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, this._sharedStateDefinitions);\n }\n }\n\n onParentSharedStateTreeChanged(stage?: IStage, layer?: ILayer): void {\n if (this.stage !== stage || this.layer !== layer) {\n this.setStage(stage, layer);\n return;\n }\n\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingFromTree();\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(stage, this.layer);\n }\n });\n }\n}\n\nexport function createGroup(attributes: IGroupGraphicAttribute): IGroup {\n return new Group(attributes);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/group.ts"],"names":[],"mappings":"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","file":"group.js","sourcesContent":["import { Point, type IAABBBounds, type Matrix } from '@visactor/vutils';\nimport { application } from '../application';\nimport type {\n IStage,\n GraphicAttributeMap,\n INode,\n IGraphic,\n ITheme,\n IThemeSpec,\n ILayer,\n GraphicType\n} from '../interface';\nimport type { IGroup, IGroupGraphicAttribute } from '../interface/graphic/group';\nimport type { IDeferredStateOwnerConfig } from './state/state-perf-monitor';\nimport { Graphic, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { getTheme, Theme } from './theme';\nimport { UpdateTag, IContainPointMode } from '../common/enums';\nimport { GROUP_NUMBER_TYPE } from './constants';\nimport { DefaultTransform } from './config';\nimport type { StateDefinitionsInput } from './state/state-definition';\nimport {\n type SharedStateScope,\n createGroupSharedStateScope,\n setSharedStateScopeLocalDefinitions,\n setSharedStateScopeParent\n} from './state/shared-state-scope';\nimport { markScopeActiveDescendantsDirty } from './state/shared-state-refresh';\n\n// Group更新AABBBounds的策略\nexport enum GroupUpdateAABBBoundsMode {\n // Group较少的情况,不会批量设置所有父层的tag,而是每次都查找\n LESS_GROUP = 0,\n // Group较多的情况,每次都会设置tag到最顶层\n MORE_GROUP = 1\n}\n\nexport class Group extends Graphic<IGroupGraphicAttribute> implements IGroup {\n type: GraphicType = 'group';\n parent: any = null;\n isContainer: boolean = true;\n // 子元素的更新标记\n declare _childUpdateTag: number;\n\n declare theme?: ITheme;\n protected _sharedStateDefinitions?: StateDefinitionsInput<Record<string, any>>;\n protected _hasSharedStateDefinitions: boolean = false;\n declare sharedStateScope?: SharedStateScope<Record<string, any>>;\n declare deferredStateConfig?: IDeferredStateOwnerConfig;\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IGroupGraphicAttribute) {\n super(params);\n this.numberType = GROUP_NUMBER_TYPE;\n this._childUpdateTag = UpdateTag.UPDATE_BOUNDS;\n // this.theme = new Theme();\n }\n\n get sharedStateDefinitions(): StateDefinitionsInput<Record<string, any>> | undefined {\n return this._sharedStateDefinitions;\n }\n\n set sharedStateDefinitions(value: StateDefinitionsInput<Record<string, any>> | undefined) {\n if (this._sharedStateDefinitions === value) {\n return;\n }\n\n const previousScope = this.sharedStateScope;\n this._sharedStateDefinitions = value;\n this._hasSharedStateDefinitions = !!value && Object.keys(value).length > 0;\n this.ensureSharedStateScopeBound();\n if (this.sharedStateScope) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, value);\n markScopeActiveDescendantsDirty(this.sharedStateScope, this.stage);\n }\n if (previousScope !== this.sharedStateScope) {\n this.notifyChildrenSharedStateTreeChanged();\n }\n }\n\n setMode(mode: '2d' | '3d') {\n mode === '3d' ? this.set3dMode() : this.set2dMode();\n }\n\n set3dMode() {\n this.in3dMode = true;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('3d');\n // });\n }\n set2dMode() {\n this.in3dMode = false;\n // this.forEachChildren((c: IGraphic) => {\n // c.setMode('2d');\n // });\n }\n\n setTheme(t: IThemeSpec) {\n if (!this.theme) {\n this.theme = new Theme();\n }\n return this.theme.setTheme(t, this);\n }\n\n createTheme() {\n if (!this.theme) {\n this.theme = new Theme();\n }\n }\n\n visibleAll(visible: boolean) {\n this.setAttribute('visible', visible);\n this.forEachChildren((item: IGraphic) => {\n if (item.isContainer && (item as any).visibleAll) {\n (item as any).visibleAll(visible);\n } else {\n item.setAttribute('visible', visible);\n }\n });\n }\n\n hideAll() {\n this.visibleAll(false);\n }\n\n showAll() {\n this.visibleAll(true);\n }\n\n /**\n * 是否包含某个点(点需要是全局坐标系)\n * group containsPoint 只需要判断bounds\n * TODO: group的shape判断\n * @param x\n * @param y\n * @param mode\n * @returns\n */\n containsPoint(x: number, y: number, mode: IContainPointMode): boolean {\n if (mode === IContainPointMode.GLOBAL) {\n // 转换x,y更精准\n const point = new Point(x, y);\n if (this.parent) {\n this.parent.globalTransMatrix.transformPoint(point, point);\n }\n return this.AABBBounds.contains(point.x, point.y);\n }\n return this.AABBBounds.contains(x, y);\n }\n\n shouldUpdateAABBBounds(): boolean {\n // 检索自己是否需要更新\n if (super.shouldUpdateAABBBounds()) {\n return true;\n }\n // 检索叶子节点是否有更新(如果children是叶子节点的话)\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return true;\n }\n return false;\n // // 检索是否子group需要更新\n // let needUpdate = false;\n // this.forEachChildren((node: IGraphic) => {\n // // 只查找group层级\n // if (node.isContainer && (node as Group).shouldUpdateAABBBounds()) {\n // needUpdate = true;\n // return true;\n // }\n // return false;\n // });\n // return needUpdate;\n }\n\n protected tryUpdateAABBBounds(): IAABBBounds {\n if (!this.shouldUpdateAABBBounds()) {\n return this._AABBBounds;\n }\n this.getGraphicService().beforeUpdateAABBBounds(this, this.stage, true, this._AABBBounds);\n const selfChange = this.shouldSelfChangeUpdateAABBBounds();\n const bounds = this.doUpdateAABBBounds();\n this.addUpdateLayoutTag();\n this.getGraphicService().afterUpdateAABBBounds(this, this.stage, this._AABBBounds, this, selfChange);\n // 直接返回空Bounds,但是前面的流程还是要走\n if (this.attribute.boundsMode === 'empty') {\n bounds.clear();\n }\n return bounds;\n }\n\n /**\n * 大部分group不需要更新matrix,这里特殊优化一下\n * 更新局部matrix的具体函数\n */\n protected doUpdateLocalMatrix() {\n const {\n x = DefaultTransform.x,\n y = DefaultTransform.y,\n dx = DefaultTransform.dx,\n dy = DefaultTransform.dy,\n scaleX = DefaultTransform.scaleX,\n scaleY = DefaultTransform.scaleY,\n angle = DefaultTransform.angle,\n postMatrix\n } = this.attribute;\n if (x === 0 && y === 0 && dx === 0 && dy === 0 && scaleX === 1 && scaleY === 1 && angle === 0 && !postMatrix) {\n this._transMatrix.reset();\n return;\n }\n return super.doUpdateLocalMatrix();\n }\n\n getGraphicTheme(): Required<IGroupGraphicAttribute> {\n return getTheme(this).group;\n }\n\n protected updateAABBBounds(\n attribute: IGroupGraphicAttribute,\n groupTheme: Required<IGroupGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n const originalAABBBounds = aabbBounds; // fix aabbbounds update error in flex layout\n aabbBounds = aabbBounds.clone();\n\n const { width, height, path, clip = groupTheme.clip } = attribute;\n // 添加自身的fill或者clip\n if (path && path.length) {\n path.forEach(g => {\n aabbBounds.union(g.AABBBounds);\n });\n } else if (width != null && height != null) {\n aabbBounds.set(0, 0, Math.max(0, width), Math.max(0, height)); // fix bounds set when auto size in vtable\n }\n if (!clip) {\n // 添加子节点\n this.forEachChildren((node: IGraphic) => {\n aabbBounds.union(node.AABBBounds);\n });\n // 如果没有clip的话,还需要加一下scroll\n const { scrollX = 0, scrollY = 0 } = attribute;\n aabbBounds.translate(scrollX, scrollY);\n }\n application.graphicService.updateTempAABBBounds(aabbBounds);\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, groupTheme, false, this);\n\n originalAABBBounds.copy(aabbBounds);\n return originalAABBBounds;\n }\n\n protected doUpdateAABBBounds(): IAABBBounds {\n this.updateAABBBoundsStamp++;\n const bounds = super.doUpdateAABBBounds();\n\n // 更新bounds之后需要设置父节点,否则tag丢失\n this.parent && this.parent.addChildUpdateBoundTag();\n this._emitCustomEvent('AAABBBoundsChange');\n\n return bounds;\n }\n\n protected clearUpdateBoundTag() {\n this._updateTag &= UpdateTag.CLEAR_BOUNDS;\n this._childUpdateTag &= UpdateTag.CLEAR_BOUNDS;\n }\n\n addUpdateBoundTag() {\n this._updateTag |= UpdateTag.UPDATE_BOUNDS; // for bounds\n if (this.parent) {\n this.parent.addChildUpdateBoundTag();\n }\n }\n\n addChildUpdateBoundTag() {\n // 如果已经设置过updateTag,那就不需要设置了\n if (this._childUpdateTag & UpdateTag.UPDATE_BOUNDS) {\n return;\n }\n // 如果没有设置过,那么继续向上设置\n this._childUpdateTag |= UpdateTag.UPDATE_BOUNDS;\n this.parent && this.parent.addChildUpdateBoundTag();\n }\n\n getTheme() {\n return this.theme.getTheme(this);\n }\n\n /* 场景树结构 */\n incrementalAppendChild(node: INode): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n this.getGraphicService().onAddIncremental(node as unknown as IGraphic, this, this.stage);\n return data;\n }\n incrementalClearChild(): void {\n super.removeAllChild();\n this.addUpdateBoundTag();\n this.getGraphicService().onClearIncremental(this, this.stage);\n return;\n }\n\n protected _updateChildToStage(child: IGraphic) {\n if (child) {\n if (this.stage && (child.stage !== this.stage || child.layer !== this.layer)) {\n child.setStage(this.stage, this.layer);\n } else if ((child as any).onParentSharedStateTreeChanged) {\n (child as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return child;\n }\n // TODO 代码优化\n appendChild(node: INode, addStage: boolean = true): INode | null {\n const data = super.appendChild(node);\n if (data) {\n if (\n addStage &&\n this.stage &&\n ((data as unknown as this).stage !== this.stage || (data as unknown as this).layer !== this.layer)\n ) {\n (data as unknown as this).setStage(this.stage, this.layer);\n } else if ((data as any).onParentSharedStateTreeChanged) {\n (data as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n }\n this.addUpdateBoundTag();\n return data;\n }\n insertBefore(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertBefore(newNode, referenceNode) as undefined as IGraphic);\n }\n insertAfter(newNode: INode, referenceNode: INode): INode | null {\n return this._updateChildToStage(super.insertAfter(newNode, referenceNode) as undefined as IGraphic);\n }\n insertInto(newNode: INode, idx: number): INode | null {\n return this._updateChildToStage(super.insertInto(newNode, idx) as undefined as IGraphic);\n }\n\n removeChild(child: IGraphic, highPerformance: boolean = false): IGraphic {\n const data = super.removeChild(child);\n if (!data) {\n return data as IGraphic;\n }\n if (highPerformance) {\n child.detachStageForRelease?.();\n return data as IGraphic;\n }\n this.getGraphicService().onRemove(child);\n child.setStage(null as any, null as any);\n this.addUpdateBoundTag();\n return data as IGraphic;\n }\n\n removeAllChild(deep: boolean = false): void {\n const children = this.children.slice() as IGraphic[];\n this.forEachChildren((child: IGraphic) => {\n this.getGraphicService().onRemove(child);\n if (deep && child.isContainer) {\n child.removeAllChild(deep);\n }\n });\n super.removeAllChild();\n children.forEach(child => {\n child.setStage(null as any, null as any);\n });\n this.addUpdateBoundTag();\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n const graphicService = stage?.graphicService ?? this.stage?.graphicService ?? application.graphicService;\n const needsSharedStateTreeSync =\n this._hasSharedStateDefinitions ||\n this.sharedStateScope ||\n this.currentStates?.length ||\n this.boundSharedStateScope ||\n this.registeredActiveScopes?.size ||\n this.sharedStateDirty;\n if (this.stage !== stage) {\n this.stage = stage;\n this.layer = layer;\n if (needsSharedStateTreeSync) {\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingOnTreeChange(true);\n }\n this.setStageToShadowRoot(stage, layer);\n this._onSetStage && this._onSetStage(this, stage, layer);\n graphicService?.onSetStage?.(this, stage);\n this.forEachChildren(item => {\n (item as any).setStage(stage, this.layer);\n });\n return;\n }\n\n const layerChanged = this.layer !== layer;\n if (layerChanged) {\n this.layer = layer;\n }\n if (needsSharedStateTreeSync) {\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingOnTreeChange(true);\n this.notifyChildrenSharedStateTreeChanged();\n } else if (layerChanged) {\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(stage, this.layer);\n }\n });\n }\n }\n /**\n * 更新位置tag,包括全局tag和局部tag\n */\n addUpdatePositionTag() {\n super.addUpdatePositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * 更新全局位置tag\n */\n addUpdateGlobalPositionTag() {\n super.addUpdateGlobalPositionTag();\n // 批量设置底层group的global tag\n this.forEachChildren((g: Group) => {\n if (g.isContainer) {\n g.addUpdateGlobalPositionTag();\n }\n });\n }\n /**\n * group更新全局的transMatrix\n * @param clearTag\n * @returns\n */\n protected tryUpdateGlobalTransMatrix(clearTag: boolean = true): Matrix {\n if (this.shouldUpdateGlobalMatrix()) {\n if (!this._globalTransMatrix) {\n this._globalTransMatrix = this.parent\n ? (this.parent as IGroup).globalTransMatrix.clone()\n : this.transMatrix.clone();\n } else if (this.parent) {\n const m = (this.parent as IGroup).globalTransMatrix;\n this._globalTransMatrix.setValue(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n this.doUpdateGlobalMatrix();\n clearTag && this.clearUpdateGlobalPositionTag();\n }\n return this._globalTransMatrix;\n }\n /**\n * 查找自身更新global的tag,如果存在,就更新\n * @returns\n */\n shouldUpdateGlobalMatrix(): boolean {\n const shouldUpdate = !!(this._updateTag & UpdateTag.UPDATE_GLOBAL_MATRIX);\n return shouldUpdate;\n }\n\n private _getChildByName<T extends INode = INode>(name: string, deep?: boolean): T | null {\n return this.find(node => node.name === name, deep);\n }\n\n /**\n * if graphic exist then update attributes, otherwise create a new instance\n * @param graphicName the name of graphic\n * @param attributes the attributes of graphic\n * @param graphicType the type of graphic\n * @returns the graphic instance\n */\n createOrUpdateChild<T extends keyof GraphicAttributeMap>(\n graphicName: string,\n attributes: GraphicAttributeMap[T],\n graphicType: T\n ): INode {\n let graphic = this._getChildByName(graphicName) as IGraphic;\n if (graphic) {\n graphic.setAttributes(attributes);\n } else {\n graphic = application.graphicService.creator[graphicType](attributes as any);\n graphic.name = graphicName;\n this.add(graphic);\n }\n\n return graphic;\n }\n\n clone() {\n return new Group({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Group.NOWORK_ANIMATE_ATTR;\n }\n\n release(all?: boolean) {\n if (all) {\n this.forEachChildren((g: IGraphic) => {\n g.release(all);\n });\n }\n super.release();\n }\n\n detachStageForRelease() {\n super.detachStageForRelease();\n this.sharedStateScope = undefined;\n this.forEachChildren((item: IGraphic) => {\n item.detachStageForRelease?.();\n });\n }\n\n protected ensureSharedStateScopeBound(): void {\n if (!this.hasSharedStateDefinitions()) {\n this.sharedStateScope = undefined;\n return;\n }\n\n const parentScope = (this.parent as any)?.sharedStateScope ?? this.stage?.rootSharedStateScope;\n if (!this.sharedStateScope) {\n this.sharedStateScope = createGroupSharedStateScope(this, parentScope, this._sharedStateDefinitions);\n return;\n }\n\n this.sharedStateScope.ownerGroup = this;\n this.sharedStateScope.ownerStage = this.stage;\n setSharedStateScopeParent(this.sharedStateScope, parentScope);\n\n if (this.sharedStateScope.localStateDefinitions !== this._sharedStateDefinitions) {\n setSharedStateScopeLocalDefinitions(this.sharedStateScope, this._sharedStateDefinitions);\n }\n }\n\n protected hasSharedStateDefinitions(): boolean {\n return this._hasSharedStateDefinitions;\n }\n\n protected notifyChildrenSharedStateTreeChanged(): void {\n this.forEachChildren(item => {\n if ((item as any).onParentSharedStateTreeChanged) {\n (item as any).onParentSharedStateTreeChanged(this.stage, this.layer);\n }\n });\n }\n\n onParentSharedStateTreeChanged(stage?: IStage, layer?: ILayer): void {\n if (this.stage !== stage || this.layer !== layer) {\n this.setStage(stage, layer);\n return;\n }\n\n this.ensureSharedStateScopeBound();\n this.syncSharedStateScopeBindingOnTreeChange(!!this.currentStates?.length);\n this.notifyChildrenSharedStateTreeChanged();\n }\n}\n\nexport function createGroup(attributes: IGroupGraphicAttribute): IGroup {\n return new Group(attributes);\n}\n"]}
|
package/cjs/graphic/rect.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ export declare class Rect extends Graphic<IRectGraphicAttribute> implements IRec
|
|
|
40
40
|
protected updateAABBBounds(attribute: IRectGraphicAttribute, rectTheme: Required<IRectGraphicAttribute>, aabbBounds: IAABBBounds): import("@visactor/vutils").IBounds;
|
|
41
41
|
protected needUpdateTags(keys: string[]): boolean;
|
|
42
42
|
protected needUpdateTag(key: string): boolean;
|
|
43
|
+
protected shouldSkipStateTransitionDefaultAttribute(key: string, targetAttrs?: Partial<IRectGraphicAttribute>): boolean;
|
|
44
|
+
protected getStateTransitionDefaultAttribute(key: string, targetAttrs?: Partial<IRectGraphicAttribute>): any;
|
|
43
45
|
toCustomPath(): ICustomPath2D;
|
|
44
46
|
clone(): Rect;
|
|
45
47
|
getNoWorkAnimateAttr(): Record<string, number>;
|
package/cjs/graphic/rect.js
CHANGED
|
@@ -38,6 +38,50 @@ class Rect extends graphic_1.Graphic {
|
|
|
38
38
|
needUpdateTag(key) {
|
|
39
39
|
return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);
|
|
40
40
|
}
|
|
41
|
+
shouldSkipStateTransitionDefaultAttribute(key, targetAttrs) {
|
|
42
|
+
var _a;
|
|
43
|
+
const attrs = null !== (_a = null != targetAttrs ? targetAttrs : this.baseAttributes) && void 0 !== _a ? _a : this.attribute, hasValue = attrKey => null != attrs[attrKey], isNilValue = attrKey => null == attrs[attrKey];
|
|
44
|
+
switch (key) {
|
|
45
|
+
case "width":
|
|
46
|
+
return isNilValue("width") && hasValue("x") && hasValue("x1");
|
|
47
|
+
|
|
48
|
+
case "height":
|
|
49
|
+
return isNilValue("height") && hasValue("y") && hasValue("y1");
|
|
50
|
+
|
|
51
|
+
case "x1":
|
|
52
|
+
return isNilValue("x1") && hasValue("x") && hasValue("width");
|
|
53
|
+
|
|
54
|
+
case "y1":
|
|
55
|
+
return isNilValue("y1") && hasValue("y") && hasValue("height");
|
|
56
|
+
|
|
57
|
+
default:
|
|
58
|
+
return !1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
getStateTransitionDefaultAttribute(key, targetAttrs) {
|
|
62
|
+
var _a;
|
|
63
|
+
const attrs = null !== (_a = null != targetAttrs ? targetAttrs : this.baseAttributes) && void 0 !== _a ? _a : this.attribute, getNumber = attrKey => {
|
|
64
|
+
const value = attrs[attrKey];
|
|
65
|
+
return "number" == typeof value && Number.isFinite(value) ? value : void 0;
|
|
66
|
+
}, x = getNumber("x"), y = getNumber("y"), x1 = getNumber("x1"), y1 = getNumber("y1"), width = getNumber("width"), height = getNumber("height");
|
|
67
|
+
switch (key) {
|
|
68
|
+
case "width":
|
|
69
|
+
if (null == width && null != x && null != x1) return x1 - x;
|
|
70
|
+
break;
|
|
71
|
+
|
|
72
|
+
case "height":
|
|
73
|
+
if (null == height && null != y && null != y1) return y1 - y;
|
|
74
|
+
break;
|
|
75
|
+
|
|
76
|
+
case "x1":
|
|
77
|
+
if (null == x1 && null != x && null != width) return x + width;
|
|
78
|
+
break;
|
|
79
|
+
|
|
80
|
+
case "y1":
|
|
81
|
+
if (null == y1 && null != y && null != height) return y + height;
|
|
82
|
+
}
|
|
83
|
+
return super.getStateTransitionDefaultAttribute(key, targetAttrs);
|
|
84
|
+
}
|
|
41
85
|
toCustomPath() {
|
|
42
86
|
let path = super.toCustomPath();
|
|
43
87
|
if (path) return path;
|
package/cjs/graphic/rect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/rect.ts"],"names":[],"mappings":"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","file":"rect.js","sourcesContent":["import type { IAABBBounds } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { GraphicType, ICustomPath2D, IRect, IRectGraphicAttribute } from '../interface';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { RECT_NUMBER_TYPE } from './constants';\nimport { normalizeRectAttributes } from '../common/rect-utils';\nimport { updateBoundsOfCommonOuterBorder } from './graphic-service/common-outer-boder-bounds';\nimport { EmptyContext2d } from '../canvas';\n\nconst RECT_UPDATE_TAG_KEY = ['width', 'x1', 'y1', 'height', 'cornerRadius', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Rect extends Graphic<IRectGraphicAttribute> implements IRect {\n type: GraphicType = 'rect';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IRectGraphicAttribute) {\n super(params);\n this.numberType = RECT_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n return true;\n // 暂时不判断,理论上认为都是合法的,节省性能耗时\n // const { width, x1, y1, height } = this.attribute;\n // return (this._validNumber(width) || this._validNumber(x1)) && (this._validNumber(height) || this._validNumber(y1));\n }\n\n getGraphicTheme(): Required<IRectGraphicAttribute> {\n return getTheme(this).rect;\n }\n\n protected updateAABBBounds(\n attribute: IRectGraphicAttribute,\n rectTheme: Required<IRectGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n if (!this.updatePathProxyAABBBounds(aabbBounds)) {\n let { width, height } = attribute;\n const { x1, y1, x, y } = attribute;\n width = width ?? x1 - x;\n height = height ?? y1 - y;\n if (isFinite(width) || isFinite(height) || isFinite(x) || isFinite(y)) {\n aabbBounds.set(0, 0, width || 0, height || 0);\n }\n }\n\n const { tb1, tb2 } = application.graphicService.updateTempAABBBounds(aabbBounds);\n\n updateBoundsOfCommonOuterBorder(attribute, rectTheme, tb1);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n\n this.widthWithoutTransform = aabbBounds.x2 - aabbBounds.x1;\n this.heightWithoutTransform = aabbBounds.y2 - aabbBounds.y1;\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, rectTheme, false, this);\n return aabbBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RECT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);\n }\n\n toCustomPath(): ICustomPath2D {\n // throw new Error('暂不支持');\n let path = super.toCustomPath();\n if (path) {\n return path;\n }\n const attribute = this.attribute;\n const { x, y, width, height } = normalizeRectAttributes(attribute);\n\n path = new CustomPath2D();\n path.moveTo(x, y);\n path.rect(x, y, width, height);\n\n return path;\n }\n\n clone() {\n return new Rect({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Rect.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRect(attributes: IRectGraphicAttribute): IRect {\n return new Rect(attributes);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/rect.ts"],"names":[],"mappings":"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","file":"rect.js","sourcesContent":["import type { IAABBBounds } from '@visactor/vutils';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport type { GraphicType, ICustomPath2D, IRect, IRectGraphicAttribute } from '../interface';\nimport { CustomPath2D } from '../common/custom-path2d';\nimport { getTheme } from './theme';\nimport { application } from '../application';\nimport { RECT_NUMBER_TYPE } from './constants';\nimport { normalizeRectAttributes } from '../common/rect-utils';\nimport { updateBoundsOfCommonOuterBorder } from './graphic-service/common-outer-boder-bounds';\n\nconst RECT_UPDATE_TAG_KEY = ['width', 'x1', 'y1', 'height', 'cornerRadius', ...GRAPHIC_UPDATE_TAG_KEY];\n\nexport class Rect extends Graphic<IRectGraphicAttribute> implements IRect {\n type: GraphicType = 'rect';\n\n static NOWORK_ANIMATE_ATTR = NOWORK_ANIMATE_ATTR;\n\n constructor(params: IRectGraphicAttribute) {\n super(params);\n this.numberType = RECT_NUMBER_TYPE;\n }\n\n isValid(): boolean {\n return super.isValid() && this._isValid();\n }\n private _isValid(): boolean {\n return true;\n // 暂时不判断,理论上认为都是合法的,节省性能耗时\n // const { width, x1, y1, height } = this.attribute;\n // return (this._validNumber(width) || this._validNumber(x1)) && (this._validNumber(height) || this._validNumber(y1));\n }\n\n getGraphicTheme(): Required<IRectGraphicAttribute> {\n return getTheme(this).rect;\n }\n\n protected updateAABBBounds(\n attribute: IRectGraphicAttribute,\n rectTheme: Required<IRectGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n if (!this.updatePathProxyAABBBounds(aabbBounds)) {\n let { width, height } = attribute;\n const { x1, y1, x, y } = attribute;\n width = width ?? x1 - x;\n height = height ?? y1 - y;\n if (isFinite(width) || isFinite(height) || isFinite(x) || isFinite(y)) {\n aabbBounds.set(0, 0, width || 0, height || 0);\n }\n }\n\n const { tb1, tb2 } = application.graphicService.updateTempAABBBounds(aabbBounds);\n\n updateBoundsOfCommonOuterBorder(attribute, rectTheme, tb1);\n aabbBounds.union(tb1);\n tb1.setValue(tb2.x1, tb2.y1, tb2.x2, tb2.y2);\n\n this.widthWithoutTransform = aabbBounds.x2 - aabbBounds.x1;\n this.heightWithoutTransform = aabbBounds.y2 - aabbBounds.y1;\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, rectTheme, false, this);\n return aabbBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RECT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RECT_UPDATE_TAG_KEY);\n }\n\n protected shouldSkipStateTransitionDefaultAttribute(\n key: string,\n targetAttrs?: Partial<IRectGraphicAttribute>\n ): boolean {\n const attrs = (targetAttrs ?? this.baseAttributes ?? this.attribute) as Partial<IRectGraphicAttribute>;\n const hasValue = (attrKey: keyof IRectGraphicAttribute) => (attrs as any)[attrKey] != null;\n const isNilValue = (attrKey: keyof IRectGraphicAttribute) => (attrs as any)[attrKey] == null;\n\n switch (key) {\n case 'width':\n return isNilValue('width') && hasValue('x') && hasValue('x1');\n case 'height':\n return isNilValue('height') && hasValue('y') && hasValue('y1');\n case 'x1':\n return isNilValue('x1') && hasValue('x') && hasValue('width');\n case 'y1':\n return isNilValue('y1') && hasValue('y') && hasValue('height');\n default:\n return false;\n }\n }\n\n protected getStateTransitionDefaultAttribute(key: string, targetAttrs?: Partial<IRectGraphicAttribute>) {\n const attrs = (targetAttrs ?? this.baseAttributes ?? this.attribute) as Partial<IRectGraphicAttribute>;\n const getNumber = (attrKey: keyof IRectGraphicAttribute) => {\n const value = attrs[attrKey];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n };\n const x = getNumber('x');\n const y = getNumber('y');\n const x1 = getNumber('x1');\n const y1 = getNumber('y1');\n const width = getNumber('width');\n const height = getNumber('height');\n\n switch (key) {\n case 'width':\n if (width == null && x != null && x1 != null) {\n return x1 - x;\n }\n break;\n case 'height':\n if (height == null && y != null && y1 != null) {\n return y1 - y;\n }\n break;\n case 'x1':\n if (x1 == null && x != null && width != null) {\n return x + width;\n }\n break;\n case 'y1':\n if (y1 == null && y != null && height != null) {\n return y + height;\n }\n break;\n }\n\n return super.getStateTransitionDefaultAttribute(key, targetAttrs);\n }\n\n toCustomPath(): ICustomPath2D {\n // throw new Error('暂不支持');\n let path = super.toCustomPath();\n if (path) {\n return path;\n }\n const attribute = this.attribute;\n const { x, y, width, height } = normalizeRectAttributes(attribute);\n\n path = new CustomPath2D();\n path.moveTo(x, y);\n path.rect(x, y, width, height);\n\n return path;\n }\n\n clone() {\n return new Rect({ ...this.attribute });\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return Rect.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRect(attributes: IRectGraphicAttribute): IRect {\n return new Rect(attributes);\n}\n"]}
|
|
@@ -8,7 +8,7 @@ const state_perf_monitor_1 = require("./state-perf-monitor");
|
|
|
8
8
|
|
|
9
9
|
function scheduleStageSharedStateRefresh(stage) {
|
|
10
10
|
var _a;
|
|
11
|
-
stage && "released" !== stage.releaseStatus && (null === (_a = (0, state_perf_monitor_1.
|
|
11
|
+
stage && "released" !== stage.releaseStatus && (null === (_a = (0, state_perf_monitor_1.getActiveStageStatePerfMonitor)(stage)) || void 0 === _a || _a.recordRefresh("renderScheduled"),
|
|
12
12
|
stage.renderNextFrame());
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -18,7 +18,7 @@ function enqueueGraphicSharedStateRefresh(stage, graphic) {
|
|
|
18
18
|
const pending = null !== (_a = stage._pendingSharedStateRefreshGraphics) && void 0 !== _a ? _a : stage._pendingSharedStateRefreshGraphics = new Set;
|
|
19
19
|
if (!pending.has(graphic)) {
|
|
20
20
|
pending.add(graphic);
|
|
21
|
-
const perfMonitor = (0, state_perf_monitor_1.
|
|
21
|
+
const perfMonitor = (0, state_perf_monitor_1.getActiveStageStatePerfMonitor)(stage);
|
|
22
22
|
null == perfMonitor || perfMonitor.recordRefresh("queuedGraphics"), null == perfMonitor || perfMonitor.recordAllocation("refreshQueuePushes");
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -36,11 +36,12 @@ function markScopeActiveDescendantsDirty(scope, stage) {
|
|
|
36
36
|
function flushStageSharedStateRefresh(stage) {
|
|
37
37
|
const pending = stage._pendingSharedStateRefreshGraphics;
|
|
38
38
|
if (!pending || !pending.size) return;
|
|
39
|
-
const perfMonitor = (0, state_perf_monitor_1.
|
|
39
|
+
const perfMonitor = (0, state_perf_monitor_1.getActiveStageStatePerfMonitor)(stage), start = perfMonitor ? performance.now() : 0, graphics = Array.from(pending.values());
|
|
40
40
|
pending.clear(), null == perfMonitor || perfMonitor.recordRefresh("flushedGraphics", graphics.length),
|
|
41
41
|
graphics.forEach((graphic => {
|
|
42
42
|
if ("released" === graphic.releaseStatus) return;
|
|
43
43
|
if (graphic.stage !== stage) return;
|
|
44
|
+
if (!graphic.sharedStateDirty) return;
|
|
44
45
|
const refresh = graphic.refreshSharedStateBeforeRender;
|
|
45
46
|
"function" == typeof refresh && (refresh.call(graphic), null == perfMonitor || perfMonitor.incrementCounter("sharedRefreshCommits"));
|
|
46
47
|
})), perfMonitor && (perfMonitor.recordCost("sharedRefresh", performance.now() - start),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/state/shared-state-refresh.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"sources":["../src/graphic/state/shared-state-refresh.ts"],"names":[],"mappings":"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","file":"shared-state-refresh.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { SharedStateScope } from './shared-state-scope';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nexport function scheduleStageSharedStateRefresh(stage: IStage | undefined): void {\n if (!stage || (stage as any).releaseStatus === 'released') {\n return;\n }\n\n getActiveStageStatePerfMonitor(stage)?.recordRefresh('renderScheduled');\n stage.renderNextFrame();\n}\n\nexport function enqueueGraphicSharedStateRefresh(stage: IStage | undefined, graphic: IGraphic): void {\n if (!stage) {\n return;\n }\n\n const pending =\n ((stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined) ??\n (((stage as any)._pendingSharedStateRefreshGraphics = new Set<IGraphic>()) as Set<IGraphic>);\n\n if (!pending.has(graphic)) {\n pending.add(graphic);\n const perfMonitor = getActiveStageStatePerfMonitor(stage);\n perfMonitor?.recordRefresh('queuedGraphics');\n perfMonitor?.recordAllocation('refreshQueuePushes');\n }\n}\n\nexport function markScopeActiveDescendantsDirty<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n stage?: IStage\n): void {\n let marked = false;\n scope.subtreeActiveDescendants.forEach(graphic => {\n (graphic as any).sharedStateDirty = true;\n const ownerStage = stage ?? graphic.stage ?? scope.ownerStage;\n enqueueGraphicSharedStateRefresh(ownerStage, graphic);\n marked = true;\n });\n\n if (marked) {\n scheduleStageSharedStateRefresh(stage ?? scope.ownerStage);\n }\n}\n\nexport function flushStageSharedStateRefresh(stage: IStage): void {\n const pending = (stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined;\n if (!pending || !pending.size) {\n return;\n }\n\n const perfMonitor = getActiveStageStatePerfMonitor(stage);\n const start = perfMonitor ? performance.now() : 0;\n const graphics = Array.from(pending.values());\n pending.clear();\n perfMonitor?.recordRefresh('flushedGraphics', graphics.length);\n\n graphics.forEach(graphic => {\n if ((graphic as any).releaseStatus === 'released') {\n return;\n }\n if (graphic.stage !== stage) {\n return;\n }\n if (!(graphic as any).sharedStateDirty) {\n return;\n }\n\n const refresh = (graphic as any).refreshSharedStateBeforeRender;\n if (typeof refresh === 'function') {\n refresh.call(graphic);\n perfMonitor?.incrementCounter('sharedRefreshCommits');\n }\n });\n\n if (perfMonitor) {\n perfMonitor.recordCost('sharedRefresh', performance.now() - start);\n perfMonitor.recordEvent('shared-refresh-flush', {\n stageId: (stage as any)._uid,\n flushedGraphics: graphics.length\n });\n }\n}\n"]}
|
|
@@ -78,7 +78,7 @@ function rebuildSharedStateScope(scope) {
|
|
|
78
78
|
|
|
79
79
|
function ensureSharedStateScopeFresh(scope) {
|
|
80
80
|
var _a;
|
|
81
|
-
if (scope) return null === (_a = (0, state_perf_monitor_1.
|
|
81
|
+
if (scope) return null === (_a = (0, state_perf_monitor_1.getActiveStageStatePerfMonitor)(scope.ownerStage)) || void 0 === _a || _a.recordRefresh("ensureFreshCalls"),
|
|
82
82
|
scope.parentScope && ensureSharedStateScopeFresh(scope.parentScope), (scope.dirty || scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision) && rebuildSharedStateScope(scope),
|
|
83
83
|
scope;
|
|
84
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/state/shared-state-scope.ts"],"names":[],"mappings":";;;AAEA,2EAAsE;AAEtE,
|
|
1
|
+
{"version":3,"sources":["../src/graphic/state/shared-state-scope.ts"],"names":[],"mappings":"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","file":"shared-state-scope.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { IGroup } from '../../interface/graphic/group';\nimport { StateDefinitionCompiler } from './state-definition-compiler';\nimport type { CompiledStateDefinition, StateDefinitionsInput } from './state-definition';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nexport interface SharedStateScope<T extends Record<string, any> = Record<string, any>> {\n ownerKind: 'group' | 'root';\n ownerGroup?: IGroup;\n ownerStage?: IStage;\n parentScope?: SharedStateScope<T>;\n themeStateDefinitions?: StateDefinitionsInput<T>;\n localStateDefinitions?: StateDefinitionsInput<T>;\n effectiveSourceDefinitions: StateDefinitionsInput<T>;\n effectiveCompiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n revision: number;\n parentRevisionAtBuild?: number;\n dirty: boolean;\n subtreeActiveDescendants: Set<IGraphic>;\n}\n\nconst compiler = new StateDefinitionCompiler<any>();\n\nfunction copyDefinitions<T extends Record<string, any>>(\n definitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n return definitions ? ({ ...definitions } as StateDefinitionsInput<T>) : ({} as StateDefinitionsInput<T>);\n}\n\nfunction buildEffectiveSourceDefinitions<T extends Record<string, any>>(\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n const merged = parentScope\n ? copyDefinitions(parentScope.effectiveSourceDefinitions)\n : copyDefinitions(themeStateDefinitions);\n\n if (localStateDefinitions) {\n Object.keys(localStateDefinitions).forEach(stateName => {\n merged[stateName] = localStateDefinitions[stateName];\n });\n }\n\n return merged;\n}\n\nfunction initializeScope<T extends Record<string, any>>(\n scope: SharedStateScope<T>,\n revision: number = 0\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision = revision;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function createRootSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n stage: IStage,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return initializeScope(\n {\n ownerKind: 'root',\n ownerStage: stage,\n themeStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function createGroupSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n group: IGroup,\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return initializeScope(\n {\n ownerKind: 'group',\n ownerGroup: group,\n ownerStage: group.stage,\n parentScope,\n localStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function setSharedStateScopeParent<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n parentScope?: SharedStateScope<T>\n): boolean {\n if (scope.parentScope === parentScope) {\n return false;\n }\n\n scope.parentScope = parentScope;\n scope.dirty = true;\n return true;\n}\n\nexport function setSharedStateScopeLocalDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.localStateDefinitions === localStateDefinitions) {\n return false;\n }\n\n scope.localStateDefinitions = localStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function setRootSharedStateScopeThemeDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.themeStateDefinitions === themeStateDefinitions) {\n return false;\n }\n\n scope.themeStateDefinitions = themeStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function rebuildSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision += 1;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function ensureSharedStateScopeFresh<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T> | undefined {\n if (!scope) {\n return undefined;\n }\n\n getActiveStageStatePerfMonitor(scope.ownerStage)?.recordRefresh('ensureFreshCalls');\n\n if (scope.parentScope) {\n ensureSharedStateScopeFresh(scope.parentScope);\n }\n\n if (scope.dirty || (scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision)) {\n rebuildSharedStateScope(scope);\n }\n\n return scope;\n}\n\nexport function collectSharedStateScopeChain<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T>[] {\n const chain: SharedStateScope<T>[] = [];\n let current = scope;\n\n while (current) {\n chain.push(current);\n current = current.parentScope;\n }\n\n return chain;\n}\n"]}
|
|
@@ -106,7 +106,7 @@ class StateEngine {
|
|
|
106
106
|
invalidateResolverCache() {
|
|
107
107
|
var _a, _b;
|
|
108
108
|
this.resolverPatchCache.clear(), this.resolverCacheKey = "", this.resolverCacheValid = !1,
|
|
109
|
-
null === (_b = (0, state_perf_monitor_1.
|
|
109
|
+
null === (_b = (0, state_perf_monitor_1.getActiveStageStatePerfMonitor)(null === (_a = this.graphic) || void 0 === _a ? void 0 : _a.stage)) || void 0 === _b || _b.recordResolver("invalidations");
|
|
110
110
|
}
|
|
111
111
|
hasState(stateName) {
|
|
112
112
|
return !!this._activeStates.length && (null == stateName || this._activeStates.includes(stateName));
|
|
@@ -148,7 +148,7 @@ class StateEngine {
|
|
|
148
148
|
}
|
|
149
149
|
recomputePatch(effectiveStates) {
|
|
150
150
|
var _a;
|
|
151
|
-
const perfMonitor = (0, state_perf_monitor_1.
|
|
151
|
+
const perfMonitor = (0, state_perf_monitor_1.getActiveStageStatePerfMonitor)(null === (_a = this.graphic) || void 0 === _a ? void 0 : _a.stage), patchStart = perfMonitor ? performance.now() : 0;
|
|
152
152
|
let resolverCost = 0;
|
|
153
153
|
const cacheKey = effectiveStates.join(","), nextPatch = {};
|
|
154
154
|
if (null == perfMonitor || perfMonitor.recordAllocation("patchObjectsCreated"),
|