@visactor/vrender 0.15.0-alpha.11 → 0.15.0-alpha.13
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/core/contributions/env/base-contribution.d.ts +6 -0
- package/cjs/core/contributions/env/base-contribution.js +12 -0
- package/cjs/core/contributions/env/base-contribution.js.map +1 -1
- package/cjs/core/contributions/env/browser-contribution.d.ts +6 -0
- package/cjs/core/contributions/env/browser-contribution.js +19 -0
- package/cjs/core/contributions/env/browser-contribution.js.map +1 -1
- package/cjs/core/contributions/window/base-contribution.d.ts +9 -5
- package/cjs/core/contributions/window/base-contribution.js +6 -0
- package/cjs/core/contributions/window/base-contribution.js.map +1 -1
- package/cjs/core/contributions/window/browser-contribution.d.ts +4 -0
- package/cjs/core/contributions/window/browser-contribution.js +3 -0
- package/cjs/core/contributions/window/browser-contribution.js.map +1 -1
- package/cjs/core/global.d.ts +6 -0
- package/cjs/core/global.js +9 -0
- package/cjs/core/global.js.map +1 -1
- package/cjs/core/stage.js +1 -1
- package/cjs/core/stage.js.map +1 -1
- package/cjs/core/window.d.ts +4 -0
- package/cjs/core/window.js +4 -1
- package/cjs/core/window.js.map +1 -1
- package/cjs/graphic/text.js +1 -1
- package/cjs/graphic/text.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/interface/global.d.ts +12 -0
- package/cjs/interface/global.js.map +1 -1
- package/cjs/interface/window.d.ts +8 -0
- package/cjs/interface/window.js.map +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +7 -3
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/dist/index.js +88 -4
- package/dist/index.min.js +1 -1
- package/es/core/contributions/env/base-contribution.d.ts +6 -0
- package/es/core/contributions/env/base-contribution.js +12 -0
- package/es/core/contributions/env/base-contribution.js.map +1 -1
- package/es/core/contributions/env/browser-contribution.d.ts +6 -0
- package/es/core/contributions/env/browser-contribution.js +19 -0
- package/es/core/contributions/env/browser-contribution.js.map +1 -1
- package/es/core/contributions/window/base-contribution.d.ts +9 -5
- package/es/core/contributions/window/base-contribution.js +6 -0
- package/es/core/contributions/window/base-contribution.js.map +1 -1
- package/es/core/contributions/window/browser-contribution.d.ts +4 -0
- package/es/core/contributions/window/browser-contribution.js +3 -0
- package/es/core/contributions/window/browser-contribution.js.map +1 -1
- package/es/core/global.d.ts +6 -0
- package/es/core/global.js +9 -0
- package/es/core/global.js.map +1 -1
- package/es/core/stage.js +1 -1
- package/es/core/stage.js.map +1 -1
- package/es/core/window.d.ts +4 -0
- package/es/core/window.js +4 -1
- package/es/core/window.js.map +1 -1
- package/es/graphic/text.js +1 -1
- package/es/graphic/text.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/interface/global.d.ts +12 -0
- package/es/interface/global.js.map +1 -1
- package/es/interface/window.d.ts +8 -0
- package/es/interface/window.js.map +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +7 -3
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/package.json +3 -3
|
@@ -45,6 +45,10 @@ export interface IWindow extends Releaseable, Omit<IEventElement, 'on' | 'off' |
|
|
|
45
45
|
getBoundingClientRect: () => IDomRectLike;
|
|
46
46
|
isVisible: (bbox?: IBoundsLike) => boolean;
|
|
47
47
|
onVisibleChange: (cb: (currentVisible: boolean) => void) => void;
|
|
48
|
+
getTopLeft: (baseWindow?: boolean) => {
|
|
49
|
+
top: number;
|
|
50
|
+
left: number;
|
|
51
|
+
};
|
|
48
52
|
}
|
|
49
53
|
export interface IWindowHandlerContribution extends IContribution<IWindow>, Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {
|
|
50
54
|
container?: any;
|
|
@@ -73,4 +77,8 @@ export interface IWindowHandlerContribution extends IContribution<IWindow>, Omit
|
|
|
73
77
|
clearViewBox: (vb: IBoundsLike, color?: string) => void;
|
|
74
78
|
isVisible: (bbox?: IBoundsLike) => boolean;
|
|
75
79
|
onVisibleChange: (cb: (currentVisible: boolean) => void) => void;
|
|
80
|
+
getTopLeft: (baseWindow?: boolean) => {
|
|
81
|
+
top: number;
|
|
82
|
+
left: number;
|
|
83
|
+
};
|
|
76
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interface/window.ts"],"names":[],"mappings":"","file":"window.js","sourcesContent":["// window为内部对象,属性均为stage传入\n\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { ICanvas } from './canvas';\nimport type { IContext2d } from './context';\nimport type { IDomRectLike, IEventElement, Releaseable } from './common';\nimport type { ISyncHook } from './sync-hook';\nimport type { IContribution } from './contribution';\nimport type { IGlobal } from './global';\n\n// TODO: 参数考虑动态注入,比如CreateWindow是native的专用接口\nexport interface IWindowParams {\n canvas?: string | HTMLCanvasElement;\n offscreen?: boolean;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n dpr: number;\n container?: string | HTMLElement;\n canvasControled: boolean;\n title: string;\n CreateWindow?: (w: number, h: number, title: string) => void;\n}\n\nexport interface IWindow\n extends Releaseable,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n hooks: {\n onChange: ISyncHook<[number, number, number, number]>;\n };\n // 窗口的大小\n width: number;\n height: number;\n // // 窗口的位置\n // x: number;\n // y: number;\n // 窗口操作配置\n resizable: boolean;\n minHeight: number;\n minWidth: number;\n maxHeight: number;\n maxWidth: number;\n // 窗口配置\n title: string;\n dpr: number;\n style: CSSStyleDeclaration | Record<string, any>;\n\n create: (options: IWindowParams) => void;\n setWindowHandler: (handler: IWindowHandlerContribution) => void;\n setDpr: (dpr: number) => void;\n resize: (w: number, h: number) => void;\n configure: () => void;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getContainer: () => HTMLElement | any;\n getImageBuffer: (type?: string) => any;\n\n clearViewBox: (viewBox: IBoundsLike, color?: string) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n}\n\nexport interface IWindowHandlerContribution\n extends IContribution<IWindow>,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n container?: any;\n\n configure: (window: IWindow, global: IGlobal) => void;\n createWindow: (params: IWindowParams) => void;\n releaseWindow: () => void;\n resizeWindow: (width: number, height: number) => void;\n setDpr: (dpr: number) => void;\n getDpr: () => number;\n getWH: () => { width: number; height: number };\n getXY: () => { x: number; y: number };\n getTitle: () => string;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getImageBuffer?: (type?: string) => any;\n release: (...params: any) => void;\n\n getStyle: () => CSSStyleDeclaration | Record<string, any>;\n setStyle: (s: CSSStyleDeclaration | Record<string, any>) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n clearViewBox: (vb: IBoundsLike, color?: string) => void;\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interface/window.ts"],"names":[],"mappings":"","file":"window.js","sourcesContent":["// window为内部对象,属性均为stage传入\n\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { ICanvas } from './canvas';\nimport type { IContext2d } from './context';\nimport type { IDomRectLike, IEventElement, Releaseable } from './common';\nimport type { ISyncHook } from './sync-hook';\nimport type { IContribution } from './contribution';\nimport type { IGlobal } from './global';\n\n// TODO: 参数考虑动态注入,比如CreateWindow是native的专用接口\nexport interface IWindowParams {\n canvas?: string | HTMLCanvasElement;\n offscreen?: boolean;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n dpr: number;\n container?: string | HTMLElement;\n canvasControled: boolean;\n title: string;\n CreateWindow?: (w: number, h: number, title: string) => void;\n}\n\nexport interface IWindow\n extends Releaseable,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n hooks: {\n onChange: ISyncHook<[number, number, number, number]>;\n };\n // 窗口的大小\n width: number;\n height: number;\n // // 窗口的位置\n // x: number;\n // y: number;\n // 窗口操作配置\n resizable: boolean;\n minHeight: number;\n minWidth: number;\n maxHeight: number;\n maxWidth: number;\n // 窗口配置\n title: string;\n dpr: number;\n style: CSSStyleDeclaration | Record<string, any>;\n\n create: (options: IWindowParams) => void;\n setWindowHandler: (handler: IWindowHandlerContribution) => void;\n setDpr: (dpr: number) => void;\n resize: (w: number, h: number) => void;\n configure: () => void;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getContainer: () => HTMLElement | any;\n getImageBuffer: (type?: string) => any;\n\n clearViewBox: (viewBox: IBoundsLike, color?: string) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n\n getTopLeft: (baseWindow?: boolean) => { top: number; left: number };\n}\n\nexport interface IWindowHandlerContribution\n extends IContribution<IWindow>,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n container?: any;\n\n configure: (window: IWindow, global: IGlobal) => void;\n createWindow: (params: IWindowParams) => void;\n releaseWindow: () => void;\n resizeWindow: (width: number, height: number) => void;\n setDpr: (dpr: number) => void;\n getDpr: () => number;\n getWH: () => { width: number; height: number };\n getXY: () => { x: number; y: number };\n getTitle: () => string;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getImageBuffer?: (type?: string) => any;\n release: (...params: any) => void;\n\n getStyle: () => CSSStyleDeclaration | Record<string, any>;\n setStyle: (s: CSSStyleDeclaration | Record<string, any>) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n clearViewBox: (vb: IBoundsLike, color?: string) => void;\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n getTopLeft: (baseWindow?: boolean) => { top: number; left: number };\n}\n"]}
|
|
@@ -34,7 +34,9 @@ class HtmlAttributePlugin {
|
|
|
34
34
|
}
|
|
35
35
|
renderGraphicHTML(graphic) {
|
|
36
36
|
const {html: html} = graphic.attribute;
|
|
37
|
-
if (!html) return
|
|
37
|
+
if (!html) return void (graphic.bindDom && graphic.bindDom.size && (graphic.bindDom.forEach((item => {
|
|
38
|
+
item.dom && item.dom.parentElement.removeChild(item.dom);
|
|
39
|
+
})), graphic.bindDom.clear()));
|
|
38
40
|
const stage = graphic.stage;
|
|
39
41
|
if (!stage) return;
|
|
40
42
|
const {dom: dom, container: container, width: width, height: height, style: style, anchorType: anchorType = "boundsLeftTop"} = html;
|
|
@@ -58,7 +60,8 @@ class HtmlAttributePlugin {
|
|
|
58
60
|
dom: nativeDom,
|
|
59
61
|
container: container,
|
|
60
62
|
wrapGroup: wrapGroup
|
|
61
|
-
})), wrapGroup.style.pointerEvents = "none", wrapGroup.style.position || (wrapGroup.style.position = "absolute"
|
|
63
|
+
})), wrapGroup.style.pointerEvents = "none", wrapGroup.style.position || (wrapGroup.style.position = "absolute",
|
|
64
|
+
nativeContainer.style.position = "relative");
|
|
62
65
|
let left = 0, top = 0;
|
|
63
66
|
if ("position" === anchorType) {
|
|
64
67
|
const matrix = graphic.transMatrix;
|
|
@@ -67,7 +70,8 @@ class HtmlAttributePlugin {
|
|
|
67
70
|
const b = graphic.AABBBounds;
|
|
68
71
|
left = b.x1, top = b.y1;
|
|
69
72
|
}
|
|
70
|
-
|
|
73
|
+
const containerTL = application_1.application.global.getElementTopLeft(nativeContainer, !1), windowTL = stage.window.getTopLeft(!1), offsetX = left + windowTL.left - containerTL.left, offsetTop = top + windowTL.top - containerTL.top;
|
|
74
|
+
wrapGroup.style.left = `${offsetX}px`, wrapGroup.style.top = `${offsetTop}px`;
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
77
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/builtin-plugin/html-attribute-plugin.ts"],"names":[],"mappings":";;;AAAA,sDAAmD;AAEnD,mDAAgD;AAChD,2CAAiD;AAEjD,MAAa,mBAAmB;IAAhC;QACE,SAAI,GAA0B,qBAAqB,CAAC;QACpD,gBAAW,GAAiB,YAAY,CAAC;QAEzC,SAAI,GAAW,qBAAS,CAAC,kBAAkB,EAAE,CAAC;QAC9C,QAAG,GAAW,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/plugins/builtin-plugin/html-attribute-plugin.ts"],"names":[],"mappings":";;;AAAA,sDAAmD;AAEnD,mDAAgD;AAChD,2CAAiD;AAEjD,MAAa,mBAAmB;IAAhC;QACE,SAAI,GAA0B,qBAAqB,CAAC;QACpD,gBAAW,GAAiB,YAAY,CAAC;QAEzC,SAAI,GAAW,qBAAS,CAAC,kBAAkB,EAAE,CAAC;QAC9C,QAAG,GAAW,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAyHtC,CAAC;IAvHC,QAAQ,CAAC,OAAuB;QAC9B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBAClD,OAAO;aACR;YAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,OAAuB;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACxF,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,QAAQ,CAAC,aAA6B;QAC9C,IAAI,yBAAW,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;YACxC,aAAa,CAAC,eAAe;iBAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;gBACb,OAAO,CAAC,MAAA,CAAC,CAAC,SAAS,CAAC,MAAM,mCAAI,0BAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,SAAS,CAAC,MAAM,mCAAI,0BAAgB,CAAC,MAAM,CAAC,CAAC;YAC3G,CAAC,CAAC;iBACD,OAAO,CAAC,KAAK,CAAC,EAAE;gBACf,IAAI,CAAC,eAAe,CAAC,KAAe,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED,eAAe,CAAC,KAAa;QAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,CAAC,eAAe,CAAC,CAAC,CAAW,EAAE,EAAE;YACpC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,OAAiB;QACjC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;gBAE3C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC7B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;aACzB;YACD,OAAO;SACR;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,EAAE,GAAG,IAAI,CAAC;QACpF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpB,OAAO,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;SAC7B;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE;YAC9D,OAAO;SACR;QAED,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;YACxC,yBAAW,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAI,SAAsB,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,UAAiB,CAAC;SAChF;aAAM;YACL,SAAS,GAAG,GAAG,CAAC;SACjB;QAED,IAAI,eAAe,CAAC;QACpB,MAAM,UAAU,GACd,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACrG,IAAI,UAAU,EAAE;YACd,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;gBAClC,eAAe,GAAG,yBAAW,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;aACjE;iBAAM;gBACL,eAAe,GAAG,UAAU,CAAC;aAC9B;SACF;aAAM;YAEL,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;SACvD;QAED,MAAM,SAAS,GAAG,yBAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;QAClH,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAgB,EAAE,CAAC,CAAC;SACtF;QAED,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QAEvC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC7B,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACtC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;SAC7C;QACD,IAAI,IAAI,GAAW,CAAC,CAAC;QACrB,IAAI,GAAG,GAAW,CAAC,CAAC;QACpB,IAAI,UAAU,KAAK,UAAU,EAAE;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;YACnC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;YAChB,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;SAChB;aAAM;YACL,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7B,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACZ,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;SACZ;QAGD,MAAM,WAAW,GAAG,yBAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QACxD,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;QAEvD,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,IAAI,CAAC;QACtC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,IAAI,CAAC;IACzC,CAAC;CACF;AA9HD,kDA8HC","file":"html-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService, IRenderService, IDrawContext, IGroup } from '../../interface';\nimport { application } from '../../application';\nimport { DefaultAttribute } from '../../graphic';\n\nexport class HtmlAttributePlugin implements IPlugin {\n name: 'HtmlAttributePlugin' = 'HtmlAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n\n this.drawHTML(context.stage.renderService);\n });\n }\n deactivate(context: IPluginService): void {\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n protected drawHTML(renderService: IRenderService) {\n if (application.global.env === 'browser') {\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroupHTML(group as IGroup);\n });\n }\n }\n\n renderGroupHTML(group: IGroup) {\n this.renderGraphicHTML(group);\n group.forEachChildren((g: IGraphic) => {\n this.renderGraphicHTML(g);\n });\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { html } = graphic.attribute;\n if (!html) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const { dom, container, width, height, style, anchorType = 'boundsLeftTop' } = html;\n if (!graphic.bindDom) {\n graphic.bindDom = new Map();\n }\n const lastDom = graphic.bindDom.get(dom);\n // 如果存在了(dom存在,且container没有变化),就跳过\n if (lastDom && !(container && container !== lastDom.container)) {\n return;\n }\n // 清除上一次的dom\n graphic.bindDom.forEach(({ wrapGroup }) => {\n application.global.removeDom(wrapGroup);\n });\n // 转化这个dom为nativeDOM\n let nativeDom: HTMLElement;\n if (typeof dom === 'string') {\n nativeDom = new DOMParser().parseFromString(dom, 'text/xml').firstChild as any;\n } else {\n nativeDom = dom;\n }\n // 获取container的dom,默认为window的container\n let nativeContainer;\n const _container =\n container || (stage.params.enableHtmlAttribute === true ? null : stage.params.enableHtmlAttribute);\n if (_container) {\n if (typeof _container === 'string') {\n nativeContainer = application.global.getElementById(_container);\n } else {\n nativeContainer = _container;\n }\n } else {\n // nativeContainer = application.global.getRootElement();\n nativeContainer = graphic.stage.window.getContainer();\n }\n // 创建wrapGroup\n const wrapGroup = application.global.createDom({ tagName: 'div', width, height, style, parent: nativeContainer });\n if (wrapGroup) {\n wrapGroup.appendChild(nativeDom);\n graphic.bindDom.set(dom, { dom: nativeDom, container, wrapGroup: wrapGroup as any });\n }\n // 事件穿透\n wrapGroup.style.pointerEvents = 'none';\n // 定位wrapGroup\n if (!wrapGroup.style.position) {\n wrapGroup.style.position = 'absolute';\n nativeContainer.style.position = 'relative';\n }\n let left: number = 0;\n let top: number = 0;\n if (anchorType === 'position') {\n const matrix = graphic.transMatrix;\n left = matrix.e;\n top = matrix.f;\n } else {\n const b = graphic.AABBBounds;\n left = b.x1;\n top = b.y1;\n }\n // 查看wrapGroup的位置\n // const wrapGroupTL = application.global.getElementTopLeft(wrapGroup, false);\n const containerTL = application.global.getElementTopLeft(nativeContainer, false);\n const windowTL = stage.window.getTopLeft(false);\n const offsetX = left + windowTL.left - containerTL.left;\n const offsetTop = top + windowTL.top - containerTL.top;\n // wrapGroup.style.transform = `translate(${offsetX}px, ${offsetTop}px)`;\n wrapGroup.style.left = `${offsetX}px`;\n wrapGroup.style.top = `${offsetTop}px`;\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -6362,6 +6362,24 @@
|
|
|
6362
6362
|
}
|
|
6363
6363
|
return this.envContribution.createDom(params);
|
|
6364
6364
|
}
|
|
6365
|
+
getElementTop(dom, baseWindow = false) {
|
|
6366
|
+
if (!this._env) {
|
|
6367
|
+
this.setEnv('browser');
|
|
6368
|
+
}
|
|
6369
|
+
return this.envContribution.getElementTop(dom, baseWindow);
|
|
6370
|
+
}
|
|
6371
|
+
getElementLeft(dom, baseWindow = false) {
|
|
6372
|
+
if (!this._env) {
|
|
6373
|
+
this.setEnv('browser');
|
|
6374
|
+
}
|
|
6375
|
+
return this.envContribution.getElementLeft(dom, baseWindow);
|
|
6376
|
+
}
|
|
6377
|
+
getElementTopLeft(dom, baseWindow = false) {
|
|
6378
|
+
if (!this._env) {
|
|
6379
|
+
this.setEnv('browser');
|
|
6380
|
+
}
|
|
6381
|
+
return this.envContribution.getElementTopLeft(dom, baseWindow);
|
|
6382
|
+
}
|
|
6365
6383
|
};
|
|
6366
6384
|
exports.DefaultGlobal = __decorate([
|
|
6367
6385
|
injectable(),
|
|
@@ -20579,6 +20597,7 @@
|
|
|
20579
20597
|
const handler = container.getNamed(WindowHandlerContribution, global.env);
|
|
20580
20598
|
handler.configure(this, global);
|
|
20581
20599
|
this.actived = true;
|
|
20600
|
+
this._handler;
|
|
20582
20601
|
}
|
|
20583
20602
|
get style() {
|
|
20584
20603
|
return this._handler.getStyle();
|
|
@@ -20645,6 +20664,9 @@
|
|
|
20645
20664
|
onVisibleChange(cb) {
|
|
20646
20665
|
return this._handler.onVisibleChange(cb);
|
|
20647
20666
|
}
|
|
20667
|
+
getTopLeft(baseWindow) {
|
|
20668
|
+
return this._handler.getTopLeft(baseWindow);
|
|
20669
|
+
}
|
|
20648
20670
|
};
|
|
20649
20671
|
__decorate([
|
|
20650
20672
|
postConstruct(),
|
|
@@ -21869,7 +21891,7 @@
|
|
|
21869
21891
|
return false;
|
|
21870
21892
|
}
|
|
21871
21893
|
this.tryUpdateAABBBounds();
|
|
21872
|
-
return this.clipedText !== attribute.text;
|
|
21894
|
+
return this.clipedText !== attribute.text.toString();
|
|
21873
21895
|
}
|
|
21874
21896
|
get multilineLayout() {
|
|
21875
21897
|
if (!Array.isArray(this.attribute.text)) {
|
|
@@ -32098,6 +32120,15 @@
|
|
|
32098
32120
|
};
|
|
32099
32121
|
});
|
|
32100
32122
|
}
|
|
32123
|
+
getElementTop(dom, baseWindow) {
|
|
32124
|
+
return 0;
|
|
32125
|
+
}
|
|
32126
|
+
getElementLeft(dom, baseWindow) {
|
|
32127
|
+
return 0;
|
|
32128
|
+
}
|
|
32129
|
+
getElementTopLeft(dom, baseWindow) {
|
|
32130
|
+
return { top: 0, left: 0 };
|
|
32131
|
+
}
|
|
32101
32132
|
};
|
|
32102
32133
|
exports.BaseEnvContribution = __decorate([
|
|
32103
32134
|
injectable()
|
|
@@ -32324,6 +32355,38 @@
|
|
|
32324
32355
|
release(...params) {
|
|
32325
32356
|
return;
|
|
32326
32357
|
}
|
|
32358
|
+
getElementTop(element, baseWindow) {
|
|
32359
|
+
let actualTop = element.offsetTop;
|
|
32360
|
+
let current = element.offsetParent;
|
|
32361
|
+
while (current !== null) {
|
|
32362
|
+
actualTop += current.offsetTop;
|
|
32363
|
+
current = current.offsetParent;
|
|
32364
|
+
}
|
|
32365
|
+
return actualTop;
|
|
32366
|
+
}
|
|
32367
|
+
getElementLeft(element, baseWindow) {
|
|
32368
|
+
let actualLeft = element.offsetLeft;
|
|
32369
|
+
let current = element.offsetParent;
|
|
32370
|
+
while (current !== null) {
|
|
32371
|
+
actualLeft += current.offsetLeft;
|
|
32372
|
+
current = current.offsetParent;
|
|
32373
|
+
}
|
|
32374
|
+
return actualLeft;
|
|
32375
|
+
}
|
|
32376
|
+
getElementTopLeft(element, baseWindow) {
|
|
32377
|
+
let actualTop = element.offsetTop;
|
|
32378
|
+
let actualLeft = element.offsetLeft;
|
|
32379
|
+
let current = element.offsetParent;
|
|
32380
|
+
while (current !== null) {
|
|
32381
|
+
actualTop += current.offsetTop;
|
|
32382
|
+
actualLeft += current.offsetLeft;
|
|
32383
|
+
current = current.offsetParent;
|
|
32384
|
+
}
|
|
32385
|
+
return {
|
|
32386
|
+
top: actualTop,
|
|
32387
|
+
left: actualLeft
|
|
32388
|
+
};
|
|
32389
|
+
}
|
|
32327
32390
|
};
|
|
32328
32391
|
BrowserEnvContribution = __decorate([
|
|
32329
32392
|
injectable(),
|
|
@@ -33061,6 +33124,12 @@
|
|
|
33061
33124
|
onVisibleChange(cb) {
|
|
33062
33125
|
return;
|
|
33063
33126
|
}
|
|
33127
|
+
getTopLeft(baseWindow) {
|
|
33128
|
+
return {
|
|
33129
|
+
top: 0,
|
|
33130
|
+
left: 0
|
|
33131
|
+
};
|
|
33132
|
+
}
|
|
33064
33133
|
};
|
|
33065
33134
|
exports.BaseWindowHandlerContribution = __decorate([
|
|
33066
33135
|
injectable(),
|
|
@@ -33277,6 +33346,9 @@
|
|
|
33277
33346
|
onVisibleChange(cb) {
|
|
33278
33347
|
this._onVisibleChangeCb = cb;
|
|
33279
33348
|
}
|
|
33349
|
+
getTopLeft(baseWindow) {
|
|
33350
|
+
return this.global.getElementTopLeft(this.canvas.nativeCanvas, baseWindow);
|
|
33351
|
+
}
|
|
33280
33352
|
};
|
|
33281
33353
|
BrowserWindowHandlerContribution.env = 'browser';
|
|
33282
33354
|
BrowserWindowHandlerContribution = __decorate([
|
|
@@ -38702,6 +38774,12 @@
|
|
|
38702
38774
|
renderGraphicHTML(graphic) {
|
|
38703
38775
|
const { html } = graphic.attribute;
|
|
38704
38776
|
if (!html) {
|
|
38777
|
+
if (graphic.bindDom && graphic.bindDom.size) {
|
|
38778
|
+
graphic.bindDom.forEach(item => {
|
|
38779
|
+
item.dom && item.dom.parentElement.removeChild(item.dom);
|
|
38780
|
+
});
|
|
38781
|
+
graphic.bindDom.clear();
|
|
38782
|
+
}
|
|
38705
38783
|
return;
|
|
38706
38784
|
}
|
|
38707
38785
|
const stage = graphic.stage;
|
|
@@ -38747,6 +38825,7 @@
|
|
|
38747
38825
|
wrapGroup.style.pointerEvents = 'none';
|
|
38748
38826
|
if (!wrapGroup.style.position) {
|
|
38749
38827
|
wrapGroup.style.position = 'absolute';
|
|
38828
|
+
nativeContainer.style.position = 'relative';
|
|
38750
38829
|
}
|
|
38751
38830
|
let left = 0;
|
|
38752
38831
|
let top = 0;
|
|
@@ -38760,8 +38839,12 @@
|
|
|
38760
38839
|
left = b.x1;
|
|
38761
38840
|
top = b.y1;
|
|
38762
38841
|
}
|
|
38763
|
-
|
|
38764
|
-
|
|
38842
|
+
const containerTL = application.global.getElementTopLeft(nativeContainer, false);
|
|
38843
|
+
const windowTL = stage.window.getTopLeft(false);
|
|
38844
|
+
const offsetX = left + windowTL.left - containerTL.left;
|
|
38845
|
+
const offsetTop = top + windowTL.top - containerTL.top;
|
|
38846
|
+
wrapGroup.style.left = `${offsetX}px`;
|
|
38847
|
+
wrapGroup.style.top = `${offsetTop}px`;
|
|
38765
38848
|
}
|
|
38766
38849
|
}
|
|
38767
38850
|
|
|
@@ -39546,6 +39629,7 @@
|
|
|
39546
39629
|
if (this.supportInteractiveLayer && !this.interactiveLayer) {
|
|
39547
39630
|
this.interactiveLayer = this.createLayer();
|
|
39548
39631
|
this.interactiveLayer.name = '_builtin_interactive';
|
|
39632
|
+
this.nextFrameRenderLayerSet.add(this.interactiveLayer);
|
|
39549
39633
|
}
|
|
39550
39634
|
}
|
|
39551
39635
|
clearViewBox(color) {
|
|
@@ -39951,7 +40035,7 @@
|
|
|
39951
40035
|
}
|
|
39952
40036
|
const Fragment = Group;
|
|
39953
40037
|
|
|
39954
|
-
const version = "0.15.0-alpha.
|
|
40038
|
+
const version = "0.15.0-alpha.13";
|
|
39955
40039
|
|
|
39956
40040
|
exports.ACustomAnimate = ACustomAnimate;
|
|
39957
40041
|
exports.ARC3D_NUMBER_TYPE = ARC3D_NUMBER_TYPE;
|