@shijiu/jsview-vue 2.2.35 → 2.2.201

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/bin/browser/BrowserApic.vue.mjs +4 -3
  2. package/bin/browser/BrowserApic2.vue.mjs +4 -3
  3. package/bin/browser/BrowserApicLib.mjs +10 -3
  4. package/bin/browser/BrowserJsvFragShaderView.vue.mjs +63 -0
  5. package/bin/browser/BrowserQrcode.vue.mjs +3 -1
  6. package/bin/browser/BrowserTextureAnim.vue.mjs +7 -6
  7. package/bin/jsview-vue.mjs +2990 -1146
  8. package/bin/types/JsViewEngineWidget/JsvFocus/JsvFocusManager.d.ts +8 -6
  9. package/bin/types/JsViewEngineWidget/MetroWidget/Dispatcher.d.ts +10 -12
  10. package/bin/types/JsViewEngineWidget/MetroWidget/ListWidget.vue.d.ts +3 -3
  11. package/bin/types/JsViewEngineWidget/MetroWidget/MetroWidget.vue.d.ts +3 -3
  12. package/bin/types/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.d.ts +2 -2
  13. package/bin/types/JsViewEngineWidget/MetroWidget/RenderItem.d.ts +3 -0
  14. package/bin/types/JsViewEngineWidget/MetroWidget/Slide.d.ts +21 -0
  15. package/bin/types/JsViewEngineWidget/TemplateParser/ListMetroTemplate.d.ts +1 -0
  16. package/bin/types/JsViewEngineWidget/TemplateParser/MetroTemplate.d.ts +2 -8
  17. package/bin/types/JsViewEngineWidget/TemplateParser/TemplateItemAdder.d.ts +1 -1
  18. package/bin/types/JsViewEngineWidget/WidgetCommon.d.ts +9 -3
  19. package/bin/types/JsViewEngineWidget/index.d.ts +10 -1
  20. package/bin/types/JsViewVueTools/ConstSymbol.d.ts +2 -0
  21. package/bin/types/JsViewVueTools/ForgeConstDefine.d.ts +11 -0
  22. package/bin/types/JsViewVueTools/JsvFederationTools.d.ts +16 -0
  23. package/bin/types/JsViewVueTools/JsvPerformance.d.ts +5 -0
  24. package/bin/types/JsViewVueTools/JsvPreDownloader.d.ts +33 -0
  25. package/bin/types/JsViewVueTools/JsvRuntimeBridge.d.ts +113 -57
  26. package/bin/types/JsViewVueTools/JsvTextureStore/CapturedTexture/CapturedTexture.d.ts +11 -0
  27. package/bin/types/JsViewVueTools/JsvTextureStore/JsvTextureStore.d.ts +45 -1
  28. package/bin/types/JsViewVueTools/JsvTextureStore/Texture.d.ts +8 -0
  29. package/bin/types/JsViewVueTools/index.d.ts +19 -11
  30. package/bin/types/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue.d.ts +1 -1
  31. package/bin/types/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue.d.ts +1 -1
  32. package/bin/types/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue.d.ts +1 -1
  33. package/bin/types/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue.d.ts +1 -1
  34. package/bin/types/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.d.ts +2 -1
  35. package/bin/types/JsViewVueWidget/JsvClipDiv/JsvClipDiv.vue.d.ts +70 -0
  36. package/bin/types/JsViewVueWidget/JsvClipDiv/index.d.ts +1 -0
  37. package/bin/types/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue.d.ts +1 -1
  38. package/bin/types/JsViewVueWidget/JsvDriftScope/JsvDriftScope.vue.d.ts +104 -0
  39. package/bin/types/JsViewVueWidget/JsvDriftScope/index.d.ts +1 -0
  40. package/bin/types/JsViewVueWidget/JsvFragShaderView/BrowserJsvFragShaderView.vue.d.ts +13 -0
  41. package/bin/types/JsViewVueWidget/JsvFragShaderView/JsvFragShaderView.vue.d.ts +13 -0
  42. package/bin/types/JsViewVueWidget/JsvFragShaderView/index.d.ts +2 -0
  43. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.d.ts +4 -0
  44. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActorControl.d.ts +91 -0
  45. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ActorState.d.ts +6 -0
  46. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.d.ts +11 -0
  47. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.d.ts +15 -0
  48. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue.d.ts +6 -0
  49. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetAction.d.ts +71 -0
  50. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetCondition.d.ts +97 -0
  51. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SetState.d.ts +62 -0
  52. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/SyncLinkManager.d.ts +18 -0
  53. package/bin/types/JsViewVueWidget/JsvFreeMoveActor/index.d.ts +4 -1
  54. package/bin/types/JsViewVueWidget/JsvLine/JsvLine.vue.d.ts +1 -1
  55. package/bin/types/JsViewVueWidget/JsvNativeSharedDiv.vue.d.ts +66 -28
  56. package/bin/types/JsViewVueWidget/JsvNinePatch.vue.d.ts +2 -0
  57. package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue.d.ts +236 -0
  58. package/bin/types/JsViewVueWidget/JsvScrollBox/JsvScrollFollow.vue.d.ts +153 -0
  59. package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollInnerSymbol.d.ts +4 -0
  60. package/bin/types/JsViewVueWidget/JsvScrollBox/ScrollSymbol.d.ts +12 -0
  61. package/bin/types/JsViewVueWidget/JsvScrollBox/index.d.ts +3 -0
  62. package/bin/types/JsViewVueWidget/JsvTextBox.vue.d.ts +3 -3
  63. package/bin/types/JsViewVueWidget/index.d.ts +4 -0
  64. package/package.json +1 -1
  65. package/tools/config/rollup.config.mjs +1 -0
  66. package/utils/JsViewEngineWidget/JsvFocus/{JsvFocusManager.js → JsvFocusManager.ts} +12 -12
  67. package/utils/JsViewEngineWidget/MetroWidget/Dispatcher.ts +20 -0
  68. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +27 -10
  69. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +52 -11
  70. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +686 -480
  71. package/utils/JsViewEngineWidget/MetroWidget/RenderItem.ts +13 -1
  72. package/utils/JsViewEngineWidget/MetroWidget/Slide.ts +56 -0
  73. package/utils/JsViewEngineWidget/MetroWidget/TaskManager.ts +59 -10
  74. package/utils/JsViewEngineWidget/MetroWidget/TokenGenerator.ts +10 -0
  75. package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +20 -10
  76. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +27 -3
  77. package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +25 -35
  78. package/utils/JsViewEngineWidget/TemplateParser/TemplateItemAdder.ts +7 -0
  79. package/utils/JsViewEngineWidget/WidgetCommon.ts +20 -7
  80. package/utils/JsViewEngineWidget/{index.js → index.ts} +1 -1
  81. package/utils/JsViewPlugin/JsvAudio/AudioProxy.js +21 -2
  82. package/utils/JsViewPlugin/JsvPlayer/BrowserJsvPlayer.vue +13 -1
  83. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +470 -338
  84. package/utils/JsViewVueTools/ConstSymbol.ts +3 -0
  85. package/utils/JsViewVueTools/ForgeConstDefine.ts +11 -0
  86. package/utils/JsViewVueTools/JsvPreDownloader.ts +3 -3
  87. package/utils/JsViewVueTools/JsvRuntimeBridge.js +172 -50
  88. package/utils/JsViewVueTools/JsvTextureStore/CapturedTexture/CapturedTexture.ts +62 -0
  89. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +42 -8
  90. package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +15 -1
  91. package/utils/JsViewVueTools/index.js +19 -17
  92. package/utils/JsViewVueWidget/JsvApic/JsvApic/BrowserApic.vue +8 -8
  93. package/utils/JsViewVueWidget/JsvApic/JsvApic/JsvApic.vue +3 -3
  94. package/utils/JsViewVueWidget/JsvApic/JsvApic2/BrowserApic2.vue +7 -8
  95. package/utils/JsViewVueWidget/JsvApic/JsvApic2/JsvApic2.vue +3 -3
  96. package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/ApicDataBase.js +5 -1
  97. package/utils/JsViewVueWidget/JsvApic/JsvBrowserApicLib/Viewer.js +8 -3
  98. package/utils/JsViewVueWidget/JsvClipDiv/JsvClipDiv.vue +42 -0
  99. package/utils/JsViewVueWidget/JsvClipDiv/index.ts +1 -0
  100. package/utils/JsViewVueWidget/JsvConnectLine/JsvConnectLine.vue +5 -1
  101. package/utils/JsViewVueWidget/JsvDriftScope/JsvDriftScope.vue +82 -0
  102. package/utils/JsViewVueWidget/JsvDriftScope/index.ts +1 -0
  103. package/utils/JsViewVueWidget/JsvFragShaderView/BrowserJsvFragShaderView.vue +48 -0
  104. package/utils/JsViewVueWidget/JsvFragShaderView/JsvFragShaderView.vue +145 -0
  105. package/utils/JsViewVueWidget/JsvFragShaderView/index.js +18 -0
  106. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +1 -1
  107. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +156 -55
  108. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +4 -4
  109. package/utils/JsViewVueWidget/JsvFreeMoveActor/CallbackManager.ts +6 -6
  110. package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +1 -1
  111. package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +43 -9
  112. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +33 -0
  113. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +69 -8
  114. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +60 -0
  115. package/utils/JsViewVueWidget/JsvFreeMoveActor/SyncLinkManager.ts +120 -0
  116. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +7 -0
  117. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +6 -1
  118. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +121 -68
  119. package/utils/JsViewVueWidget/JsvNinePatch.vue +17 -2
  120. package/utils/JsViewVueWidget/JsvPosterImage.vue +22 -9
  121. package/utils/JsViewVueWidget/JsvQrcode/BrowserQrcode.vue +6 -2
  122. package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollBox.vue +518 -0
  123. package/utils/JsViewVueWidget/JsvScrollBox/JsvScrollFollow.vue +468 -0
  124. package/utils/JsViewVueWidget/JsvScrollBox/ScrollInnerSymbol.ts +9 -0
  125. package/utils/JsViewVueWidget/JsvScrollBox/ScrollSymbol.ts +24 -0
  126. package/utils/JsViewVueWidget/JsvScrollBox/index.ts +3 -0
  127. package/utils/JsViewVueWidget/JsvTextBox.vue +12 -4
  128. package/utils/JsViewVueWidget/JsvTextureAnim/BrowserTextureAnim.vue +9 -6
  129. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +2 -0
  130. package/utils/JsViewVueWidget/index.js +4 -0
  131. package/utils/JsViewEngineWidget/MetroWidget/Dispatcher.js +0 -19
