@visactor/vrender-core 0.17.0-alpha.4 → 0.17.0-alpha.6
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/common/shape/rect.js +2 -1
- package/cjs/common/shape/rect.js.map +1 -1
- package/cjs/core/global.d.ts +0 -1
- package/cjs/core/global.js +1 -1
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/stage.d.ts +3 -2
- package/cjs/core/stage.js +12 -12
- package/cjs/core/stage.js.map +1 -1
- package/cjs/graphic/config.js +4 -0
- package/cjs/graphic/config.js.map +1 -1
- package/cjs/graphic/graphic-service/graphic-service.js +4 -2
- package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
- package/cjs/graphic/graphic.js +3 -2
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/rect.d.ts +2 -3
- package/cjs/graphic/rect.js +3 -5
- package/cjs/graphic/rect.js.map +1 -1
- package/cjs/interface/global.d.ts +0 -1
- package/cjs/interface/global.js.map +1 -1
- package/cjs/interface/graphic/rect.d.ts +2 -0
- package/cjs/interface/graphic/rect.js.map +1 -1
- package/cjs/interface/stage.d.ts +1 -0
- package/cjs/interface/stage.js.map +1 -1
- package/cjs/render/contributions/render/base-render.js +9 -7
- package/cjs/render/contributions/render/base-render.js.map +1 -1
- package/cjs/render/contributions/render/contributions/rect-contribution-render.js +4 -1
- package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
- package/cjs/render/contributions/render/draw-contribution.d.ts +2 -2
- package/cjs/render/contributions/render/draw-contribution.js +2 -2
- package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
- package/cjs/render/contributions/render/draw-interceptor.d.ts +9 -1
- package/cjs/render/contributions/render/draw-interceptor.js +30 -18
- package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
- package/cjs/render/contributions/render/module.js +0 -6
- package/cjs/render/contributions/render/module.js.map +1 -1
- package/cjs/render/contributions/render/path-render.d.ts +2 -1
- package/cjs/render/contributions/render/path-render.js +6 -4
- package/cjs/render/contributions/render/path-render.js.map +1 -1
- package/cjs/render/contributions/render/rect-render.d.ts +2 -1
- package/cjs/render/contributions/render/rect-render.js +8 -3
- package/cjs/render/contributions/render/rect-render.js.map +1 -1
- package/cjs/render/contributions/render/utils.js +2 -2
- package/cjs/render/contributions/render/utils.js.map +1 -1
- package/cjs/render/render-service.js +1 -1
- package/cjs/render/render-service.js.map +1 -1
- package/dist/index.js +135 -93
- package/dist/index.min.js +1 -1
- package/es/common/shape/rect.js +2 -1
- package/es/common/shape/rect.js.map +1 -1
- package/es/core/global.d.ts +0 -1
- package/es/core/global.js +1 -1
- package/es/core/global.js.map +1 -1
- package/es/core/stage.d.ts +3 -2
- package/es/core/stage.js +12 -12
- package/es/core/stage.js.map +1 -1
- package/es/graphic/config.js +4 -0
- package/es/graphic/config.js.map +1 -1
- package/es/graphic/graphic-service/graphic-service.js +4 -2
- package/es/graphic/graphic-service/graphic-service.js.map +1 -1
- package/es/graphic/graphic.js +3 -2
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/rect.d.ts +2 -3
- package/es/graphic/rect.js +3 -7
- package/es/graphic/rect.js.map +1 -1
- package/es/interface/global.d.ts +0 -1
- package/es/interface/global.js.map +1 -1
- package/es/interface/graphic/rect.d.ts +2 -0
- package/es/interface/graphic/rect.js.map +1 -1
- package/es/interface/stage.d.ts +1 -0
- package/es/interface/stage.js.map +1 -1
- package/es/render/contributions/render/base-render.js +10 -6
- package/es/render/contributions/render/base-render.js.map +1 -1
- package/es/render/contributions/render/contributions/rect-contribution-render.js +4 -1
- package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
- package/es/render/contributions/render/draw-contribution.d.ts +2 -2
- package/es/render/contributions/render/draw-contribution.js +2 -2
- package/es/render/contributions/render/draw-contribution.js.map +1 -1
- package/es/render/contributions/render/draw-interceptor.d.ts +9 -1
- package/es/render/contributions/render/draw-interceptor.js +27 -26
- package/es/render/contributions/render/draw-interceptor.js.map +1 -1
- package/es/render/contributions/render/module.js +1 -4
- package/es/render/contributions/render/module.js.map +1 -1
- package/es/render/contributions/render/path-render.d.ts +2 -1
- package/es/render/contributions/render/path-render.js +5 -4
- package/es/render/contributions/render/path-render.js.map +1 -1
- package/es/render/contributions/render/rect-render.d.ts +2 -1
- package/es/render/contributions/render/rect-render.js +7 -2
- package/es/render/contributions/render/rect-render.js.map +1 -1
- package/es/render/contributions/render/utils.js +2 -2
- package/es/render/contributions/render/utils.js.map +1 -1
- package/es/render/render-service.js +1 -1
- package/es/render/render-service.js.map +1 -1
- package/package.json +3 -3
package/es/common/shape/rect.js
CHANGED
|
@@ -4,7 +4,8 @@ const halfPi = pi / 2;
|
|
|
4
4
|
|
|
5
5
|
export function createRectPath(path, x, y, width, height, rectCornerRadius) {
|
|
6
6
|
let cornerRadius;
|
|
7
|
-
if (
|
|
7
|
+
if (width < 0 && (x += width, width = -width), height < 0 && (y += height, height = -height),
|
|
8
|
+
isNumber(rectCornerRadius, !0)) cornerRadius = [ rectCornerRadius, rectCornerRadius, rectCornerRadius, rectCornerRadius ]; else if (Array.isArray(rectCornerRadius)) {
|
|
8
9
|
const cornerRadiusArr = rectCornerRadius;
|
|
9
10
|
switch (cornerRadiusArr.length) {
|
|
10
11
|
case 0:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/shape/rect.ts"],"names":[],"mappings":"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","file":"rect.js","sourcesContent":["import type { vec2, vec4 } from '@visactor/vutils';\nimport { isNumber, arrayEqual, pi } from '@visactor/vutils';\nimport type { IContext2d, ICustomPath2D } from '../../interface';\n\nconst halfPi = pi / 2;\n\nexport function createRectPath(\n path: ICustomPath2D | IContext2d,\n x: number,\n y: number,\n width: number,\n height: number,\n rectCornerRadius: number | number[]\n) {\n // 匹配cornerRadius\n let cornerRadius: vec4;\n if (isNumber(rectCornerRadius, true)) {\n cornerRadius = [\n <number>rectCornerRadius,\n <number>rectCornerRadius,\n <number>rectCornerRadius,\n <number>rectCornerRadius\n ];\n } else if (Array.isArray(rectCornerRadius)) {\n const cornerRadiusArr: number[] = rectCornerRadius as number[];\n switch (cornerRadiusArr.length) {\n case 0:\n cornerRadius = [0, 0, 0, 0];\n break;\n case 1:\n cornerRadius = [cornerRadiusArr[0], cornerRadiusArr[0], cornerRadiusArr[0], cornerRadiusArr[0]];\n break;\n case 2:\n case 3:\n cornerRadius = [cornerRadiusArr[0], cornerRadiusArr[1], cornerRadiusArr[0], cornerRadiusArr[1]];\n break;\n default:\n cornerRadius = cornerRadiusArr.slice(0, 5) as [number, number, number, number];\n break;\n }\n } else {\n cornerRadius = [0, 0, 0, 0];\n }\n\n // 当宽度小于0 或者 cornerRadius 极小时,不绘制 cornerRadius\n if (\n width < 0 ||\n Math.abs(cornerRadius[0]) + Math.abs(cornerRadius[1]) + Math.abs(cornerRadius[2]) + Math.abs(cornerRadius[3]) <\n 1e-12\n ) {\n return path.rect(x, y, width, height);\n }\n\n const [leftTop, rightTop, rightBottom, leftBottom]: [vec2, vec2, vec2, vec2] = [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height]\n ];\n //\n // *(leftTopPoint1)******************(rightTopPoint1)\n // (leftTopPoint2) (rightTopPoint2)\n // * *\n // * *\n // (leftBottomPoint2) (rightBottomPoint2)\n // *(leftBottomPoint1)***************(rightBottomPoint1)\n //\n const maxCornerRadius = Math.min(width / 2, height / 2);\n const _cornerRadius: vec4 = [\n Math.min(maxCornerRadius, cornerRadius[0]),\n Math.min(maxCornerRadius, cornerRadius[1]),\n Math.min(maxCornerRadius, cornerRadius[2]),\n Math.min(maxCornerRadius, cornerRadius[3])\n ];\n const leftTopPoint1: vec2 = [leftTop[0] + _cornerRadius[0], leftTop[1]];\n const leftTopPoint2: vec2 = [leftTop[0], leftTop[1] + _cornerRadius[0]];\n const rightTopPoint1: vec2 = [rightTop[0] - _cornerRadius[1], rightTop[1]];\n const rightTopPoint2: vec2 = [rightTop[0], rightTop[1] + _cornerRadius[1]];\n const rightBottomPoint1: vec2 = [rightBottom[0] - _cornerRadius[2], rightBottom[1]];\n const rightBottomPoint2: vec2 = [rightBottom[0], rightBottom[1] - _cornerRadius[2]];\n const leftBottomPoint1: vec2 = [leftBottom[0] + _cornerRadius[3], leftBottom[1]];\n const leftBottomPoint2: vec2 = [leftBottom[0], leftBottom[1] - _cornerRadius[3]];\n\n path.moveTo(leftTopPoint1[0], leftTopPoint1[1]);\n path.lineTo(rightTopPoint1[0], rightTopPoint1[1]);\n if (!arrayEqual(rightTopPoint1, rightTopPoint2)) {\n const centerX = rightTopPoint1[0];\n const centerY = rightTopPoint1[1] + _cornerRadius[1];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[1],\n -halfPi,\n 0,\n // Math.atan2(rightTopPoint1[1] - centerY, rightTopPoint1[0] - centerX),\n // Math.atan2(rightTopPoint2[1] - centerY, rightTopPoint2[0] - centerX),\n false\n );\n // path.arcTo(rightTop[0], rightTop[1], rightTopPoint2[0], rightTopPoint2[1], _cornerRadius[1]);\n }\n\n path.lineTo(rightBottomPoint2[0], rightBottomPoint2[1]);\n if (!arrayEqual(rightBottomPoint1, rightBottomPoint2)) {\n const centerX = rightBottomPoint2[0] - _cornerRadius[2];\n const centerY = rightBottomPoint2[1];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[2],\n 0,\n halfPi,\n // Math.atan2(rightBottomPoint2[1] - centerY, rightBottomPoint2[0] - centerX),\n // Math.atan2(rightBottomPoint1[1] - centerY, rightBottomPoint1[0] - centerX),\n false\n );\n // path.arcTo(rightBottom[0], rightBottom[1], rightBottomPoint1[0], rightBottomPoint1[1], _cornerRadius[2]);\n }\n\n path.lineTo(leftBottomPoint1[0], leftBottomPoint1[1]);\n if (!arrayEqual(leftBottomPoint1, leftBottomPoint2)) {\n const centerX = leftBottomPoint1[0];\n const centerY = leftBottomPoint1[1] - _cornerRadius[3];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[3],\n halfPi,\n pi,\n // Math.atan2(leftBottomPoint1[1] - centerY, leftBottomPoint1[0] - centerX),\n // Math.atan2(leftBottomPoint2[1] - centerY, leftBottomPoint2[0] - centerX),\n false\n );\n // path.arcTo(leftBottom[0], leftBottom[1], leftBottomPoint2[0], leftBottomPoint2[1], _cornerRadius[3]);\n }\n\n path.lineTo(leftTopPoint2[0], leftTopPoint2[1]);\n if (!arrayEqual(leftTopPoint1, leftTopPoint2)) {\n const centerX = leftTopPoint1[0];\n const centerY = leftTopPoint1[1] + _cornerRadius[0];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[0],\n pi,\n pi + halfPi,\n // Math.atan2(leftTopPoint2[1] - centerY, leftTopPoint2[0] - centerX),\n // Math.atan2(leftTopPoint1[1] - centerY, leftTopPoint1[0] - centerX) + Math.PI * 2,\n false\n );\n // path.arcTo(leftTop[0], leftTop[1], leftTopPoint1[0], leftTopPoint1[1], _cornerRadius[0]);\n }\n path.closePath();\n return path;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/shape/rect.ts"],"names":[],"mappings":"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","file":"rect.js","sourcesContent":["import type { vec2, vec4 } from '@visactor/vutils';\nimport { isNumber, arrayEqual, pi } from '@visactor/vutils';\nimport type { IContext2d, ICustomPath2D } from '../../interface';\n\nconst halfPi = pi / 2;\n\nexport function createRectPath(\n path: ICustomPath2D | IContext2d,\n x: number,\n y: number,\n width: number,\n height: number,\n rectCornerRadius: number | number[]\n) {\n if (width < 0) {\n x += width;\n width = -width;\n }\n if (height < 0) {\n y += height;\n height = -height;\n }\n // 匹配cornerRadius\n let cornerRadius: vec4;\n if (isNumber(rectCornerRadius, true)) {\n cornerRadius = [\n <number>rectCornerRadius,\n <number>rectCornerRadius,\n <number>rectCornerRadius,\n <number>rectCornerRadius\n ];\n } else if (Array.isArray(rectCornerRadius)) {\n const cornerRadiusArr: number[] = rectCornerRadius as number[];\n switch (cornerRadiusArr.length) {\n case 0:\n cornerRadius = [0, 0, 0, 0];\n break;\n case 1:\n cornerRadius = [cornerRadiusArr[0], cornerRadiusArr[0], cornerRadiusArr[0], cornerRadiusArr[0]];\n break;\n case 2:\n case 3:\n cornerRadius = [cornerRadiusArr[0], cornerRadiusArr[1], cornerRadiusArr[0], cornerRadiusArr[1]];\n break;\n default:\n cornerRadius = cornerRadiusArr.slice(0, 5) as [number, number, number, number];\n break;\n }\n } else {\n cornerRadius = [0, 0, 0, 0];\n }\n\n // 当宽度小于0 或者 cornerRadius 极小时,不绘制 cornerRadius\n if (\n width < 0 ||\n Math.abs(cornerRadius[0]) + Math.abs(cornerRadius[1]) + Math.abs(cornerRadius[2]) + Math.abs(cornerRadius[3]) <\n 1e-12\n ) {\n return path.rect(x, y, width, height);\n }\n\n const [leftTop, rightTop, rightBottom, leftBottom]: [vec2, vec2, vec2, vec2] = [\n [x, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height]\n ];\n //\n // *(leftTopPoint1)******************(rightTopPoint1)\n // (leftTopPoint2) (rightTopPoint2)\n // * *\n // * *\n // (leftBottomPoint2) (rightBottomPoint2)\n // *(leftBottomPoint1)***************(rightBottomPoint1)\n //\n const maxCornerRadius = Math.min(width / 2, height / 2);\n const _cornerRadius: vec4 = [\n Math.min(maxCornerRadius, cornerRadius[0]),\n Math.min(maxCornerRadius, cornerRadius[1]),\n Math.min(maxCornerRadius, cornerRadius[2]),\n Math.min(maxCornerRadius, cornerRadius[3])\n ];\n const leftTopPoint1: vec2 = [leftTop[0] + _cornerRadius[0], leftTop[1]];\n const leftTopPoint2: vec2 = [leftTop[0], leftTop[1] + _cornerRadius[0]];\n const rightTopPoint1: vec2 = [rightTop[0] - _cornerRadius[1], rightTop[1]];\n const rightTopPoint2: vec2 = [rightTop[0], rightTop[1] + _cornerRadius[1]];\n const rightBottomPoint1: vec2 = [rightBottom[0] - _cornerRadius[2], rightBottom[1]];\n const rightBottomPoint2: vec2 = [rightBottom[0], rightBottom[1] - _cornerRadius[2]];\n const leftBottomPoint1: vec2 = [leftBottom[0] + _cornerRadius[3], leftBottom[1]];\n const leftBottomPoint2: vec2 = [leftBottom[0], leftBottom[1] - _cornerRadius[3]];\n\n path.moveTo(leftTopPoint1[0], leftTopPoint1[1]);\n path.lineTo(rightTopPoint1[0], rightTopPoint1[1]);\n if (!arrayEqual(rightTopPoint1, rightTopPoint2)) {\n const centerX = rightTopPoint1[0];\n const centerY = rightTopPoint1[1] + _cornerRadius[1];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[1],\n -halfPi,\n 0,\n // Math.atan2(rightTopPoint1[1] - centerY, rightTopPoint1[0] - centerX),\n // Math.atan2(rightTopPoint2[1] - centerY, rightTopPoint2[0] - centerX),\n false\n );\n // path.arcTo(rightTop[0], rightTop[1], rightTopPoint2[0], rightTopPoint2[1], _cornerRadius[1]);\n }\n\n path.lineTo(rightBottomPoint2[0], rightBottomPoint2[1]);\n if (!arrayEqual(rightBottomPoint1, rightBottomPoint2)) {\n const centerX = rightBottomPoint2[0] - _cornerRadius[2];\n const centerY = rightBottomPoint2[1];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[2],\n 0,\n halfPi,\n // Math.atan2(rightBottomPoint2[1] - centerY, rightBottomPoint2[0] - centerX),\n // Math.atan2(rightBottomPoint1[1] - centerY, rightBottomPoint1[0] - centerX),\n false\n );\n // path.arcTo(rightBottom[0], rightBottom[1], rightBottomPoint1[0], rightBottomPoint1[1], _cornerRadius[2]);\n }\n\n path.lineTo(leftBottomPoint1[0], leftBottomPoint1[1]);\n if (!arrayEqual(leftBottomPoint1, leftBottomPoint2)) {\n const centerX = leftBottomPoint1[0];\n const centerY = leftBottomPoint1[1] - _cornerRadius[3];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[3],\n halfPi,\n pi,\n // Math.atan2(leftBottomPoint1[1] - centerY, leftBottomPoint1[0] - centerX),\n // Math.atan2(leftBottomPoint2[1] - centerY, leftBottomPoint2[0] - centerX),\n false\n );\n // path.arcTo(leftBottom[0], leftBottom[1], leftBottomPoint2[0], leftBottomPoint2[1], _cornerRadius[3]);\n }\n\n path.lineTo(leftTopPoint2[0], leftTopPoint2[1]);\n if (!arrayEqual(leftTopPoint1, leftTopPoint2)) {\n const centerX = leftTopPoint1[0];\n const centerY = leftTopPoint1[1] + _cornerRadius[0];\n path.arc(\n centerX,\n centerY,\n _cornerRadius[0],\n pi,\n pi + halfPi,\n // Math.atan2(leftTopPoint2[1] - centerY, leftTopPoint2[0] - centerX),\n // Math.atan2(leftTopPoint1[1] - centerY, leftTopPoint1[0] - centerX) + Math.PI * 2,\n false\n );\n // path.arcTo(leftTop[0], leftTop[1], leftTopPoint1[0], leftTopPoint1[1], _cornerRadius[0]);\n }\n path.closePath();\n return path;\n}\n"]}
|
package/es/core/global.d.ts
CHANGED
|
@@ -20,7 +20,6 @@ export declare class DefaultGlobal implements IGlobal {
|
|
|
20
20
|
get applyStyles(): boolean;
|
|
21
21
|
set applyStyles(support: boolean);
|
|
22
22
|
optimizeVisible: boolean;
|
|
23
|
-
optmizeSkipCheckBoundariesThreshold: number;
|
|
24
23
|
envParams?: any;
|
|
25
24
|
measureTextMethod: 'native' | 'simple' | 'quick';
|
|
26
25
|
hooks: {
|
package/es/core/global.js
CHANGED
|
@@ -62,7 +62,7 @@ let DefaultGlobal = class {
|
|
|
62
62
|
constructor(contributions) {
|
|
63
63
|
this.contributions = contributions, this.id = Generator.GenAutoIncrementId(), this.hooks = {
|
|
64
64
|
onSetEnv: new SyncHook([ "lastEnv", "env", "global" ])
|
|
65
|
-
}, this.measureTextMethod = "native", this.optimizeVisible = !1
|
|
65
|
+
}, this.measureTextMethod = "native", this.optimizeVisible = !1;
|
|
66
66
|
}
|
|
67
67
|
bindContribution(params) {
|
|
68
68
|
const promiseArr = [];
|
package/es/core/global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/global.ts"],"names":[],"mappings":"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","file":"global.js","sourcesContent":["import { inject, injectable, named } from '../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n CreateDOMParamsType,\n EnvType,\n IContributionProvider,\n ICreateCanvasParams,\n IEnvContribution,\n IEnvParamsMap,\n IGlobal,\n ISyncHook\n} from '../interface';\nimport { SyncHook } from '../tapable';\nimport { EnvContribution } from '../constants';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { container } from '../container';\nimport { Generator } from '../common/generator';\n\nconst defaultEnv: EnvType = 'browser';\n@injectable()\nexport class DefaultGlobal implements IGlobal {\n readonly id: number;\n private _env: EnvType;\n private _isSafari?: boolean;\n private _isChrome?: boolean;\n get env(): EnvType {\n return this._env;\n }\n private envContribution: IEnvContribution;\n\n get devicePixelRatio(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDevicePixelRatio();\n }\n\n get supportEvent(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportEvent;\n }\n\n set supportEvent(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportEvent = support;\n }\n\n get supportsTouchEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsTouchEvents;\n }\n\n set supportsTouchEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsTouchEvents = support;\n }\n\n get supportsPointerEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsPointerEvents;\n }\n\n set supportsPointerEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsPointerEvents = support;\n }\n\n get supportsMouseEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsMouseEvents;\n }\n\n set supportsMouseEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsMouseEvents = support;\n }\n\n get applyStyles(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.applyStyles;\n }\n\n set applyStyles(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.applyStyles = support;\n }\n\n // 是否在不显示canvas的时候停止绘图操作,默认false\n optimizeVisible: boolean;\n // 在场景树小于某个数的情况下,不进行图元超出边界判断,默认0\n optmizeSkipCheckBoundariesThreshold: number;\n\n envParams?: any;\n declare measureTextMethod: 'native' | 'simple' | 'quick';\n declare hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n constructor(\n // todo: 不需要创建,动态获取就行?\n @inject(ContributionProvider)\n @named(EnvContribution)\n protected readonly contributions: IContributionProvider<IEnvContribution>\n ) {\n this.id = Generator.GenAutoIncrementId();\n this.hooks = {\n onSetEnv: new SyncHook<[EnvType | undefined, EnvType, IGlobal]>(['lastEnv', 'env', 'global'])\n };\n this.measureTextMethod = 'native';\n this.optimizeVisible = false;\n this.optmizeSkipCheckBoundariesThreshold = 0;\n }\n\n protected bindContribution(params?: any): void | Promise<any> {\n const promiseArr: any[] = [];\n this.contributions.getContributions().forEach(contribution => {\n const data = contribution.configure(this, params);\n if ((data as any) && (data as any).then) {\n promiseArr.push(data);\n }\n });\n if (promiseArr.length) {\n return Promise.all(promiseArr);\n }\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDynamicCanvasCount();\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getStaticCanvasCount();\n }\n\n /**\n * 设置当前环境\n * @param env\n * @param params 环境参数\n * 默认重复设置不生效,但如果params.force为true那么每次设置env都会重复执行初始化逻辑\n * @returns\n */\n setEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n // 如果环境设置过了,但是没有设置force为true,就直接跳过\n if (!(params && params.force === true) && this._env === env) {\n return;\n }\n this.deactiveCurrentEnv();\n return this.activeEnv(env, params);\n }\n\n protected deactiveCurrentEnv() {\n this.envContribution && this.envContribution.release();\n }\n\n protected activeEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n const lastEnv = this._env;\n this._env = env;\n const data = this.bindContribution(params);\n if (data && data.then) {\n return data.then(() => {\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n });\n }\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n }\n\n setActiveEnvContribution(contribution: IEnvContribution) {\n this.envContribution = contribution;\n }\n\n createCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createCanvas(params);\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createOffscreenCanvas(params);\n }\n\n releaseCanvas(canvas: HTMLCanvasElement | string | any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.releaseCanvas(canvas);\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.dispatchEvent(event);\n }\n\n getRequestAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getRequestAnimationFrame();\n }\n\n getCancelAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getCancelAnimationFrame();\n }\n\n getElementById(str: string): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getElementById) {\n return null;\n }\n return this.envContribution.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getRootElement) {\n return null;\n }\n return this.envContribution.getRootElement();\n }\n\n getDocument(): Document | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getDocument) {\n return null;\n }\n return this.envContribution.getDocument();\n }\n\n mapToCanvasPoint(event: any, domElement?: any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.mapToCanvasPoint) {\n return null;\n }\n return this.envContribution.mapToCanvasPoint(event, domElement);\n }\n\n loadImage(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadImage(url);\n }\n\n loadSvg(str: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadSvg(str);\n }\n\n loadJson(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadJson(url);\n }\n\n loadArrayBuffer(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadArrayBuffer(url);\n }\n\n loadBlob(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadBlob(url);\n }\n\n isChrome(): boolean {\n if (this._isChrome != null) {\n return this._isChrome;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isChrome = this._env === 'browser' && navigator.userAgent.indexOf('Chrome') > -1;\n return this._isChrome;\n }\n\n isSafari(): boolean {\n if (this._isSafari != null) {\n return this._isSafari;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isSafari =\n this._env === 'browser' && /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);\n return this._isSafari;\n }\n\n getNativeAABBBounds(dom: string | HTMLElement | any): IAABBBoundsLike {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getNativeAABBBounds(dom);\n }\n\n removeDom(dom: HTMLElement): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.removeDom(dom);\n }\n\n createDom(params: CreateDOMParamsType): HTMLElement | null {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.createDom(params);\n }\n\n getElementTop(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTop(dom, baseWindow);\n }\n getElementLeft(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementLeft(dom, baseWindow);\n }\n getElementTopLeft(dom: any, baseWindow: boolean = false): { top: number; left: number } {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTopLeft(dom, baseWindow);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/global.ts"],"names":[],"mappings":"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","file":"global.js","sourcesContent":["import { inject, injectable, named } from '../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n CreateDOMParamsType,\n EnvType,\n IContributionProvider,\n ICreateCanvasParams,\n IEnvContribution,\n IEnvParamsMap,\n IGlobal,\n ISyncHook\n} from '../interface';\nimport { SyncHook } from '../tapable';\nimport { EnvContribution } from '../constants';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { container } from '../container';\nimport { Generator } from '../common/generator';\n\nconst defaultEnv: EnvType = 'browser';\n@injectable()\nexport class DefaultGlobal implements IGlobal {\n readonly id: number;\n private _env: EnvType;\n private _isSafari?: boolean;\n private _isChrome?: boolean;\n get env(): EnvType {\n return this._env;\n }\n private envContribution: IEnvContribution;\n\n get devicePixelRatio(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDevicePixelRatio();\n }\n\n get supportEvent(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportEvent;\n }\n\n set supportEvent(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportEvent = support;\n }\n\n get supportsTouchEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsTouchEvents;\n }\n\n set supportsTouchEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsTouchEvents = support;\n }\n\n get supportsPointerEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsPointerEvents;\n }\n\n set supportsPointerEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsPointerEvents = support;\n }\n\n get supportsMouseEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsMouseEvents;\n }\n\n set supportsMouseEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsMouseEvents = support;\n }\n\n get applyStyles(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.applyStyles;\n }\n\n set applyStyles(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.applyStyles = support;\n }\n\n // 是否在不显示canvas的时候停止绘图操作,默认false\n optimizeVisible: boolean;\n\n envParams?: any;\n declare measureTextMethod: 'native' | 'simple' | 'quick';\n declare hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n constructor(\n // todo: 不需要创建,动态获取就行?\n @inject(ContributionProvider)\n @named(EnvContribution)\n protected readonly contributions: IContributionProvider<IEnvContribution>\n ) {\n this.id = Generator.GenAutoIncrementId();\n this.hooks = {\n onSetEnv: new SyncHook<[EnvType | undefined, EnvType, IGlobal]>(['lastEnv', 'env', 'global'])\n };\n this.measureTextMethod = 'native';\n this.optimizeVisible = false;\n }\n\n protected bindContribution(params?: any): void | Promise<any> {\n const promiseArr: any[] = [];\n this.contributions.getContributions().forEach(contribution => {\n const data = contribution.configure(this, params);\n if ((data as any) && (data as any).then) {\n promiseArr.push(data);\n }\n });\n if (promiseArr.length) {\n return Promise.all(promiseArr);\n }\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDynamicCanvasCount();\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getStaticCanvasCount();\n }\n\n /**\n * 设置当前环境\n * @param env\n * @param params 环境参数\n * 默认重复设置不生效,但如果params.force为true那么每次设置env都会重复执行初始化逻辑\n * @returns\n */\n setEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n // 如果环境设置过了,但是没有设置force为true,就直接跳过\n if (!(params && params.force === true) && this._env === env) {\n return;\n }\n this.deactiveCurrentEnv();\n return this.activeEnv(env, params);\n }\n\n protected deactiveCurrentEnv() {\n this.envContribution && this.envContribution.release();\n }\n\n protected activeEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n const lastEnv = this._env;\n this._env = env;\n const data = this.bindContribution(params);\n if (data && data.then) {\n return data.then(() => {\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n });\n }\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n }\n\n setActiveEnvContribution(contribution: IEnvContribution) {\n this.envContribution = contribution;\n }\n\n createCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createCanvas(params);\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createOffscreenCanvas(params);\n }\n\n releaseCanvas(canvas: HTMLCanvasElement | string | any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.releaseCanvas(canvas);\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.dispatchEvent(event);\n }\n\n getRequestAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getRequestAnimationFrame();\n }\n\n getCancelAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getCancelAnimationFrame();\n }\n\n getElementById(str: string): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getElementById) {\n return null;\n }\n return this.envContribution.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getRootElement) {\n return null;\n }\n return this.envContribution.getRootElement();\n }\n\n getDocument(): Document | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getDocument) {\n return null;\n }\n return this.envContribution.getDocument();\n }\n\n mapToCanvasPoint(event: any, domElement?: any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.mapToCanvasPoint) {\n return null;\n }\n return this.envContribution.mapToCanvasPoint(event, domElement);\n }\n\n loadImage(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadImage(url);\n }\n\n loadSvg(str: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadSvg(str);\n }\n\n loadJson(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadJson(url);\n }\n\n loadArrayBuffer(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadArrayBuffer(url);\n }\n\n loadBlob(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadBlob(url);\n }\n\n isChrome(): boolean {\n if (this._isChrome != null) {\n return this._isChrome;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isChrome = this._env === 'browser' && navigator.userAgent.indexOf('Chrome') > -1;\n return this._isChrome;\n }\n\n isSafari(): boolean {\n if (this._isSafari != null) {\n return this._isSafari;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isSafari =\n this._env === 'browser' && /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);\n return this._isSafari;\n }\n\n getNativeAABBBounds(dom: string | HTMLElement | any): IAABBBoundsLike {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getNativeAABBBounds(dom);\n }\n\n removeDom(dom: HTMLElement): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.removeDom(dom);\n }\n\n createDom(params: CreateDOMParamsType): HTMLElement | null {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.createDom(params);\n }\n\n getElementTop(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTop(dom, baseWindow);\n }\n getElementLeft(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementLeft(dom, baseWindow);\n }\n getElementTopLeft(dom: any, baseWindow: boolean = false): { top: number; left: number } {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTopLeft(dom, baseWindow);\n }\n}\n"]}
|
package/es/core/stage.d.ts
CHANGED
|
@@ -65,11 +65,12 @@ export declare class Stage extends Group implements IStage {
|
|
|
65
65
|
protected supportInteractiveLayer: boolean;
|
|
66
66
|
protected timeline: ITimeline;
|
|
67
67
|
params: Partial<IStageParams>;
|
|
68
|
-
constructor(params
|
|
68
|
+
constructor(params?: Partial<IStageParams>);
|
|
69
69
|
protected tryInitEventSystem(): void;
|
|
70
70
|
preventRender(prevent: boolean): void;
|
|
71
|
-
optmize(params
|
|
71
|
+
optmize(params: IOptimizeType): void;
|
|
72
72
|
protected optmizeRender(skipRenderWithOutRange?: boolean): void;
|
|
73
|
+
protected _onVisibleChange: (visible: boolean) => void;
|
|
73
74
|
getTimeline(): ITimeline;
|
|
74
75
|
get3dOptions(options: IOption3D): {
|
|
75
76
|
center: {
|
package/es/core/stage.js
CHANGED
|
@@ -110,11 +110,14 @@ export class Stage extends Group {
|
|
|
110
110
|
return this.at(0);
|
|
111
111
|
}
|
|
112
112
|
get eventSystem() {
|
|
113
|
-
return this.
|
|
113
|
+
return this._eventSystem;
|
|
114
114
|
}
|
|
115
|
-
constructor(params) {
|
|
115
|
+
constructor(params = {}) {
|
|
116
116
|
var _a;
|
|
117
|
-
super({}), this.
|
|
117
|
+
super({}), this._onVisibleChange = visible => {
|
|
118
|
+
this._skipRender < 0 || (visible ? (this.dirtyBounds && this.dirtyBounds.setValue(0, 0, this._viewBox.width(), this._viewBox.height()),
|
|
119
|
+
this._skipRender > 1 && this.renderNextFrame(), this._skipRender = 0) : this._skipRender = 1);
|
|
120
|
+
}, this.beforeRender = stage => {
|
|
118
121
|
this._beforeRender && this._beforeRender(stage);
|
|
119
122
|
}, this.afterRender = stage => {
|
|
120
123
|
this.renderCount++, this._afterRender && this._afterRender(stage), this._afterNextRenderCbs && this._afterNextRenderCbs.forEach((cb => cb(stage))),
|
|
@@ -134,7 +137,7 @@ export class Stage extends Group {
|
|
|
134
137
|
title: params.title || "",
|
|
135
138
|
canvas: params.canvas
|
|
136
139
|
}), this._viewBox = new AABBBounds, params.viewBox ? this._viewBox.setValue(params.viewBox.x1, params.viewBox.y1, params.viewBox.x2, params.viewBox.y2) : this._viewBox.setValue(0, 0, this.width, this.height),
|
|
137
|
-
this.state = "normal", this.renderCount = 0, this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height),
|
|
140
|
+
this.state = "normal", this.renderCount = 0, this.tryInitEventSystem(), this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height),
|
|
138
141
|
this._background = null !== (_a = params.background) && void 0 !== _a ? _a : DefaultConfig.BACKGROUND,
|
|
139
142
|
this.appendChild(this.layerService.createLayer(this, {
|
|
140
143
|
main: !0
|
|
@@ -145,8 +148,8 @@ export class Stage extends Group {
|
|
|
145
148
|
this.hooks.afterRender.tap("constructor", this.afterRender), this._beforeRender = params.beforeRender,
|
|
146
149
|
this._afterRender = params.afterRender, this.ticker = params.ticker || defaultTicker,
|
|
147
150
|
this.supportInteractiveLayer = !1 !== params.interactiveLayer, this.timeline = new DefaultTimeline,
|
|
148
|
-
this.ticker.addTimeline(this.timeline), this.timeline.pause(),
|
|
149
|
-
params.background && isString(this._background) && this._background.includes("/") && this.setAttributes({
|
|
151
|
+
this.ticker.addTimeline(this.timeline), this.timeline.pause(), params.optimize || (params.optimize = {}),
|
|
152
|
+
this.optmize(params.optimize), params.background && isString(this._background) && this._background.includes("/") && this.setAttributes({
|
|
150
153
|
background: this._background
|
|
151
154
|
});
|
|
152
155
|
}
|
|
@@ -174,17 +177,14 @@ export class Stage extends Group {
|
|
|
174
177
|
}));
|
|
175
178
|
}
|
|
176
179
|
preventRender(prevent) {
|
|
177
|
-
prevent ? this._skipRender = -1 / 0 :
|
|
180
|
+
prevent ? this._skipRender = -1 / 0 : !1 !== this.params.optimize.skipRenderWithOutRange ? this._skipRender = this.window.isVisible() ? 0 : 1 : this._skipRender = 0;
|
|
178
181
|
}
|
|
179
182
|
optmize(params) {
|
|
180
|
-
this.optmizeRender(
|
|
183
|
+
this.optmizeRender(params.skipRenderWithOutRange), this.params.optimize = params;
|
|
181
184
|
}
|
|
182
185
|
optmizeRender(skipRenderWithOutRange = !1) {
|
|
183
186
|
skipRenderWithOutRange && (this._skipRender = this._skipRender < 0 ? this._skipRender : this.window.isVisible() ? 0 : 1,
|
|
184
|
-
this.window.onVisibleChange(
|
|
185
|
-
this._skipRender < 0 || (visible ? (this.dirtyBounds && this.dirtyBounds.setValue(0, 0, this._viewBox.width(), this._viewBox.height()),
|
|
186
|
-
this._skipRender > 1 && this.renderNextFrame(), this._skipRender = 0) : this._skipRender = 1);
|
|
187
|
-
})));
|
|
187
|
+
this.window.onVisibleChange(this._onVisibleChange));
|
|
188
188
|
}
|
|
189
189
|
getTimeline() {
|
|
190
190
|
return this.timeline;
|
package/es/core/stage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/stage.ts"],"names":[],"mappings":"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","file":"stage.js","sourcesContent":["import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';\nimport { AABBBounds, Bounds, Point, isString } from '@visactor/vutils';\nimport type {\n IGraphic,\n IGroup,\n IExportType,\n IStage,\n IStageParams,\n ILayer,\n IColor,\n IGlobal,\n IOption3D,\n ICamera,\n vec3,\n IDirectionLight,\n ITicker,\n IRenderService,\n IPickerService,\n IPluginService,\n ISyncHook,\n IDrawContext,\n IWindow,\n IPlugin,\n IContributionProvider,\n ILayerService,\n ITimeline,\n IOptimizeType,\n LayerMode,\n PickResult\n} from '../interface';\nimport { VWindow } from './window';\nimport type { Layer } from './layer';\nimport { EventSystem } from '../event';\nimport { container } from '../container';\nimport { RenderService } from '../render';\nimport { Group, Theme } from '../graphic';\nimport { PickerService } from '../picker/constants';\nimport { PluginService } from '../plugins/constants';\nimport { AutoRenderPlugin } from '../plugins/builtin-plugin/auto-render-plugin';\nimport { ViewTransform3dPlugin } from '../plugins/builtin-plugin/3dview-transform-plugin';\nimport { IncrementalAutoRenderPlugin } from '../plugins/builtin-plugin/incremental-auto-render-plugin';\nimport { HtmlAttributePlugin } from '../plugins/builtin-plugin/html-attribute-plugin';\nimport { DirtyBoundsPlugin } from '../plugins/builtin-plugin/dirty-bounds-plugin';\nimport { FlexLayoutPlugin } from '../plugins/builtin-plugin/flex-layout-plugin';\nimport { defaultTicker } from '../animate/default-ticker';\nimport { SyncHook } from '../tapable';\nimport { DirectionalLight } from './light';\nimport { OrthoCamera } from './camera';\nimport { LayerService } from './constants';\nimport { DefaultTimeline } from '../animate';\nimport { application } from '../application';\nimport { isBrowserEnv } from '../env-check';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n X: 0,\n Y: 0,\n BACKGROUND: 'white'\n};\n\ntype IStageState = 'rendering' | 'normal';\n\n/**\n * Stage是一个舞台或一个视口,并不直接对应一个或多个Canvas,逻辑上和Canvas无关\n *\n * 1. Stage对应一个Canvas的整体,Stage的宽高即为Canvas的宽高\n * 2. Stage小于Canvas,Stage作为Canvas某个区域的视口,只管理这个区域\n * 3. 多图层时Stage的多个图层对应多个Canvas\n *\n * 原生环境下Stage可以拥有一个Window或者使用Window的一块区域\n *\n * 【注】如果希望获取完整的Canvas或窗口或者调整窗口信息,请使用Window模块\n */\nexport class Stage extends Group implements IStage {\n declare parent: IStage | null;\n\n declare state: IStageState;\n\n protected _viewBox: AABBBounds;\n private _background: string | IColor;\n private _subView: boolean; // 是否是存在子视图\n protected nextFrameRenderLayerSet: Set<Layer>;\n protected willNextFrameRender: boolean;\n protected _cursor: string;\n renderCount: number;\n dirtyBounds: IBounds | null;\n option3d?: IOption3D;\n declare light?: IDirectionLight;\n declare camera?: ICamera;\n declare renderStyle?: string;\n\n declare hooks: {\n beforeRender: ISyncHook<[IStage]>;\n afterRender: ISyncHook<[IStage]>;\n };\n\n set viewBox(b: IBoundsLike) {\n this._viewBox.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n get viewBox(): AABBBounds {\n return this._viewBox;\n }\n\n get x(): number {\n return this._viewBox.x1;\n }\n set x(x: number) {\n this._viewBox.translate(x - this._viewBox.x1, 0);\n }\n get y(): number {\n return this._viewBox.y1;\n }\n set y(y: number) {\n this._viewBox.translate(0, y - this._viewBox.y1);\n }\n get width(): number {\n return this.window.width;\n }\n set width(w: number) {\n this.resize(w, this.height);\n }\n get viewWidth(): number {\n return this._viewBox.width();\n }\n set viewWidth(w: number) {\n this.resizeView(w, this.viewHeight);\n }\n get viewHeight(): number {\n return this._viewBox.height();\n }\n set viewHeight(h: number) {\n this.resizeView(this.viewWidth, h);\n }\n get height(): number {\n return this.window.height;\n }\n set height(h: number) {\n this.resize(this.width, h);\n }\n get dpr(): number {\n return this.window.dpr;\n }\n set dpr(r: number) {\n this.setDpr(r);\n }\n get background(): string | IColor {\n return this._background ?? DefaultConfig.BACKGROUND;\n }\n set background(b: string | IColor) {\n this._background = b;\n }\n get defaultLayer(): ILayer {\n return this.at(0) as unknown as ILayer;\n }\n\n ticker: ITicker;\n\n autoRender: boolean;\n _enableLayout: boolean;\n htmlAttribute: boolean | string | any;\n increaseAutoRender: boolean;\n view3dTranform: boolean;\n readonly window: IWindow;\n private readonly global: IGlobal;\n readonly renderService: IRenderService;\n pickerService?: IPickerService;\n readonly pluginService: IPluginService;\n readonly layerService: ILayerService;\n private _eventSystem?: EventSystem;\n private get eventSystem(): EventSystem {\n this.tryInitEventSystem();\n return this._eventSystem;\n }\n\n protected _beforeRender?: (stage: IStage) => void;\n protected _afterRender?: (stage: IStage) => void;\n // 0: 正常渲染, > 0: 跳过隐藏canvas的渲染, < 0: 禁止渲染\n protected _skipRender?: number;\n protected _afterNextRenderCbs?: ((stage: IStage) => void)[];\n protected lastRenderparams?: Partial<IDrawContext>;\n\n protected interactiveLayer?: ILayer;\n protected supportInteractiveLayer: boolean;\n protected timeline: ITimeline;\n\n declare params: Partial<IStageParams>;\n\n /**\n * 所有属性都具有默认值。\n * Canvas为字符串或者Canvas元素,那么默认图层就会绑定到这个Canvas上\n * 如果不传入Canvas,那么会新建一个Canvas,用户可以通过Window模块管理这个Canvas\n * 1. 如果没有传入宽高,那么默认为canvas宽高,如果传入了宽高则stage使用传入宽高作为视口宽高\n * @param params\n */\n constructor(params: Partial<IStageParams>) {\n super({});\n this.params = params;\n this.theme = new Theme();\n this.hooks = {\n beforeRender: new SyncHook(['stage']),\n afterRender: new SyncHook(['stage'])\n };\n this.global = application.global;\n if (!this.global.env && isBrowserEnv()) {\n // 如果是浏览器环境,默认设置env\n this.global.setEnv('browser');\n }\n this.window = container.get<IWindow>(VWindow);\n this.renderService = container.get<IRenderService>(RenderService);\n this.pluginService = container.get<IPluginService>(PluginService);\n this.layerService = container.get<ILayerService>(LayerService);\n this.pluginService.active(this, params);\n\n this.window.create({\n width: params.width,\n height: params.height,\n container: params.container,\n dpr: params.dpr || this.global.devicePixelRatio,\n canvasControled: params.canvasControled !== false,\n title: params.title || '',\n canvas: params.canvas\n });\n\n this._viewBox = new AABBBounds();\n if (params.viewBox) {\n this._viewBox.setValue(params.viewBox.x1, params.viewBox.y1, params.viewBox.x2, params.viewBox.y2);\n } else {\n this._viewBox.setValue(0, 0, this.width, this.height);\n }\n\n this.state = 'normal';\n this.renderCount = 0;\n\n // // 没有传入xy就默认为0\n // this._x = params.x ?? DefaultConfig.X;\n // this._y = params.y ?? DefaultConfig.Y;\n // // 没有传入view的宽高则默认为window的宽高\n // this._viewWidth = params.viewWidth ?? this.window.width;\n // this._viewHeight = params.viewHeight ?? this.window.height;\n this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height);\n // this._AABBBounds.set(this._x, this._y, this._viewWidth + this._x, this._viewHeight + this._y);\n // 背景色默认为纯白色\n this._background = params.background ?? DefaultConfig.BACKGROUND;\n\n // 创建一个默认layer图层\n // this.appendChild(new Layer(this, this.global, this.window, { main: true }));\n this.appendChild(this.layerService.createLayer(this, { main: true }));\n\n this.nextFrameRenderLayerSet = new Set();\n this.willNextFrameRender = false;\n this.stage = this;\n this.renderStyle = params.renderStyle;\n\n // this.autoRender = params.autoRender;\n if (params.autoRender) {\n this.enableAutoRender();\n }\n // 默认不开启dirtyBounds\n if (params.disableDirtyBounds === false) {\n this.enableDirtyBounds();\n }\n\n if (params.enableHtmlAttribute) {\n this.enableHtmlAttribute(params.enableHtmlAttribute);\n }\n\n params.enableLayout && this.enableLayout();\n this.hooks.beforeRender.tap('constructor', this.beforeRender);\n this.hooks.afterRender.tap('constructor', this.afterRender);\n this._beforeRender = params.beforeRender;\n this._afterRender = params.afterRender;\n this.ticker = params.ticker || defaultTicker;\n this.supportInteractiveLayer = params.interactiveLayer !== false;\n this.timeline = new DefaultTimeline();\n this.ticker.addTimeline(this.timeline);\n this.timeline.pause();\n this.optmize(params.optimize);\n // 如果背景是图片,触发加载图片操作\n if (params.background && isString(this._background) && this._background.includes('/')) {\n this.setAttributes({ background: this._background });\n }\n }\n\n protected tryInitEventSystem() {\n if (this.global.supportEvent && !this._eventSystem) {\n this._eventSystem = new EventSystem({\n targetElement: this.window,\n resolution: this.window.dpr || this.global.devicePixelRatio,\n rootNode: this as any,\n global: this.global,\n viewport: {\n viewBox: this._viewBox,\n get x(): number {\n return this.viewBox.x1;\n },\n get y(): number {\n return this.viewBox.y1;\n },\n get width(): number {\n return this.viewBox.width();\n },\n get height(): number {\n return this.viewBox.height();\n }\n }\n });\n }\n }\n\n preventRender(prevent: boolean) {\n if (prevent) {\n this._skipRender = -Infinity;\n } else {\n // 判断是否需要outRange优化\n if (this.params && this.params.optimize && this.params.optimize.skipRenderWithOutRange !== false) {\n this._skipRender = this.window.isVisible() ? 0 : 1;\n } else {\n this._skipRender = 0;\n }\n }\n }\n\n // 优化策略\n optmize(params?: IOptimizeType) {\n this.optmizeRender(params?.skipRenderWithOutRange);\n }\n\n // 优化渲染\n protected optmizeRender(skipRenderWithOutRange: boolean = false) {\n if (!skipRenderWithOutRange) {\n return;\n }\n // 不在视口内的时候,跳过渲染\n this._skipRender = this._skipRender < 0 ? this._skipRender : this.window.isVisible() ? 0 : 1;\n this.window.onVisibleChange(visible => {\n if (this._skipRender < 0) {\n return;\n }\n if (visible) {\n if (this.dirtyBounds) {\n this.dirtyBounds.setValue(0, 0, this._viewBox.width(), this._viewBox.height());\n }\n if (this._skipRender > 1) {\n this.renderNextFrame();\n }\n this._skipRender = 0;\n } else {\n this._skipRender = 1;\n }\n });\n }\n\n getTimeline() {\n return this.timeline;\n }\n\n get3dOptions(options: IOption3D) {\n const {\n center = { x: this.width / 2, y: this.height / 2, z: 0, dx: 0, dy: 0, dz: 0 },\n light = {},\n alpha = 0,\n beta = 0,\n camera,\n fieldRatio = 1,\n fieldDepth\n } = options;\n\n return {\n ...options,\n center,\n light,\n alpha,\n beta,\n camera,\n fieldRatio,\n fieldDepth\n };\n }\n\n set3dOptions(options: IOption3D) {\n this.option3d = options;\n const options3d = this.get3dOptions(options);\n const { light, center, camera, alpha, beta, fieldRatio, fieldDepth } = options3d;\n const { dir = [1, 1, -1], color = 'white', ambient } = light;\n\n const centerX = (center.x ?? this.width / 2) + (center.dx ?? 0);\n const centerY = (center.y ?? this.height / 2) + (center.dy ?? 0);\n const centerZ = (center.z ?? 0) + (center.dz ?? 0);\n const centerVec3: vec3 = [centerX, centerY, centerZ];\n const z = 1;\n let cameraX = 0;\n let cameraY = 0;\n let cameraZ = 0;\n if (!camera) {\n cameraX = Math.sin(alpha) + centerX;\n cameraY = Math.sin(beta) + centerY;\n cameraZ = Math.cos(alpha) * Math.cos(beta) * z;\n }\n\n this.light = new DirectionalLight(dir, color, ambient);\n const cameraParams = {\n left: 0,\n right: this.width,\n top: 0,\n bottom: this.height,\n fieldRatio: fieldRatio,\n fieldDepth,\n viewParams: {\n pos: [cameraX, cameraY, cameraZ] as vec3,\n center: centerVec3,\n up: [0, 1, 0] as vec3\n }\n };\n if (this.camera) {\n this.camera.params = cameraParams;\n } else {\n this.camera = new OrthoCamera(cameraParams);\n }\n\n if (options.enableView3dTransform) {\n this.enableView3dTransform();\n }\n }\n\n protected beforeRender = (stage: IStage) => {\n this._beforeRender && this._beforeRender(stage);\n };\n\n protected afterRender = (stage: IStage) => {\n this.renderCount++;\n this._afterRender && this._afterRender(stage);\n this._afterNextRenderCbs && this._afterNextRenderCbs.forEach(cb => cb(stage));\n this._afterNextRenderCbs = null;\n };\n\n setBeforeRender(cb: (stage: IStage) => void) {\n this._beforeRender = cb;\n }\n\n setAfterRender(cb: (stage: IStage) => void) {\n this._afterRender = cb;\n }\n\n afterNextRender(cb: (stage: IStage) => void) {\n if (!this._afterNextRenderCbs) {\n this._afterNextRenderCbs = [];\n }\n this._afterNextRenderCbs.push(cb);\n }\n\n enableView3dTransform() {\n if (this.view3dTranform) {\n return;\n }\n this.view3dTranform = true;\n this.pluginService.register(new ViewTransform3dPlugin());\n }\n\n disableView3dTranform() {\n if (!this.view3dTranform) {\n return;\n }\n this.view3dTranform = false;\n this.pluginService.findPluginsByName('ViewTransform3dPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n\n enableAutoRender() {\n if (this.autoRender) {\n return;\n }\n this.autoRender = true;\n this.pluginService.register(new AutoRenderPlugin());\n }\n disableAutoRender() {\n if (!this.autoRender) {\n return;\n }\n this.autoRender = false;\n this.pluginService.findPluginsByName('AutoRenderPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableIncrementalAutoRender() {\n if (this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = true;\n this.pluginService.register(new IncrementalAutoRenderPlugin());\n }\n disableIncrementalAutoRender() {\n if (!this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = false;\n this.pluginService.findPluginsByName('IncrementalAutoRenderPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableDirtyBounds() {\n if (this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = new Bounds();\n let plugin = this.pluginService.findPluginsByName('DirtyBoundsPlugin')[0];\n if (!plugin) {\n plugin = new DirtyBoundsPlugin();\n this.pluginService.register(plugin);\n } else {\n plugin.activate(this.pluginService);\n }\n }\n disableDirtyBounds() {\n if (!this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = null;\n this.pluginService.findPluginsByName('DirtyBoundsPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableLayout() {\n if (this._enableLayout) {\n return;\n }\n this._enableLayout = true;\n this.pluginService.register(new FlexLayoutPlugin());\n }\n disableLayout() {\n if (!this._enableLayout) {\n return;\n }\n this._enableLayout = false;\n this.pluginService.findPluginsByName('FlexLayoutPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableHtmlAttribute(container?: any) {\n if (this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = container;\n this.pluginService.register(new HtmlAttributePlugin());\n }\n disableHtmlAttribute() {\n if (!this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = false;\n this.pluginService.findPluginsByName('HtmlAttributePlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n\n // /**\n // * stage的appendChild,add\n // * @param node\n // * @returns\n // */\n // appendChild<T extends Node>(node: T): T | null {\n // const layer = this.at(0);\n // if (!layer) {\n // return null;\n // }\n // return layer.appendChild<T>(node);\n // }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n const viewBox = this._viewBox;\n this._AABBBounds.setValue(viewBox.x1, viewBox.y1, viewBox.x2, viewBox.y2);\n return this._AABBBounds;\n }\n\n combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer {\n throw new Error('暂不支持');\n }\n // 如果传入CanvasId,如果存在相同Id,说明这两个图层使用相同的Canvas绘制\n // 但需要注意的是依然是两个图层(用于解决Table嵌入ChartSpace不影响Table的绘制)\n createLayer(canvasId?: string, layerMode?: LayerMode): ILayer {\n // 创建一个默认layer图层\n const layer = this.layerService.createLayer(this, {\n main: false,\n layerMode,\n canvasId\n });\n this.appendChild(layer);\n return layer;\n // const layer = new Layer(this, this.global, this.window, {\n // main: false,\n // canvasId\n // });\n // this.appendChild(layer);\n // return layer;\n }\n sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void {\n const children = this.children;\n children.sort(cb);\n this.removeAllChild();\n children.forEach(c => {\n this.appendChild(c);\n });\n }\n removeLayer(ILayerId: number): ILayer | false {\n return this.removeChild(this.findChildByUid(ILayerId) as IGraphic) as ILayer;\n }\n tryInitInteractiveLayer() {\n // TODO:顺序可能会存在问题\n // 支持交互层,且没有创建过,那就创建\n if (this.supportInteractiveLayer && !this.interactiveLayer) {\n this.interactiveLayer = this.createLayer();\n this.interactiveLayer.name = '_builtin_interactive';\n this.nextFrameRenderLayerSet.add(this.interactiveLayer as any); // to be fixed\n }\n // this.interactiveLayer.afterDraw(l => {\n // l.removeAllChild();\n // });\n }\n\n clearViewBox(color?: string) {\n this.window.clearViewBox(this._viewBox, color);\n }\n\n render(layers?: ILayer[], params?: Partial<IDrawContext>): void {\n this.ticker.start();\n this.timeline.resume();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (!this._skipRender) {\n this.lastRenderparams = params;\n this.hooks.beforeRender.call(this);\n this.renderLayerList(this.children as ILayer[]);\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected combineLayersToWindow() {\n return;\n // this.forEach<ILayer>((layer, i) => {\n // layer.combineTo(this.window, {\n // clear: i === 0,\n // x: this.x,\n // y: this.y,\n // width: this.viewWidth,\n // height: this.viewHeight,\n // renderService: this.renderService,\n // background: layer === this.defaultLayer ? this.background : undefined,\n // updateBounds: !!this.dirtyBounds\n // });\n // });\n }\n\n renderNextFrame(layers?: ILayer[], force?: boolean): void {\n // render状态中调用的不会触发nextFrame,避免loop\n // if (this.state === 'rendering' && !force) {\n // console.log('abc');\n // return;\n // }\n // 性能优化,避免重复add\n if (this.nextFrameRenderLayerSet.size !== this.childrenCount) {\n (layers || this).forEach<ILayer>((layer: any) => {\n this.nextFrameRenderLayerSet.add(layer);\n });\n }\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n this.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame(), (this.willNextFrameRender = false);\n });\n }\n }\n\n _doRenderInThisFrame() {\n this.timeline.resume();\n this.ticker.start();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (this.nextFrameRenderLayerSet.size && !this._skipRender) {\n this.hooks.beforeRender.call(this);\n this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {});\n this.combineLayersToWindow();\n this.hooks.afterRender.call(this);\n this.nextFrameRenderLayerSet.clear();\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected renderLayerList(layerList: ILayer[], params?: Partial<IDrawContext>) {\n const list: ILayer[] = [];\n // 只需要render main layer即可\n for (let i = 0; i < layerList.length; i++) {\n let l = layerList[i];\n if (l.layerMode === 'virtual') {\n l = l.getNativeHandler().mainHandler.layer;\n }\n if (!list.includes(l)) {\n list.push(l);\n }\n }\n list.forEach(layer => {\n // 记录当前的stamp,避免重复绘制layer(如果存在virtual layer)\n if (layer.renderCount > this.renderCount) {\n return;\n }\n layer.renderCount = this.renderCount + 1;\n\n layer.render(\n {\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n },\n { renderStyle: this.renderStyle, ...params }\n );\n });\n\n // 添加交互层渲染\n if (this.interactiveLayer && !layerList.includes(this.interactiveLayer)) {\n this.interactiveLayer.render(\n {\n renderService: this.renderService,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n },\n { renderStyle: this.renderStyle, ...params }\n );\n }\n }\n\n resizeWindow(w: number, h: number, rerender: boolean = true) {\n this.window.resize(w, h);\n rerender && this.render();\n }\n\n /**\n * 语法糖,如果viewBox和window宽高一样的话,那么会同时缩放window和viewBox\n * @param w\n * @param h\n * @param rerender\n */\n resize(w: number, h: number, rerender: boolean = true): void {\n this.window.resize(w, h);\n this.forEachChildren<ILayer>(c => {\n c.resize(w, h);\n });\n // 如果不是子图的stage,那么认为用户也想要resize view\n if (!this._subView) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n }\n // 设置camera\n // this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n this.camera && this.option3d && this.set3dOptions(this.option3d);\n rerender && this.render();\n }\n resizeView(w: number, h: number, rerender: boolean = true) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n this.forEachChildren<ILayer>(c => {\n c.resizeView(w, h);\n });\n // 设置camera\n this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n rerender && this.render();\n }\n setViewBox(viewBox: IBoundsLike, rerender: boolean): void;\n setViewBox(x: number, y: number, w: number, h: number, rerender: boolean): void;\n setViewBox(x: number | IBoundsLike, y: number | boolean, w?: number, h?: number, rerender?: boolean): void {\n let isRerender: boolean = true;\n\n if (typeof x === 'object') {\n this.viewBox.setValue(x.x1, x.y1, x.x2, x.y2);\n if (y === false) {\n isRerender = false;\n }\n } else {\n this.viewBox.setValue(x, y as number, x + w, (y as number) + h);\n\n if (rerender === false) {\n isRerender = false;\n }\n }\n\n this.forEachChildren<ILayer>(c => {\n c.resizeView(this.viewBox.width(), this.viewBox.height());\n });\n isRerender && this.render();\n }\n setDpr(dpr: number, rerender: boolean = true): void {\n // this.window.setDpr(dpr);\n this.forEachChildren<ILayer>(c => {\n c.setDpr(dpr);\n });\n\n rerender && this.render();\n }\n setOrigin(x: number, y: number): void {\n throw new Error('暂不支持');\n }\n export(type: IExportType): HTMLCanvasElement | ImageData {\n throw new Error('暂不支持');\n }\n pick(x: number, y: number): PickResult | false {\n if (!this.pickerService) {\n this.pickerService = container.get<IPickerService>(PickerService);\n }\n // 暂时不提供layer的pick\n const result = this.pickerService.pick(this.children as unknown as IGraphic[], new Point(x, y), {\n bounds: this.AABBBounds\n });\n if (result?.graphic || result?.group) {\n return result;\n }\n return false;\n }\n\n // 动画相关\n startAnimate(t: number): void {\n throw new Error('暂不支持');\n }\n setToFrame(t: number): void {\n throw new Error('暂不支持');\n }\n\n release() {\n super.release();\n this.eventSystem && this.eventSystem.release();\n this.pluginService.release();\n this.forEach(layer => {\n layer.release();\n });\n this.interactiveLayer && this.interactiveLayer.release();\n this.window.release();\n }\n\n setStage(stage?: IStage) {\n return;\n // this.stage = this;\n // this.forEachChildren(item => {\n // (item as Layer).setStage(this);\n // });\n }\n\n /**\n * 添加dirty区域,会修改参数b\n * @param b\n * @param matrix\n */\n dirty(b: IBounds, matrix?: IMatrix) {\n if (matrix) {\n b.transformWithMatrix(matrix);\n }\n if (this.dirtyBounds.empty()) {\n this.dirtyBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n this.dirtyBounds.union(b);\n }\n\n getLayer(name: string): undefined | ILayer {\n const layer = this.children.filter(layer => layer.name === name);\n return layer[0] as ILayer;\n }\n\n renderTo(window: IWindow, params: { x: number; y: number; width: number; height: number }) {\n this.forEachChildren<ILayer>((layer, i) => {\n layer.drawTo(window, {\n ...params,\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n clear: i === 0, // 第一个layer需要clear\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n });\n });\n }\n\n /**\n * 渲染到新的window上去\n * @param fullImage 是否是全量的image,因为可能之前的window有一部分场景树超过window的帧缓冲了\n * @returns\n */\n renderToNewWindow(fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n const window = container.get<IWindow>(VWindow);\n if (fullImage) {\n window.create({\n width: this.viewWidth,\n height: this.viewHeight,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n const width = viewBox ? viewBox.width() : Math.min(this.viewWidth, this.window.width - this.x);\n const height = viewBox ? viewBox.height() : Math.min(this.viewHeight, this.window.height - this.y);\n window.create({\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n const x = viewBox ? -viewBox.x1 : 0;\n const y = viewBox ? -viewBox.y1 : 0;\n this.renderTo(window, {\n x,\n y,\n width: viewBox ? viewBox.x2 : window.width,\n height: viewBox ? viewBox.y2 : window.height\n });\n return window;\n }\n\n toCanvas(fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n const window = this.renderToNewWindow(fullImage, viewBox);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n }\n\n setCursor(mode?: string): void {\n this._cursor = mode;\n this.eventSystem.setCursor(mode);\n }\n\n getCursor() {\n return this._cursor;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/stage.ts"],"names":[],"mappings":"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","file":"stage.js","sourcesContent":["import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';\nimport { AABBBounds, Bounds, Point, isString } from '@visactor/vutils';\nimport type {\n IGraphic,\n IGroup,\n IExportType,\n IStage,\n IStageParams,\n ILayer,\n IColor,\n IGlobal,\n IOption3D,\n ICamera,\n vec3,\n IDirectionLight,\n ITicker,\n IRenderService,\n IPickerService,\n IPluginService,\n ISyncHook,\n IDrawContext,\n IWindow,\n IPlugin,\n IContributionProvider,\n ILayerService,\n ITimeline,\n IOptimizeType,\n LayerMode,\n PickResult\n} from '../interface';\nimport { VWindow } from './window';\nimport type { Layer } from './layer';\nimport { EventSystem } from '../event';\nimport { container } from '../container';\nimport { RenderService } from '../render';\nimport { Group, Theme } from '../graphic';\nimport { PickerService } from '../picker/constants';\nimport { PluginService } from '../plugins/constants';\nimport { AutoRenderPlugin } from '../plugins/builtin-plugin/auto-render-plugin';\nimport { ViewTransform3dPlugin } from '../plugins/builtin-plugin/3dview-transform-plugin';\nimport { IncrementalAutoRenderPlugin } from '../plugins/builtin-plugin/incremental-auto-render-plugin';\nimport { HtmlAttributePlugin } from '../plugins/builtin-plugin/html-attribute-plugin';\nimport { DirtyBoundsPlugin } from '../plugins/builtin-plugin/dirty-bounds-plugin';\nimport { FlexLayoutPlugin } from '../plugins/builtin-plugin/flex-layout-plugin';\nimport { defaultTicker } from '../animate/default-ticker';\nimport { SyncHook } from '../tapable';\nimport { DirectionalLight } from './light';\nimport { OrthoCamera } from './camera';\nimport { LayerService } from './constants';\nimport { DefaultTimeline } from '../animate';\nimport { application } from '../application';\nimport { isBrowserEnv } from '../env-check';\n\nconst DefaultConfig = {\n WIDTH: 500,\n HEIGHT: 500,\n X: 0,\n Y: 0,\n BACKGROUND: 'white'\n};\n\ntype IStageState = 'rendering' | 'normal';\n\n/**\n * Stage是一个舞台或一个视口,并不直接对应一个或多个Canvas,逻辑上和Canvas无关\n *\n * 1. Stage对应一个Canvas的整体,Stage的宽高即为Canvas的宽高\n * 2. Stage小于Canvas,Stage作为Canvas某个区域的视口,只管理这个区域\n * 3. 多图层时Stage的多个图层对应多个Canvas\n *\n * 原生环境下Stage可以拥有一个Window或者使用Window的一块区域\n *\n * 【注】如果希望获取完整的Canvas或窗口或者调整窗口信息,请使用Window模块\n */\nexport class Stage extends Group implements IStage {\n declare parent: IStage | null;\n\n declare state: IStageState;\n\n protected _viewBox: AABBBounds;\n private _background: string | IColor;\n private _subView: boolean; // 是否是存在子视图\n protected nextFrameRenderLayerSet: Set<Layer>;\n protected willNextFrameRender: boolean;\n protected _cursor: string;\n renderCount: number;\n dirtyBounds: IBounds | null;\n option3d?: IOption3D;\n declare light?: IDirectionLight;\n declare camera?: ICamera;\n declare renderStyle?: string;\n\n declare hooks: {\n beforeRender: ISyncHook<[IStage]>;\n afterRender: ISyncHook<[IStage]>;\n };\n\n set viewBox(b: IBoundsLike) {\n this._viewBox.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n get viewBox(): AABBBounds {\n return this._viewBox;\n }\n\n get x(): number {\n return this._viewBox.x1;\n }\n set x(x: number) {\n this._viewBox.translate(x - this._viewBox.x1, 0);\n }\n get y(): number {\n return this._viewBox.y1;\n }\n set y(y: number) {\n this._viewBox.translate(0, y - this._viewBox.y1);\n }\n get width(): number {\n return this.window.width;\n }\n set width(w: number) {\n this.resize(w, this.height);\n }\n get viewWidth(): number {\n return this._viewBox.width();\n }\n set viewWidth(w: number) {\n this.resizeView(w, this.viewHeight);\n }\n get viewHeight(): number {\n return this._viewBox.height();\n }\n set viewHeight(h: number) {\n this.resizeView(this.viewWidth, h);\n }\n get height(): number {\n return this.window.height;\n }\n set height(h: number) {\n this.resize(this.width, h);\n }\n get dpr(): number {\n return this.window.dpr;\n }\n set dpr(r: number) {\n this.setDpr(r);\n }\n get background(): string | IColor {\n return this._background ?? DefaultConfig.BACKGROUND;\n }\n set background(b: string | IColor) {\n this._background = b;\n }\n get defaultLayer(): ILayer {\n return this.at(0) as unknown as ILayer;\n }\n\n ticker: ITicker;\n\n autoRender: boolean;\n _enableLayout: boolean;\n htmlAttribute: boolean | string | any;\n increaseAutoRender: boolean;\n view3dTranform: boolean;\n readonly window: IWindow;\n private readonly global: IGlobal;\n readonly renderService: IRenderService;\n pickerService?: IPickerService;\n readonly pluginService: IPluginService;\n readonly layerService: ILayerService;\n private _eventSystem?: EventSystem;\n private get eventSystem(): EventSystem {\n return this._eventSystem;\n }\n\n protected _beforeRender?: (stage: IStage) => void;\n protected _afterRender?: (stage: IStage) => void;\n // 0: 正常渲染, > 0: 跳过隐藏canvas的渲染, < 0: 禁止渲染\n protected _skipRender?: number;\n protected _afterNextRenderCbs?: ((stage: IStage) => void)[];\n protected lastRenderparams?: Partial<IDrawContext>;\n\n protected interactiveLayer?: ILayer;\n protected supportInteractiveLayer: boolean;\n protected timeline: ITimeline;\n\n declare params: Partial<IStageParams>;\n\n /**\n * 所有属性都具有默认值。\n * Canvas为字符串或者Canvas元素,那么默认图层就会绑定到这个Canvas上\n * 如果不传入Canvas,那么会新建一个Canvas,用户可以通过Window模块管理这个Canvas\n * 1. 如果没有传入宽高,那么默认为canvas宽高,如果传入了宽高则stage使用传入宽高作为视口宽高\n * @param params\n */\n constructor(params: Partial<IStageParams> = {}) {\n super({});\n this.params = params;\n this.theme = new Theme();\n this.hooks = {\n beforeRender: new SyncHook(['stage']),\n afterRender: new SyncHook(['stage'])\n };\n this.global = application.global;\n if (!this.global.env && isBrowserEnv()) {\n // 如果是浏览器环境,默认设置env\n this.global.setEnv('browser');\n }\n this.window = container.get<IWindow>(VWindow);\n this.renderService = container.get<IRenderService>(RenderService);\n this.pluginService = container.get<IPluginService>(PluginService);\n this.layerService = container.get<ILayerService>(LayerService);\n this.pluginService.active(this, params);\n\n this.window.create({\n width: params.width,\n height: params.height,\n container: params.container,\n dpr: params.dpr || this.global.devicePixelRatio,\n canvasControled: params.canvasControled !== false,\n title: params.title || '',\n canvas: params.canvas\n });\n\n this._viewBox = new AABBBounds();\n if (params.viewBox) {\n this._viewBox.setValue(params.viewBox.x1, params.viewBox.y1, params.viewBox.x2, params.viewBox.y2);\n } else {\n this._viewBox.setValue(0, 0, this.width, this.height);\n }\n\n this.state = 'normal';\n this.renderCount = 0;\n this.tryInitEventSystem();\n // // 没有传入xy就默认为0\n // this._x = params.x ?? DefaultConfig.X;\n // this._y = params.y ?? DefaultConfig.Y;\n // // 没有传入view的宽高则默认为window的宽高\n // this._viewWidth = params.viewWidth ?? this.window.width;\n // this._viewHeight = params.viewHeight ?? this.window.height;\n this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height);\n // this._AABBBounds.set(this._x, this._y, this._viewWidth + this._x, this._viewHeight + this._y);\n // 背景色默认为纯白色\n this._background = params.background ?? DefaultConfig.BACKGROUND;\n\n // 创建一个默认layer图层\n // this.appendChild(new Layer(this, this.global, this.window, { main: true }));\n this.appendChild(this.layerService.createLayer(this, { main: true }));\n\n this.nextFrameRenderLayerSet = new Set();\n this.willNextFrameRender = false;\n this.stage = this;\n this.renderStyle = params.renderStyle;\n\n // this.autoRender = params.autoRender;\n if (params.autoRender) {\n this.enableAutoRender();\n }\n // 默认不开启dirtyBounds\n if (params.disableDirtyBounds === false) {\n this.enableDirtyBounds();\n }\n\n if (params.enableHtmlAttribute) {\n this.enableHtmlAttribute(params.enableHtmlAttribute);\n }\n\n params.enableLayout && this.enableLayout();\n this.hooks.beforeRender.tap('constructor', this.beforeRender);\n this.hooks.afterRender.tap('constructor', this.afterRender);\n this._beforeRender = params.beforeRender;\n this._afterRender = params.afterRender;\n this.ticker = params.ticker || defaultTicker;\n this.supportInteractiveLayer = params.interactiveLayer !== false;\n this.timeline = new DefaultTimeline();\n this.ticker.addTimeline(this.timeline);\n this.timeline.pause();\n if (!params.optimize) {\n params.optimize = {};\n }\n this.optmize(params.optimize);\n // 如果背景是图片,触发加载图片操作\n if (params.background && isString(this._background) && this._background.includes('/')) {\n this.setAttributes({ background: this._background });\n }\n }\n\n protected tryInitEventSystem() {\n if (this.global.supportEvent && !this._eventSystem) {\n this._eventSystem = new EventSystem({\n targetElement: this.window,\n resolution: this.window.dpr || this.global.devicePixelRatio,\n rootNode: this as any,\n global: this.global,\n viewport: {\n viewBox: this._viewBox,\n get x(): number {\n return this.viewBox.x1;\n },\n get y(): number {\n return this.viewBox.y1;\n },\n get width(): number {\n return this.viewBox.width();\n },\n get height(): number {\n return this.viewBox.height();\n }\n }\n });\n }\n }\n\n preventRender(prevent: boolean) {\n if (prevent) {\n this._skipRender = -Infinity;\n } else {\n // 判断是否需要outRange优化\n if (this.params.optimize.skipRenderWithOutRange !== false) {\n this._skipRender = this.window.isVisible() ? 0 : 1;\n } else {\n this._skipRender = 0;\n }\n }\n }\n\n // 优化策略\n optmize(params: IOptimizeType) {\n this.optmizeRender(params.skipRenderWithOutRange);\n this.params.optimize = params;\n }\n\n // 优化渲染\n protected optmizeRender(skipRenderWithOutRange: boolean = false) {\n if (!skipRenderWithOutRange) {\n return;\n }\n // 不在视口内的时候,跳过渲染\n this._skipRender = this._skipRender < 0 ? this._skipRender : this.window.isVisible() ? 0 : 1;\n this.window.onVisibleChange(this._onVisibleChange);\n }\n\n protected _onVisibleChange = (visible: boolean) => {\n if (this._skipRender < 0) {\n return;\n }\n if (visible) {\n if (this.dirtyBounds) {\n this.dirtyBounds.setValue(0, 0, this._viewBox.width(), this._viewBox.height());\n }\n if (this._skipRender > 1) {\n this.renderNextFrame();\n }\n this._skipRender = 0;\n } else {\n this._skipRender = 1;\n }\n };\n\n getTimeline() {\n return this.timeline;\n }\n\n get3dOptions(options: IOption3D) {\n const {\n center = { x: this.width / 2, y: this.height / 2, z: 0, dx: 0, dy: 0, dz: 0 },\n light = {},\n alpha = 0,\n beta = 0,\n camera,\n fieldRatio = 1,\n fieldDepth\n } = options;\n\n return {\n ...options,\n center,\n light,\n alpha,\n beta,\n camera,\n fieldRatio,\n fieldDepth\n };\n }\n\n set3dOptions(options: IOption3D) {\n this.option3d = options;\n const options3d = this.get3dOptions(options);\n const { light, center, camera, alpha, beta, fieldRatio, fieldDepth } = options3d;\n const { dir = [1, 1, -1], color = 'white', ambient } = light;\n\n const centerX = (center.x ?? this.width / 2) + (center.dx ?? 0);\n const centerY = (center.y ?? this.height / 2) + (center.dy ?? 0);\n const centerZ = (center.z ?? 0) + (center.dz ?? 0);\n const centerVec3: vec3 = [centerX, centerY, centerZ];\n const z = 1;\n let cameraX = 0;\n let cameraY = 0;\n let cameraZ = 0;\n if (!camera) {\n cameraX = Math.sin(alpha) + centerX;\n cameraY = Math.sin(beta) + centerY;\n cameraZ = Math.cos(alpha) * Math.cos(beta) * z;\n }\n\n this.light = new DirectionalLight(dir, color, ambient);\n const cameraParams = {\n left: 0,\n right: this.width,\n top: 0,\n bottom: this.height,\n fieldRatio: fieldRatio,\n fieldDepth,\n viewParams: {\n pos: [cameraX, cameraY, cameraZ] as vec3,\n center: centerVec3,\n up: [0, 1, 0] as vec3\n }\n };\n if (this.camera) {\n this.camera.params = cameraParams;\n } else {\n this.camera = new OrthoCamera(cameraParams);\n }\n\n if (options.enableView3dTransform) {\n this.enableView3dTransform();\n }\n }\n\n protected beforeRender = (stage: IStage) => {\n this._beforeRender && this._beforeRender(stage);\n };\n\n protected afterRender = (stage: IStage) => {\n this.renderCount++;\n this._afterRender && this._afterRender(stage);\n this._afterNextRenderCbs && this._afterNextRenderCbs.forEach(cb => cb(stage));\n this._afterNextRenderCbs = null;\n };\n\n setBeforeRender(cb: (stage: IStage) => void) {\n this._beforeRender = cb;\n }\n\n setAfterRender(cb: (stage: IStage) => void) {\n this._afterRender = cb;\n }\n\n afterNextRender(cb: (stage: IStage) => void) {\n if (!this._afterNextRenderCbs) {\n this._afterNextRenderCbs = [];\n }\n this._afterNextRenderCbs.push(cb);\n }\n\n enableView3dTransform() {\n if (this.view3dTranform) {\n return;\n }\n this.view3dTranform = true;\n this.pluginService.register(new ViewTransform3dPlugin());\n }\n\n disableView3dTranform() {\n if (!this.view3dTranform) {\n return;\n }\n this.view3dTranform = false;\n this.pluginService.findPluginsByName('ViewTransform3dPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n\n enableAutoRender() {\n if (this.autoRender) {\n return;\n }\n this.autoRender = true;\n this.pluginService.register(new AutoRenderPlugin());\n }\n disableAutoRender() {\n if (!this.autoRender) {\n return;\n }\n this.autoRender = false;\n this.pluginService.findPluginsByName('AutoRenderPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableIncrementalAutoRender() {\n if (this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = true;\n this.pluginService.register(new IncrementalAutoRenderPlugin());\n }\n disableIncrementalAutoRender() {\n if (!this.increaseAutoRender) {\n return;\n }\n this.increaseAutoRender = false;\n this.pluginService.findPluginsByName('IncrementalAutoRenderPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableDirtyBounds() {\n if (this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = new Bounds();\n let plugin = this.pluginService.findPluginsByName('DirtyBoundsPlugin')[0];\n if (!plugin) {\n plugin = new DirtyBoundsPlugin();\n this.pluginService.register(plugin);\n } else {\n plugin.activate(this.pluginService);\n }\n }\n disableDirtyBounds() {\n if (!this.dirtyBounds) {\n return;\n }\n this.dirtyBounds = null;\n this.pluginService.findPluginsByName('DirtyBoundsPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableLayout() {\n if (this._enableLayout) {\n return;\n }\n this._enableLayout = true;\n this.pluginService.register(new FlexLayoutPlugin());\n }\n disableLayout() {\n if (!this._enableLayout) {\n return;\n }\n this._enableLayout = false;\n this.pluginService.findPluginsByName('FlexLayoutPlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n enableHtmlAttribute(container?: any) {\n if (this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = container;\n this.pluginService.register(new HtmlAttributePlugin());\n }\n disableHtmlAttribute() {\n if (!this.htmlAttribute) {\n return;\n }\n this.htmlAttribute = false;\n this.pluginService.findPluginsByName('HtmlAttributePlugin').forEach(plugin => {\n plugin.deactivate(this.pluginService);\n });\n }\n\n // /**\n // * stage的appendChild,add\n // * @param node\n // * @returns\n // */\n // appendChild<T extends Node>(node: T): T | null {\n // const layer = this.at(0);\n // if (!layer) {\n // return null;\n // }\n // return layer.appendChild<T>(node);\n // }\n\n protected tryUpdateAABBBounds(): AABBBounds {\n const viewBox = this._viewBox;\n this._AABBBounds.setValue(viewBox.x1, viewBox.y1, viewBox.x2, viewBox.y2);\n return this._AABBBounds;\n }\n\n combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer {\n throw new Error('暂不支持');\n }\n // 如果传入CanvasId,如果存在相同Id,说明这两个图层使用相同的Canvas绘制\n // 但需要注意的是依然是两个图层(用于解决Table嵌入ChartSpace不影响Table的绘制)\n createLayer(canvasId?: string, layerMode?: LayerMode): ILayer {\n // 创建一个默认layer图层\n const layer = this.layerService.createLayer(this, {\n main: false,\n layerMode,\n canvasId\n });\n this.appendChild(layer);\n return layer;\n // const layer = new Layer(this, this.global, this.window, {\n // main: false,\n // canvasId\n // });\n // this.appendChild(layer);\n // return layer;\n }\n sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void {\n const children = this.children;\n children.sort(cb);\n this.removeAllChild();\n children.forEach(c => {\n this.appendChild(c);\n });\n }\n removeLayer(ILayerId: number): ILayer | false {\n return this.removeChild(this.findChildByUid(ILayerId) as IGraphic) as ILayer;\n }\n tryInitInteractiveLayer() {\n // TODO:顺序可能会存在问题\n // 支持交互层,且没有创建过,那就创建\n if (this.supportInteractiveLayer && !this.interactiveLayer) {\n this.interactiveLayer = this.createLayer();\n this.interactiveLayer.name = '_builtin_interactive';\n this.nextFrameRenderLayerSet.add(this.interactiveLayer as any); // to be fixed\n }\n // this.interactiveLayer.afterDraw(l => {\n // l.removeAllChild();\n // });\n }\n\n clearViewBox(color?: string) {\n this.window.clearViewBox(this._viewBox, color);\n }\n\n render(layers?: ILayer[], params?: Partial<IDrawContext>): void {\n this.ticker.start();\n this.timeline.resume();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (!this._skipRender) {\n this.lastRenderparams = params;\n this.hooks.beforeRender.call(this);\n this.renderLayerList(this.children as ILayer[]);\n this.combineLayersToWindow();\n this.nextFrameRenderLayerSet.clear();\n this.hooks.afterRender.call(this);\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected combineLayersToWindow() {\n return;\n // this.forEach<ILayer>((layer, i) => {\n // layer.combineTo(this.window, {\n // clear: i === 0,\n // x: this.x,\n // y: this.y,\n // width: this.viewWidth,\n // height: this.viewHeight,\n // renderService: this.renderService,\n // background: layer === this.defaultLayer ? this.background : undefined,\n // updateBounds: !!this.dirtyBounds\n // });\n // });\n }\n\n renderNextFrame(layers?: ILayer[], force?: boolean): void {\n // render状态中调用的不会触发nextFrame,避免loop\n // if (this.state === 'rendering' && !force) {\n // console.log('abc');\n // return;\n // }\n // 性能优化,避免重复add\n if (this.nextFrameRenderLayerSet.size !== this.childrenCount) {\n (layers || this).forEach<ILayer>((layer: any) => {\n this.nextFrameRenderLayerSet.add(layer);\n });\n }\n if (!this.willNextFrameRender) {\n this.willNextFrameRender = true;\n this.global.getRequestAnimationFrame()(() => {\n this._doRenderInThisFrame(), (this.willNextFrameRender = false);\n });\n }\n }\n\n _doRenderInThisFrame() {\n this.timeline.resume();\n this.ticker.start();\n const state = this.state;\n this.state = 'rendering';\n this.layerService.prepareStageLayer(this);\n if (this.nextFrameRenderLayerSet.size && !this._skipRender) {\n this.hooks.beforeRender.call(this);\n this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {});\n this.combineLayersToWindow();\n this.hooks.afterRender.call(this);\n this.nextFrameRenderLayerSet.clear();\n }\n this.state = state;\n this._skipRender && this._skipRender++;\n }\n\n protected renderLayerList(layerList: ILayer[], params?: Partial<IDrawContext>) {\n const list: ILayer[] = [];\n // 只需要render main layer即可\n for (let i = 0; i < layerList.length; i++) {\n let l = layerList[i];\n if (l.layerMode === 'virtual') {\n l = l.getNativeHandler().mainHandler.layer;\n }\n if (!list.includes(l)) {\n list.push(l);\n }\n }\n list.forEach(layer => {\n // 记录当前的stamp,避免重复绘制layer(如果存在virtual layer)\n if (layer.renderCount > this.renderCount) {\n return;\n }\n layer.renderCount = this.renderCount + 1;\n\n layer.render(\n {\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n },\n { renderStyle: this.renderStyle, ...params }\n );\n });\n\n // 添加交互层渲染\n if (this.interactiveLayer && !layerList.includes(this.interactiveLayer)) {\n this.interactiveLayer.render(\n {\n renderService: this.renderService,\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n },\n { renderStyle: this.renderStyle, ...params }\n );\n }\n }\n\n resizeWindow(w: number, h: number, rerender: boolean = true) {\n this.window.resize(w, h);\n rerender && this.render();\n }\n\n /**\n * 语法糖,如果viewBox和window宽高一样的话,那么会同时缩放window和viewBox\n * @param w\n * @param h\n * @param rerender\n */\n resize(w: number, h: number, rerender: boolean = true): void {\n this.window.resize(w, h);\n this.forEachChildren<ILayer>(c => {\n c.resize(w, h);\n });\n // 如果不是子图的stage,那么认为用户也想要resize view\n if (!this._subView) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n }\n // 设置camera\n // this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n this.camera && this.option3d && this.set3dOptions(this.option3d);\n rerender && this.render();\n }\n resizeView(w: number, h: number, rerender: boolean = true) {\n this.viewBox.setValue(this.viewBox.x1, this.viewBox.y1, this.viewBox.x1 + w, this.viewBox.y1 + h);\n this.forEachChildren<ILayer>(c => {\n c.resizeView(w, h);\n });\n // 设置camera\n this.camera && (this.camera.params = { ...this.camera.params, right: this.width, bottom: this.height });\n rerender && this.render();\n }\n setViewBox(viewBox: IBoundsLike, rerender: boolean): void;\n setViewBox(x: number, y: number, w: number, h: number, rerender: boolean): void;\n setViewBox(x: number | IBoundsLike, y: number | boolean, w?: number, h?: number, rerender?: boolean): void {\n let isRerender: boolean = true;\n\n if (typeof x === 'object') {\n this.viewBox.setValue(x.x1, x.y1, x.x2, x.y2);\n if (y === false) {\n isRerender = false;\n }\n } else {\n this.viewBox.setValue(x, y as number, x + w, (y as number) + h);\n\n if (rerender === false) {\n isRerender = false;\n }\n }\n\n this.forEachChildren<ILayer>(c => {\n c.resizeView(this.viewBox.width(), this.viewBox.height());\n });\n isRerender && this.render();\n }\n setDpr(dpr: number, rerender: boolean = true): void {\n // this.window.setDpr(dpr);\n this.forEachChildren<ILayer>(c => {\n c.setDpr(dpr);\n });\n\n rerender && this.render();\n }\n setOrigin(x: number, y: number): void {\n throw new Error('暂不支持');\n }\n export(type: IExportType): HTMLCanvasElement | ImageData {\n throw new Error('暂不支持');\n }\n pick(x: number, y: number): PickResult | false {\n if (!this.pickerService) {\n this.pickerService = container.get<IPickerService>(PickerService);\n }\n // 暂时不提供layer的pick\n const result = this.pickerService.pick(this.children as unknown as IGraphic[], new Point(x, y), {\n bounds: this.AABBBounds\n });\n if (result?.graphic || result?.group) {\n return result;\n }\n return false;\n }\n\n // 动画相关\n startAnimate(t: number): void {\n throw new Error('暂不支持');\n }\n setToFrame(t: number): void {\n throw new Error('暂不支持');\n }\n\n release() {\n super.release();\n this.eventSystem && this.eventSystem.release();\n this.pluginService.release();\n this.forEach(layer => {\n layer.release();\n });\n this.interactiveLayer && this.interactiveLayer.release();\n this.window.release();\n }\n\n setStage(stage?: IStage) {\n return;\n // this.stage = this;\n // this.forEachChildren(item => {\n // (item as Layer).setStage(this);\n // });\n }\n\n /**\n * 添加dirty区域,会修改参数b\n * @param b\n * @param matrix\n */\n dirty(b: IBounds, matrix?: IMatrix) {\n if (matrix) {\n b.transformWithMatrix(matrix);\n }\n if (this.dirtyBounds.empty()) {\n this.dirtyBounds.setValue(b.x1, b.y1, b.x2, b.y2);\n }\n this.dirtyBounds.union(b);\n }\n\n getLayer(name: string): undefined | ILayer {\n const layer = this.children.filter(layer => layer.name === name);\n return layer[0] as ILayer;\n }\n\n renderTo(window: IWindow, params: { x: number; y: number; width: number; height: number }) {\n this.forEachChildren<ILayer>((layer, i) => {\n layer.drawTo(window, {\n ...params,\n renderService: this.renderService,\n background: layer === this.defaultLayer ? this.background : undefined,\n clear: i === 0, // 第一个layer需要clear\n updateBounds: !!(this.dirtyBounds && !this.dirtyBounds.empty())\n });\n });\n }\n\n /**\n * 渲染到新的window上去\n * @param fullImage 是否是全量的image,因为可能之前的window有一部分场景树超过window的帧缓冲了\n * @returns\n */\n renderToNewWindow(fullImage: boolean = true, viewBox?: IAABBBounds): IWindow {\n const window = container.get<IWindow>(VWindow);\n if (fullImage) {\n window.create({\n width: this.viewWidth,\n height: this.viewHeight,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n } else {\n const width = viewBox ? viewBox.width() : Math.min(this.viewWidth, this.window.width - this.x);\n const height = viewBox ? viewBox.height() : Math.min(this.viewHeight, this.window.height - this.y);\n window.create({\n width,\n height,\n dpr: this.window.dpr,\n canvasControled: true,\n offscreen: true,\n title: ''\n });\n }\n\n const x = viewBox ? -viewBox.x1 : 0;\n const y = viewBox ? -viewBox.y1 : 0;\n this.renderTo(window, {\n x,\n y,\n width: viewBox ? viewBox.x2 : window.width,\n height: viewBox ? viewBox.y2 : window.height\n });\n return window;\n }\n\n toCanvas(fullImage: boolean = true, viewBox?: IAABBBounds): HTMLCanvasElement | null {\n const window = this.renderToNewWindow(fullImage, viewBox);\n const c = window.getNativeHandler();\n if (c.nativeCanvas) {\n return c.nativeCanvas;\n }\n return null;\n }\n\n setCursor(mode?: string): void {\n this._cursor = mode;\n this.eventSystem.setCursor(mode);\n }\n\n getCursor() {\n return this._cursor;\n }\n}\n"]}
|
package/es/graphic/config.js
CHANGED
|
@@ -207,6 +207,8 @@ export const DefaultPolygonAttribute = Object.assign(Object.assign({}, DefaultAt
|
|
|
207
207
|
export const DefaultRectAttribute = Object.assign(Object.assign({}, DefaultAttribute), {
|
|
208
208
|
width: 0,
|
|
209
209
|
height: 0,
|
|
210
|
+
x1: 0,
|
|
211
|
+
y1: 0,
|
|
210
212
|
strokeBoundsBuffer: 0,
|
|
211
213
|
cornerRadius: 0
|
|
212
214
|
});
|
|
@@ -214,6 +216,8 @@ export const DefaultRectAttribute = Object.assign(Object.assign({}, DefaultAttri
|
|
|
214
216
|
export const DefaultRect3dAttribute = Object.assign(Object.assign({}, DefaultAttribute), {
|
|
215
217
|
width: 0,
|
|
216
218
|
height: 0,
|
|
219
|
+
x1: 0,
|
|
220
|
+
y1: 0,
|
|
217
221
|
cornerRadius: 0,
|
|
218
222
|
length: 0
|
|
219
223
|
});
|