@@ -0,0 +1,120 @@
1
+
2
+ import { NexusNode } from "./NexusNode";
3
+
4
+ interface PendingPromise {
5
+ promiseRef: Promise<void> | null;
6
+ promiseResolve: Function | null;
7
+ linkName: String;
8
+ }
9
+
10
+ class SyncLinkSource {
11
+ nexusNode: NexusNode;
12
+ linkName: String;
13
+
14
+ constructor(name: string, node: NexusNode) {
15
+ this.nexusNode = node;
16
+ this.linkName = name;
17
+ }
18
+ }
19
+
20
+ class SyncLinkManager {
21
+ // 等待中的未回复的link
22
+ private pendingPromiseList: Array<PendingPromise> = [];
23
+ private syncSourceMap: Map<String, SyncLinkSource> = new Map();
24
+
25
+ constructor() {
26
+
27
+ }
28
+
29
+ // 将LinkSource加入map
30
+ SourceOnMounted(syncSource: SyncLinkSource | null) {
31
+ if (syncSource != null) {
32
+ let linkName = syncSource.linkName;
33
+ if (this.syncSourceMap.has(linkName)) {
34
+ // 重名内容不要添加,规避引起引用混乱
35
+ console.error(`Error: sync link name duplicate:${linkName}`);
36
+ return;
37
+ }
38
+
39
+
40
+ this.syncSourceMap.set(linkName, syncSource);
41
+
42
+ if (this.pendingPromiseList.length != 0) {
43
+ // 找出pending内容,进行回调
44
+ for (let index = this.pendingPromiseList.length - 1; index >= 0; index--) {
45
+ let promiseItem = this.pendingPromiseList[index];
46
+ if (promiseItem.linkName == linkName) {
47
+ promiseItem.promiseResolve?.();
48
+ this.pendingPromiseList.splice(index, 1);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ // 将LinkSource移出map
56
+ SourceOnUnmounted(linkName: String) {
57
+ if (this.syncSourceMap.has(linkName)) {
58
+ this.syncSourceMap.delete(linkName);
59
+ } else {
60
+ console.error(`ERROR: unmount linkname(${linkName}) not found`)
61
+ }
62
+ }
63
+
64
+ // 加入wait处理在.then中再进行 GetSyncSource, 以保证节点完成了mounted
65
+ WaitSourceMounted(name: String): Promise<void> {
66
+ let newPromiseItem: PendingPromise = {
67
+ promiseRef: null,
68
+ promiseResolve: null,
69
+ linkName: name
70
+ }
71
+ newPromiseItem.promiseRef = new Promise((resolve) => {
72
+ newPromiseItem.promiseResolve = resolve;
73
+ if (this.syncSourceMap.has(name)) {
74
+ // 若已经有了则直接resolve
75
+ resolve();
76
+ } else {
77
+ // 加入到pending队列中
78
+ this.pendingPromiseList.push(newPromiseItem);
79
+ }
80
+ });
81
+
82
+ return newPromiseItem.promiseRef;
83
+ }
84
+
85
+ // 取消 WaitSourceMounted 发起的Promise, 用在unmounted中, 规避内存泄漏
86
+ UnListen(waitPromise: Promise<void>) {
87
+ if (this.pendingPromiseList.length != 0) {
88
+ for (let index = this.pendingPromiseList.length; index >= 0; index--) {
89
+ let promiseItem = this.pendingPromiseList[index];
90
+ if (promiseItem.promiseRef == waitPromise) {
91
+ this.pendingPromiseList.splice(index, 1);
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ GetSourceNexusNode(linkName: String): NexusNode | null {
99
+ let sourceItem = this.syncSourceMap.get(linkName);
100
+ if (sourceItem) {
101
+ return sourceItem.nexusNode;
102
+ } else {
103
+ return null;
104
+ }
105
+ }
106
+ }
107
+
108
+ let sSyncLinkManager: SyncLinkManager | null = null;
109
+
110
+ function GetSyncLinkManager(): SyncLinkManager {
111
+ if (sSyncLinkManager == null) {
112
+ sSyncLinkManager = new SyncLinkManager();
113
+ }
114
+ return sSyncLinkManager;
115
+ }
116
+
117
+ export {
118
+ GetSyncLinkManager,
119
+ SyncLinkSource
120
+ }
@@ -3,6 +3,9 @@ import { ActEventDefine } from "./ForgeTypeDefine.ts"
3
3
  import { default as KeepFlags } from "./KeepFlags.ts"
4
4
  import JsvEnvBlocker from "./JsvEnvBlocker.vue"
5
5
  import { newNexus } from "./NexusNode"
6
+ import { default as ActControlDebug } from "./ActorControl.ts"
7
+ import { GetSyncLinkManager, SyncLinkSource } from "./SyncLinkManager.ts"
8
+
6
9
 
7
10
  let FreeMoveDef = {
8
11
  ActEventDefine,
@@ -11,10 +14,14 @@ let FreeMoveDef = {
11
14
 
12
15
  let FreeMoveFunc = {
13
16
  newNexus,
17
+ ActControlDebug,
18
+ GetSyncLinkManager,
19
+ SyncLinkSource
14
20
  }
15
21
 
16
22
  export {
17
23
  JsvFreeMoveActor,
24
+ JsvFreeMoveActor as JsvFreeMoveDiv,
18
25
  JsvEnvBlocker,
19
26
  FreeMoveDef,
20
27
  FreeMoveFunc
@@ -14,6 +14,11 @@
14
14
  <script>
15
15
  import { Forge, ForgeExtension } from "@shijiu/jsview/dom/jsv-forge-define";
16
16
  import ForgeHandles from "../JsViewVueTools/ForgeHandles";
17
+
18
+ const renderDocument = window.JsvCode.Dom.RenderDocument
19
+ ? window.JsvCode.Dom.RenderDocument
20
+ : window.JsvCode.Dom.BrowserDocument;
21
+
17
22
  export default {
18
23
  props: {
19
24
  class: {
@@ -112,7 +117,7 @@ export default {
112
117
  this.$refs.innerViewDiv
113
118
  ?.jsvGetProxyView(true)
114
119
  .RegisterOnProxyReady(() => {
115
- const canvas = window.originDocument.createElement("canvas");
120
+ const canvas = renderDocument.createElement("canvas");
116
121
  canvas.style.width = _this.style.width + "px";
117
122
  canvas.style.height = _this.style.height + "px";
118
123
  _this.$refs.innerViewDiv
@@ -5,84 +5,109 @@
5
5
  * getId {function} 回调函数,用于接收ID信息,ID信息用于Native端对该view进行跟踪的标识
6
6
  * setId {String} 给定命名ID,避免同进程不同context重名要和Context相关,
7
7
  * 例如`${window.JsView?.getJsContextId()}_${you_name}`
8
+ * corner {Number} 圆角的尺寸,默认为0
9
+ *
8
10
  -->
9
11
 
10
- <script>
12
+ <script setup>
11
13
  import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
12
14
  import ForgeHandles from "../JsViewVueTools/ForgeHandles";
15
+ import { JsvTextureStoreApi } from "../JsViewVueTools/JsvTextureStore/JsvTextureStore";
16
+ import { onUnmounted, shallowRef } from "vue";
17
+ import JsvNinePatch from "./JsvNinePatch.vue";
13
18
 
14
- export default {
15
- props: {
16
- style: {
17
- type: Object,
18
- default: () => {
19
- return {};
20
- },
21
- },
22
- getId: Function,
23
- setId: String,
24
- seeThrough: {
25
- type: Boolean,
26
- default: true,
19
+ const props = defineProps({
20
+ style: {
21
+ type: Object,
22
+ default: () => {
23
+ return {};
27
24
  },
28
25
  },
29
- setup() {
30
- return {
31
- isBrowserDebug: window.jsvIsBrowserDebug,
32
- jsvMainView: undefined,
33
- innerViewId: undefined,
34
- };
26
+ getId: Function,
27
+ setId: String,
28
+ corner: {
29
+ type: Number,
30
+ default: 0,
35
31
  },
36
- beforeMount() {
37
- if (this.isBrowserDebug) {
38
- return;
39
- }
32
+ });
40
33
 
41
- // 初始化View
42
-
43
- // 创建JsView图层穿透的texture,抠洞处理
44
- // 默认为扣洞,有的场景不需要扣洞
45
- let textureSetting = null;
46
- if (this.seeThrough) {
47
- const seeThroughTexture =
48
- ForgeHandles.TextureManager.GetColorTexture("rgba(0,0,0,0)");
49
- textureSetting = new Forge.TextureSetting(
50
- seeThroughTexture,
51
- null,
52
- null,
53
- false
54
- );
55
- }
34
+ let isBrowserDebug = window.jsvIsBrowserDebug;
35
+ let jsvMainView = undefined;
36
+ let innerViewId = -1;
37
+ let ninePatchSet = null;
38
+
39
+ if (!isBrowserDebug) {
40
+ // 创建JsView图层穿透的texture,抠洞处理
56
41
 
57
- // 通过内置函数构造定制的NativeSharedView
58
- this.jsvMainView = new Forge.NativeSharedView(textureSetting);
59
- this.innerViewId = Forge.sViewStore.add(
60
- new Forge.ViewInfo(this.jsvMainView)
42
+ // 有圆角
43
+ if (props.corner > 0) {
44
+ let presetGap = 1; // 外延距离,以保证圆角光滑
45
+ ninePatchSet = {
46
+ imageSize: (props.corner + presetGap) * 2, // 半径 + 中心点1像素
47
+ textureName: null,
48
+ };
49
+
50
+ // 用 JsvTextureStoreApi 绘制半径对等的圆形
51
+ let sampleImageWidth = ninePatchSet.imageSize;
52
+ let innerRadius2 = sampleImageWidth; // 内直径
53
+ let circleLineWidth = 1.5 * props.corner + presetGap - props.corner; // 线粗要把四角盖上
54
+ let canvasRef;
55
+
56
+ // 创建画布
57
+ canvasRef = JsvTextureStoreApi.canvasTexture(
58
+ sampleImageWidth,
59
+ sampleImageWidth
61
60
  );
62
61
 
63
- // 更新宽高
64
- if (typeof this.jsvMainView != "undefined" && this.jsvMainView) {
65
- if (this.setId) {
66
- // 使用设置进来的track id,而非自动生成
67
- this.jsvMainView.SetTrackId(this.setId);
68
- }
62
+ let circleRadius =
63
+ Math.floor(innerRadius2 / 2) +
64
+ Math.floor(circleLineWidth / 2) -
65
+ presetGap; // 圆环绘制路径是粗线的中心线,所以要减去一半的线宽
66
+ let customPath = canvasRef.circlePath(
67
+ Math.floor(sampleImageWidth / 2),
68
+ Math.floor(sampleImageWidth / 2),
69
+ circleRadius
70
+ ); // 创建圆环绘制路径,圆形在画布的中心点位置
71
+ canvasRef.drawColor("rgba(0,0,0,0)"); // 画布绘制透明底色
72
+ customPath.stroke(circleLineWidth, "#FF0000FF"); // 绘制alpha=1的边缘留色
69
73
 
70
- this.getId?.(this.jsvMainView.GetTrackId());
71
- }
72
- },
73
- beforeUnmount() {
74
- if (this.isBrowserDebug) {
75
- return;
76
- }
74
+ // 获取填入url的内容
75
+ // 进行.9拉伸以适配目标尺寸
76
+ // 通过 alphaOverride 进行alpah叠加
77
+ ninePatchSet.textureName = canvasRef.commit();
78
+ }
79
+
80
+ // 通过内置函数构造定制的NativeSharedView
81
+ jsvMainView = new Forge.NativeSharedView();
82
+ innerViewId = Forge.sViewStore.add(new Forge.ViewInfo(jsvMainView));
77
83
 
78
- // 清理View管理缓存
79
- if (this.innerViewId !== -1) {
80
- Forge.sViewStore.remove(this.innerViewId);
81
- this.innerViewId = -1;
82
- this.jsvMainView = null;
84
+ // 更新宽高
85
+ if (typeof jsvMainView != "undefined" && jsvMainView) {
86
+ if (props.setId) {
87
+ // 使用设置进来的track id,而非自动生成
88
+ jsvMainView.SetTrackId(props.setId);
83
89
  }
84
- },
85
- };
90
+
91
+ props.getId?.(jsvMainView.GetTrackId());
92
+ }
93
+ }
94
+
95
+ onUnmounted(() => {
96
+ if (isBrowserDebug) {
97
+ return;
98
+ }
99
+
100
+ // 清理View管理缓存
101
+ if (innerViewId !== -1) {
102
+ Forge.sViewStore.remove(innerViewId);
103
+ innerViewId = -1;
104
+ jsvMainView = null;
105
+ }
106
+
107
+ if (ninePatchSet != null) {
108
+ JsvTextureStoreApi.deleteTexture(ninePatchSet.textureName); // 释放texture资源
109
+ }
110
+ });
86
111
  </script>
87
112
 
88
113
  <template>
@@ -91,14 +116,42 @@ export default {
91
116
  :style="{
92
117
  left: style.left,
93
118
  top: style.top,
94
- width: style.width,
95
- height: style.height,
96
119
  }"
97
- :data-jsv-vw-innerview="innerViewId"
98
120
  >
99
- <slot />
121
+ <jsv-nine-patch
122
+ v-if="ninePatchSet != null"
123
+ :style="{
124
+ width: style.width,
125
+ height: style.height,
126
+ }"
127
+ :imageUrl="`jsvtexturestore://${ninePatchSet.textureName}`"
128
+ :imageWidth="ninePatchSet.imageSize"
129
+ :centerWidth="1"
130
+ :borderOutset="0"
131
+ :waitForInit="false"
132
+ imageBlendType="alphaOverride"
133
+ />
134
+ <div
135
+ v-else
136
+ :style="{
137
+ width: style.width,
138
+ height: style.height,
139
+ backgroundColor: 'rgba(0,0,0,0)',
140
+ JsvImageBlendType: 'alphaOverride',
141
+ }"
142
+ />
143
+ <div
144
+ :style="{
145
+ width: style.width,
146
+ height: style.height,
147
+ }"
148
+ :data-jsv-vw-innerview="innerViewId"
149
+ >
150
+ <slot />
151
+ </div>
100
152
  </div>
153
+
101
154
  <div v-else :style="{ ...style }">
102
155
  <slot />
103
156
  </div>
104
- </template>
157
+ </template>
@@ -1,6 +1,8 @@
1
1
  <!--
2
2
  * 【模块 export 内容】
3
3
  * JsvNinePatch:Vue高阶组件,.9图展示控件,该控件的原图要求为正方形,延展后可为长方形
4
+ * centerWidth和borderOutset传值比较抽象,若 imageDspWidth 和图片素材的原图尺寸一直,
5
+ * 则可以参考 samples/NinePatchTester 的样例图示
4
6
  * props说明:
5
7
  * style {Object} 同div的Style,通过width/height来控制.9图片延展后的显示尺寸,另外通过top/left控制坐标
6
8
  * imageUrl {String} (必填)显示图片的加载地址
@@ -15,10 +17,11 @@
15
17
  * animTime {int} (必填)缩放动画的时长(单位秒)
16
18
  * waitForInit {boolean} (选填)尺寸为0时是否进行描画(例如: 首次显示不展示动画的场合,设置为true),默认值为true
17
19
  * onTransitionEnd { Function } (选填)transition动画结束的回调
20
+ * imageBlendType {String} (选填) alpha合并模式,默认为普通合成,可设置"alphaOverride", 用于Video挖洞操作
18
21
  -->
19
22
 
20
23
  <script setup>
21
- import { ref, watchEffect, computed } from "vue";
24
+ import { ref, watchEffect, computed, shallowRef, onMounted } from "vue";
22
25
 
23
26
  const props = defineProps({
24
27
  style: {
@@ -39,7 +42,11 @@ const props = defineProps({
39
42
  borderOutset: { type: Number, required: true },
40
43
  animTime: { type: Number, default: 0 },
41
44
  onTransitionEnd: { type: Function },
42
- animation: { type: String }
45
+ animation: { type: String },
46
+ imageBlendType: { type: String, default: null },
47
+
48
+ // 获取实际div的句柄
49
+ onDivRef: { type: Function, default: null },
43
50
  });
44
51
 
45
52
  const isReady = () => {
@@ -90,10 +97,17 @@ watchEffect(() => {
90
97
  );
91
98
  }
92
99
  });
100
+
101
+ // 向外提出div的引用,因为v-if缘故,不能在mounted时输出
102
+ // 特别注意: 析构时, onDivRef会输出 null
103
+ function innerOnDivRef(ref) {
104
+ props.onDivRef?.(ref);
105
+ }
93
106
  </script>
94
107
 
95
108
  <template>
96
109
  <div
110
+ :ref="innerOnDivRef"
97
111
  v-if="isReady()"
98
112
  :style="{
99
113
  ...style,
@@ -102,6 +116,7 @@ watchEffect(() => {
102
116
  borderImage: `url(${imageUrl}) ${sliceWidth} fill`,
103
117
  borderImageWidth: `${borderDspWidth}px`,
104
118
  borderImageOutset: `${convertedBorderOutset}px`,
119
+ JsvImageBlendType: props.imageBlendType,
105
120
  }"
106
121
  @transitionend="props.onTransitionEnd"
107
122
  />
@@ -2,9 +2,12 @@
2
2
  * 【模块 export 内容】
3
3
  * JsvPosterImage:Vue高阶组件,海报描画,可设置color space 和 texture size
4
4
  * props说明:
5
- * colorSpace {String} 颜色空间,默认RGBA_8888
6
5
  * style {Object} 包含left/top/width/height/border-radius的style设置
6
+ * colorSpace {String} 颜色空间,调整其他颜色空间可以节省内存,默认RGBA_8888
7
7
  * imageCompress {boolean} 是否压缩图片, 默认打开
8
+ * src {string} 图片的加载地址
9
+ * fadeIn: {boolean} 图片加载完成是否有淡入效果,默认为打开
10
+ * isPosterImage: 标识是否用于海报位,对于海报位的内容,可以有下载线程控制等策略来优化整体体验
8
11
  -->
9
12
 
10
13
  <script setup>
@@ -14,25 +17,25 @@ import { JsvPerformance } from "../JsViewVueTools/JsvPerformance.ts";
14
17
  const props = defineProps({
15
18
  colorSpace: {
16
19
  type: String,
17
- default: "RGBA_8888"
20
+ default: "RGBA_8888",
18
21
  },
19
22
  imageCompress: {
20
23
  type: Boolean,
21
- default: true
24
+ default: true,
22
25
  },
23
26
  isPosterImage: {
24
27
  type: Boolean,
25
- default: true
28
+ default: true,
26
29
  },
27
30
  fadeIn: {
28
31
  type: Boolean,
29
- default: true
32
+ default: true,
30
33
  },
31
34
  src: {
32
35
  type: String,
33
- default: null
36
+ default: null,
34
37
  },
35
- style: Object
38
+ style: Object,
36
39
  });
37
40
 
38
41
  const scaleddown = computed(() => {
@@ -40,7 +43,9 @@ const scaleddown = computed(() => {
40
43
  });
41
44
 
42
45
  const isPosterImage = computed(() => {
43
- return JsvPerformance.getPosterSingleThreadDecode() || props.isPosterImage ? "true" : "false";
46
+ return JsvPerformance.getPosterSingleThreadDecode() || props.isPosterImage
47
+ ? "true"
48
+ : "false";
44
49
  });
45
50
 
46
51
  let common_style = reactive({});
@@ -50,7 +55,15 @@ let show_background_holder = !!window.JsView; // PC浏览器模拟时, 不显示
50
55
  watchEffect(() => {
51
56
  if (props.style) {
52
57
  // 提取left, top, width, height, 并去掉干扰项 backgroundImage backgroundColor(会引起同位置重复图片绘制)
53
- let { left, top, width, height, backgroundImage, backgroundColor, ...others } = props.style;
58
+ let {
59
+ left,
60
+ top,
61
+ width,
62
+ height,
63
+ backgroundImage,
64
+ backgroundColor,
65
+ ...others
66
+ } = props.style;
54
67
 
55
68
  // 承接x,y偏移和动画设置, 规避默认淡出动画被影响
56
69
  common_style.left = left;
@@ -2,6 +2,10 @@
2
2
  import { onMounted, ref } from "vue";
3
3
  import QRCode from "qr.js";
4
4
 
5
+ const renderDocument = window.JsvCode.Dom.RenderDocument
6
+ ? window.JsvCode.Dom.RenderDocument
7
+ : window.JsvCode.Dom.BrowserDocument;
8
+
5
9
  const props = defineProps({
6
10
  value: String,
7
11
  size: Number,
@@ -147,7 +151,7 @@ const qrcodeRes = renderQrcode();
147
151
  onMounted(() => {
148
152
  svgRoot.value.jsvGetProxyView().RegisterOnProxyReady(() => {
149
153
  const root = svgRoot.value.jsvGetProxyView().HtmlGetElement();
150
- const doc = window.originDocument;
154
+ const doc = renderDocument;
151
155
  const svg = doc.createElementNS("http://www.w3.org/2000/svg", "svg");
152
156
  svg.setAttribute("type", "qrcode");
153
157
  svg.setAttribute("shapeRendering", "crispEdges");
@@ -182,4 +186,4 @@ onMounted(() => {
182
186
  <div ref="svgRoot" :style="{ width: 100, height: 100 }"></div>
183
187
  <div :style="imageStyle"></div>
184
188
  </div>
185
- </template>
189
+ </template>