@shijiu/jsview-vue 2.1.25 → 2.1.200

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 (80) hide show
  1. package/package.json +1 -1
  2. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +1 -1
  3. package/utils/JsViewEngineWidget/JsvFocusHub.ts +123 -0
  4. package/utils/JsViewEngineWidget/JsvFocusManager.js +4 -3
  5. package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +145 -51
  6. package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +51 -64
  7. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +62 -71
  8. package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +308 -613
  9. package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +127 -247
  10. package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -0
  11. package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +36 -2
  12. package/utils/JsViewEngineWidget/WidgetCommon.ts +25 -6
  13. package/utils/JsViewPlugin/JsvAudio/{JsvAudioBrowser.vue → BrowserAudio/BrowserAudio.vue} +1 -1
  14. package/utils/JsViewPlugin/JsvAudio/index.js +1 -1
  15. package/utils/JsViewPlugin/JsvLatex/BrowserDomBuilder.js +37 -0
  16. package/utils/JsViewPlugin/JsvLatex/Color.ts +43 -0
  17. package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +159 -0
  18. package/utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js +16 -0
  19. package/utils/JsViewPlugin/JsvLatex/JsvLatexBrowser.vue +59 -0
  20. package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +171 -0
  21. package/utils/JsViewPlugin/JsvLatex/index.js +28 -0
  22. package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +1 -0
  23. package/utils/JsViewPlugin/JsvLatex/version.js +24 -0
  24. package/utils/JsViewPlugin/JsvLatex/version.mjs +24 -0
  25. package/utils/JsViewPlugin/index.js +2 -1
  26. package/utils/JsViewVueTools/JsvDynamicCssStyle.js +2 -52
  27. package/utils/JsViewVueTools/JsvPerformance.ts +11 -0
  28. package/utils/JsViewVueTools/JsvPreDownloader.ts +55 -11
  29. package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +40 -0
  30. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +143 -0
  31. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +24 -0
  32. package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts +198 -0
  33. package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +31 -0
  34. package/utils/JsViewVueTools/JsvTextureStore/Store.ts +32 -0
  35. package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +38 -0
  36. package/utils/JsViewVueTools/index.js +3 -0
  37. package/utils/JsViewVueWidget/JsvEnableRenderBreak.vue +17 -0
  38. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +6 -0
  39. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +144 -0
  40. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +6 -0
  41. package/utils/JsViewVueWidget/JsvFreeMoveActor/{CallbackManager.js → CallbackManager.ts} +19 -10
  42. package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +45 -0
  43. package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +1 -1
  44. package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +124 -0
  45. package/utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts +6 -0
  46. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +553 -0
  47. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +138 -0
  48. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +53 -0
  49. package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +11 -1
  50. package/utils/JsViewVueWidget/JsvHole.js +1 -1
  51. package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +101 -0
  52. package/utils/JsViewVueWidget/JsvLine/LineManager.js +62 -0
  53. package/utils/JsViewVueWidget/JsvLine/index.js +3 -0
  54. package/utils/JsViewVueWidget/JsvMarquee.vue +316 -139
  55. package/utils/JsViewVueWidget/JsvMindMap/CommonType.ts +1 -0
  56. package/utils/JsViewVueWidget/JsvMindMap/Constant.ts +20 -0
  57. package/utils/JsViewVueWidget/JsvMindMap/DataTree.ts +394 -0
  58. package/utils/JsViewVueWidget/JsvMindMap/Geometry.ts +277 -0
  59. package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +653 -0
  60. package/utils/JsViewVueWidget/JsvMindMap/index.js +1 -0
  61. package/utils/JsViewVueWidget/JsvMindMap/rtree.js +628 -0
  62. package/utils/JsViewVueWidget/JsvNinePatch.vue +2 -2
  63. package/utils/JsViewVueWidget/JsvPieChart.vue +124 -0
  64. package/utils/JsViewVueWidget/JsvPosterImage.vue +32 -9
  65. package/utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue +135 -133
  66. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +273 -270
  67. package/utils/JsViewVueWidget/JsvSector.vue +107 -0
  68. package/utils/JsViewVueWidget/JsvTextBox.vue +14 -1
  69. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +28 -2
  70. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +122 -93
  71. package/utils/JsViewVueWidget/index.js +15 -7
  72. package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.js +0 -112
  73. package/utils/JsViewVueWidget/JsvFreeMoveActor/CommonTools.js +0 -18
  74. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.js +0 -216
  75. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.js +0 -66
  76. package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.js +0 -38
  77. package/utils/JsViewVueWidget/JsvFreeMoveActor/TypeDefine.js +0 -12
  78. package/utils/JsViewVueWidget/JsvTouchContainer.vue +0 -183
  79. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +0 -87
  80. /package/utils/{JsViewVueWidget → JsViewPlugin/JsvAudio/BrowserAudio}/JsvSystemAudio.vue +0 -0
@@ -34,17 +34,14 @@
34
34
  * net_setting {object}: (未实现)网络加载参数,cookie, refer等,默认值 null
35
35
  -->
36
36
  <script>
37
- import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
38
- import ForgeHandles from "../../JsViewVueTools/ForgeHandles";
39
- import { watch, ref } from "vue";
40
-
41
37
  const CONST_FORMAT_TOKEN = "_JsvP_";
42
38
  const buildPreloadInfo = (
43
39
  url,
44
40
  width = 0,
45
41
  height = 0,
46
42
  color_type = "RGBA_8888",
47
- net_setting = null
43
+ net_setting = null,
44
+ is_poster_img
48
45
  ) => {
49
46
  return {
50
47
  url,
@@ -53,6 +50,7 @@ const buildPreloadInfo = (
53
50
  colorType: color_type,
54
51
  netSetting: net_setting,
55
52
  magicToken: CONST_FORMAT_TOKEN, // 用于格式校验
53
+ isPosterImage: is_poster_img ?? false,
56
54
  };
57
55
  };
58
56
 
@@ -66,297 +64,302 @@ const buildDownloadInfo = (url, net_setting = null, get_image_size) => {
66
64
  };
67
65
 
68
66
  export { buildPreloadInfo, buildDownloadInfo };
67
+ </script>
68
+ <script setup>
69
+ import { Forge } from "@shijiu/jsview/dom/jsv-forge-define";
70
+ import ForgeHandles from "../../JsViewVueTools/ForgeHandles";
71
+ import { reactive, onBeforeUnmount, watchEffect } from "vue";
69
72
 
70
- export default {
71
- props: {
72
- preloadList: Object,
73
- downloadList: Object,
74
- onPreloading: Function,
75
- onPreloadDone: Function,
76
- onDownloadDone: Function,
77
- },
78
- setup() {
79
- return {
80
- preloadViewList: [],
81
- downloadViewList: [],
82
- preloadStateList: [],
83
- downloadStateList: [],
84
- downloadResultMap: {},
85
- preloadResultMap: {},
86
- CONST_FORMAT_TOKEN: "_JsvP_",
87
- preloadIsNullNum: 0, // 纪录传入的preload为null的数量,由于vue不支持在子组件修改props值,所有在删除值为null时,需要++,这样才能保证与传入数据的length相等从而触发回调
88
- };
89
- },
90
- data() {
91
- return {
92
- preloadToken: 1,
93
- downloadToken: 1,
94
- };
95
- },
96
- methods: {
97
- _releasePreloadView() {
98
- if (window.JsView) {
99
- if (this.preloadViewList.length > 0) {
100
- for (const view_info of this.preloadViewList) {
101
- if (view_info) {
102
- // 当预加载url为null时view_info为null
103
- const id = view_info.viewId;
104
- view_info.textureRef?.DisableBackgroundLoad();
105
- view_info.textureRef?.UnregisterLoadImageCallback(
106
- view_info.callToken
107
- );
108
- Forge.sViewStore.remove(id);
109
- }
110
- }
111
- }
112
- this.preloadViewList = [];
113
- this.preloadStateList = [];
114
- }
115
- },
116
- _releaseDownloadView() {
117
- if (window.JsView) {
118
- if (this.downloadViewList.length > 0) {
119
- for (const view_info of this.downloadViewList) {
120
- if (view_info) {
121
- // 当预加载url为null时view_info为null
122
- const id = view_info.viewId;
123
- view_info.textureRef?.DisableBackgroundLoad();
124
- view_info.textureRef?.UnregisterLoadImageCallback(
125
- view_info.callToken
126
- );
127
- Forge.sViewStore.remove(id);
128
- }
129
- }
130
- }
131
- }
132
- this.downloadViewList = [];
133
- this.downloadStateList = [];
134
- },
135
- _releaseForgeView() {
136
- this._releasePreloadView();
137
- this._releaseDownloadView();
138
- },
73
+ const CONST_FORMAT_TOKEN = "_JsvP_";
139
74
 
140
- _checkPreload() {
141
- let loadedNum = 0;
142
- this.preloadStateList.forEach((state) => {
143
- loadedNum = state ? ++loadedNum : loadedNum;
144
- });
145
- if (this.onPreloading) {
146
- this.onPreloading(loadedNum / this.preloadStateList.length);
147
- }
148
- if (
149
- this.onPreloadDone &&
150
- loadedNum === this.preloadStateList.length - this.preloadIsNullNum
151
- ) {
152
- this.onPreloadDone(this.preloadResultMap);
153
- }
154
- },
75
+ const props = defineProps({
76
+ preloadList: Object,
77
+ downloadList: Object,
78
+ onPreloading: Function,
79
+ onPreloadDone: Function,
80
+ onDownloadDone: Function,
81
+ })
82
+ const loadViewList = reactive({
83
+ preloadViewList: [],
84
+ downloadViewList: []
85
+ })
86
+ let preloadStateList = [];
87
+ let downloadStateList = [];
88
+ let downloadResultMap = {};
89
+ let preloadResultMap = {};
155
90
 
156
- _getPreloadViewIdList() {
157
- if (!this.preloadList) {
158
- return;
159
- }
160
- this.preloadStateList = new Array(this.preloadList.length).fill(false);
161
- // 直接在map前将为null的值删除掉
162
- let preloadListData = this.preloadList;
163
- for (let i = 0; i < preloadListData.length; i++) {
164
- if (!preloadListData[i]) {
165
- preloadListData.splice(i, 1);
166
- this.preloadIsNullNum++;
167
- }
168
- }
169
- this.preloadViewList = preloadListData.map((item, index) => {
170
- if (item.magicToken !== this.CONST_FORMAT_TOKEN) {
171
- console.error(
172
- "Error:format mismatch, data should comes from function buildPreloadInfo()"
173
- );
174
- }
175
- const base_url = item.url;
176
- let image_url = base_url;
177
- if (base_url && base_url.indexOf("http") < 0) {
178
- // 包含http和https两种请求
179
- if (window.JsView.Dom.UrlRef) {
180
- image_url = new window.JsView.Dom.UrlRef(base_url).href;
181
- }
182
- }
183
- let target_size = null;
184
- if (item.width !== 0 && item.height !== 0) {
185
- target_size = { width: item.width, height: item.height };
186
- }
187
- let texture = null;
188
- if (
189
- image_url &&
190
- (image_url.toLowerCase().indexOf(".webp") >= 0 ||
191
- image_url.toLowerCase().indexOf(".gif") >= 0)
192
- ) {
193
- texture = ForgeHandles.TextureManager.GetGifImage(image_url, false);
194
- } else {
195
- texture = ForgeHandles.TextureManager.GetImage2(
196
- image_url,
197
- false,
198
- target_size,
199
- item.colorType
91
+ // 记录传入的preload为null的数量,由于vue不支持在子组件修改props值,所有在删除值为null时,需要++,这样才能保证与传入数据的length相等从而触发回调
92
+ let preloadIsNullNum = 0;
93
+ let downloadIsNullNum = 0;
94
+
95
+ let preloadToken = 1;
96
+ let downloadToken = 1;
97
+
98
+ const _releasePreloadView = () => {
99
+ if (window.JsView) {
100
+ if (loadViewList.preloadViewList.length > 0) {
101
+ for (const view_info of loadViewList.preloadViewList) {
102
+ if (view_info) {
103
+ // 当预加载url为null时view_info为null
104
+ const id = view_info.viewId;
105
+ view_info.textureRef?.DisableBackgroundLoad();
106
+ view_info.textureRef?.UnregisterLoadImageCallback(
107
+ view_info.callToken
200
108
  );
109
+ Forge.sViewStore.remove(id);
201
110
  }
202
- if (!texture) {
203
- console.error(
204
- "Error: Preload view build texture failed for " + image_url
111
+ }
112
+ }
113
+ loadViewList.preloadViewList = [];
114
+ preloadStateList = [];
115
+ }
116
+ }
117
+ const _releaseDownloadView = () => {
118
+ if (window.JsView) {
119
+ if (loadViewList.downloadViewList.length > 0) {
120
+ for (const view_info of loadViewList.downloadViewList) {
121
+ if (view_info) {
122
+ // 当预加载url为null时view_info为null
123
+ const id = view_info.viewId;
124
+ view_info.textureRef?.DisableBackgroundLoad();
125
+ view_info.textureRef?.UnregisterLoadImageCallback(
126
+ view_info.callToken
205
127
  );
206
- this.preloadStateList[index] = true; // 无法创建texture的图片先认为加载完成
207
- return;
128
+ Forge.sViewStore.remove(id);
208
129
  }
209
- const callback_token = texture.RegisterLoadImageCallback(
210
- null,
211
- (params) => {
212
- console.log(`preload succeed ${image_url}`, params);
213
- this.preloadStateList[index] = true;
214
- this.preloadResultMap[item.url] = {
215
- width: params.width,
216
- height: params.height,
217
- };
218
- console.log(`preload succeed ${item.url}, params:${params}`);
219
- this._checkPreload();
220
- }
221
- );
222
- texture.EnableBackgroundLoad();
223
- const texture_setting = new Forge.ExternalTextureSetting(texture);
224
- const preload_view = new Forge.PreloadView(texture_setting);
225
- return {
226
- viewId: Forge.sViewStore.add(new Forge.ViewInfo(preload_view)),
227
- textureRef: texture,
228
- callToken: callback_token,
229
- };
230
- });
231
- },
232
-
233
- _checkDownload() {
234
- for (const state of this.downloadStateList) {
235
- if (!state) return;
236
- }
237
- if (this.$props.onDownloadDone) {
238
- this.$props.onDownloadDone(
239
- this.downloadStateList,
240
- this.downloadResultMap
241
- );
242
130
  }
243
- },
131
+ }
132
+ }
133
+ loadViewList.downloadViewList = [];
134
+ downloadStateList = [];
135
+ }
136
+ const _releaseForgeView = () => {
137
+ _releasePreloadView();
138
+ _releaseDownloadView();
139
+ }
244
140
 
245
- _getDownloadViewIdList() {
246
- if (!this.downloadList) {
247
- return;
141
+ const _checkPreload = () => {
142
+ let loadedNum = 0;
143
+ preloadStateList.forEach((state) => {
144
+ loadedNum = state ? ++loadedNum : loadedNum;
145
+ });
146
+ if (props.onPreloading) {
147
+ props.onPreloading(loadedNum / preloadStateList.length);
148
+ }
149
+ if (
150
+ props.onPreloadDone &&
151
+ loadedNum === preloadStateList.length - preloadIsNullNum
152
+ ) {
153
+ props.onPreloadDone(preloadResultMap);
154
+ }
155
+ }
156
+
157
+ const _getPreloadViewIdList = () => {
158
+ if (!props.preloadList) {
159
+ return;
160
+ }
161
+ preloadStateList = new Array(props.preloadList.length).fill(false);
162
+ // 直接在map前将为null的值删除掉
163
+ let preloadListData = props.preloadList;
164
+ for (let i = 0; i < preloadListData.length; i++) {
165
+ if (!preloadListData[i] || !preloadListData[i].url) {
166
+ preloadListData.splice(i, 1);
167
+ preloadIsNullNum++;
168
+ i--;
169
+ }
170
+ }
171
+ loadViewList.preloadViewList = preloadListData.map((item, index) => {
172
+ if (item.magicToken !== CONST_FORMAT_TOKEN) {
173
+ console.error(
174
+ "Error:format mismatch, data should comes from function buildPreloadInfo()"
175
+ );
176
+ }
177
+ const base_url = item.url;
178
+ let image_url = base_url;
179
+ if (base_url && base_url.indexOf("http") < 0) {
180
+ // 包含http和https两种请求
181
+ if (window.JsView.Dom.UrlRef) {
182
+ image_url = new window.JsView.Dom.UrlRef(base_url).href;
248
183
  }
249
- // 直接在map前将url为null的值清除掉
250
- let downloadListData = this.downloadList;
251
- for (let i = 0; i < downloadListData.length; i++) {
252
- if (!downloadListData[i].url) {
253
- downloadListData.splice(i, 1);
254
- }
184
+ }
185
+ let target_size = null;
186
+ if (item.width !== 0 && item.height !== 0) {
187
+ target_size = { width: item.width, height: item.height };
188
+ }
189
+ let texture = null;
190
+ if (
191
+ image_url &&
192
+ (image_url.toLowerCase().indexOf(".webp") >= 0 ||
193
+ image_url.toLowerCase().indexOf(".gif") >= 0)
194
+ ) {
195
+ texture = ForgeHandles.TextureManager.GetGifImage(image_url, false);
196
+ } else {
197
+ texture = ForgeHandles.TextureManager.GetImage2(
198
+ image_url,
199
+ false,
200
+ target_size,
201
+ item.colorType,
202
+ item.netSetting ?? "",
203
+ item.isPosterImage
204
+ );
205
+ }
206
+ if (!texture) {
207
+ console.error(
208
+ "Error: Preload view build texture failed for " + image_url
209
+ );
210
+ preloadStateList[index] = true; // 无法创建texture的图片先认为加载完成
211
+ return;
212
+ }
213
+ const callback_token = texture.RegisterLoadImageCallback(
214
+ null,
215
+ (params) => {
216
+ console.log(`preload succeed ${image_url}`, params);
217
+ preloadStateList[index] = true;
218
+ preloadResultMap[item.url] = {
219
+ width: params.width,
220
+ height: params.height,
221
+ };
222
+ console.log(`preload succeed ${item.url}, params:${params}`);
223
+ _checkPreload();
255
224
  }
256
- this.downloadStateList = new Array(downloadListData.length).fill(null);
257
- this.downloadViewList = downloadListData.map((item, index) => {
258
- if (item.magicToken !== this.CONST_FORMAT_TOKEN) {
259
- console.error(
260
- "Error:format mismatch, data should comes from function buildDownloadInfo()"
261
- );
262
- }
263
- console.log(`OnDownload get${index} url=${item.url}`);
264
- const base_url = item.url;
265
- let image_url = base_url;
266
- if (base_url && base_url.indexOf("http") < 0) {
267
- // 包含http和https两种请求
268
- if (window.JsView.Dom.UrlRef) {
269
- image_url = new window.JsView.Dom.UrlRef(base_url).href;
270
- }
271
- }
272
- const texture = ForgeHandles.TextureManager.GetDownloadTexture(
273
- image_url,
274
- null,
275
- item.getImageSize
276
- );
277
- if (!texture) {
278
- console.error(
279
- "Error: Down view build texture failed for " + image_url
280
- );
281
- // 无法创建texture的图片先认为加载完成
282
- this.downloadStateList[index] = "invalid";
283
- return;
284
- }
285
- const callback_token = texture.RegisterLoadImageCallback(
286
- null,
287
- (texture_info) => {
288
- console.log(`OnDownload done index${index}`);
289
- this.downloadStateList[index] = texture_info.extra.absolutePath;
290
- if (
291
- item.getImageSize &&
292
- texture_info.extra.width &&
293
- texture_info.extra.height
294
- ) {
295
- this.downloadResultMap[texture_info.extra.absolutePath] = {
296
- width: texture_info.extra.width,
297
- height: texture_info.extra.height,
298
- };
299
- }
300
- this._checkDownload();
301
- }
302
- );
303
- texture.EnableBackgroundLoad();
304
- const texture_setting = new Forge.TextureSetting(texture); // Download类型的释放跟随view一同释放
305
- const preload_view = new Forge.PreloadView(texture_setting);
225
+ );
226
+ texture.EnableBackgroundLoad();
227
+ const texture_setting = new Forge.ExternalTextureSetting(texture);
228
+ const preload_view = new Forge.PreloadView(texture_setting);
229
+ return {
230
+ viewId: Forge.sViewStore.add(new Forge.ViewInfo(preload_view)),
231
+ textureRef: texture,
232
+ callToken: callback_token,
233
+ };
234
+ });
235
+ }
306
236
 
307
- return {
308
- viewId: Forge.sViewStore.add(new Forge.ViewInfo(preload_view)),
309
- textureRef: texture,
310
- callToken: callback_token,
311
- };
312
- });
313
- },
314
- },
315
- created() {
316
- this._releaseForgeView();
317
- this._getPreloadViewIdList();
318
- this._getDownloadViewIdList();
237
+ const _checkDownload = () => {
238
+ let loadedNum = 0
239
+ downloadStateList.forEach((state) => {
240
+ loadedNum = state ? ++loadedNum : loadedNum;
241
+ });
242
+ if (props.onDownloadDone && loadedNum === downloadStateList.length - downloadIsNullNum) {
243
+ props.onDownloadDone(
244
+ downloadStateList,
245
+ downloadResultMap
246
+ );
247
+ }
248
+ }
319
249
 
320
- watch(
321
- () => this.preloadList,
322
- (newValue, oldValue) => {
323
- console.log("JsvPreload: update preloadList");
324
- this.preloadIsNullNum = 0;
325
- this._releasePreloadView();
326
- this._getPreloadViewIdList();
327
- this.preloadToken++;
250
+ const _getDownloadViewIdList = () => {
251
+ if (!props.downloadList) {
252
+ return;
253
+ }
254
+ // 直接在map前将url为null的值清除掉
255
+ downloadStateList = new Array(props.downloadList.length).fill(null);
256
+ let downloadListData = props.downloadList;
257
+ for (let i = 0; i < downloadListData.length; i++) {
258
+ if (!downloadListData[i] || !downloadListData[i].url) {
259
+ downloadListData.splice(i, 1);
260
+ downloadIsNullNum++;
261
+ i--;
262
+ }
263
+ }
264
+ loadViewList.downloadViewList = downloadListData.map((item, index) => {
265
+ if (item.magicToken !== CONST_FORMAT_TOKEN) {
266
+ console.error(
267
+ "Error:format mismatch, data should comes from function buildDownloadInfo()"
268
+ );
269
+ }
270
+ console.log(`OnDownload get${index} url=${item.url}`);
271
+ const base_url = item.url;
272
+ let image_url = base_url;
273
+ if (base_url && base_url.indexOf("http") < 0) {
274
+ // 包含http和https两种请求
275
+ if (window.JsView.Dom.UrlRef) {
276
+ image_url = new window.JsView.Dom.UrlRef(base_url).href;
328
277
  }
278
+ }
279
+ const texture = ForgeHandles.TextureManager.GetDownloadTexture(
280
+ image_url,
281
+ null,
282
+ item.getImageSize
329
283
  );
330
- watch(
331
- () => this.downloadList,
332
- (newValue, oldValue) => {
333
- console.log("JsvPreload: update downloadList");
334
- this._releaseDownloadView();
335
- this._getDownloadViewIdList();
336
- this.downloadToken++;
284
+ if (!texture) {
285
+ console.error(
286
+ "Error: Down view build texture failed for " + image_url
287
+ );
288
+ // 无法创建texture的图片先认为加载完成
289
+ downloadStateList[index] = "invalid";
290
+ return;
291
+ }
292
+ const callback_token = texture.RegisterLoadImageCallback(
293
+ null,
294
+ (texture_info) => {
295
+ console.log(`OnDownload done index${index}`);
296
+ downloadStateList[index] = texture_info.extra.absolutePath;
297
+ if (
298
+ item.getImageSize &&
299
+ texture_info.extra.width &&
300
+ texture_info.extra.height
301
+ ) {
302
+ downloadResultMap[texture_info.extra.absolutePath] = {
303
+ width: texture_info.extra.width,
304
+ height: texture_info.extra.height,
305
+ };
306
+ }
307
+ _checkDownload();
337
308
  }
338
309
  );
339
- },
340
- beforeUnmount() {
341
- this._releaseForgeView();
342
- },
343
- };
344
- </script>
310
+ texture.EnableBackgroundLoad();
311
+ const texture_setting = new Forge.TextureSetting(texture); // Download类型的释放跟随view一同释放
312
+ const preload_view = new Forge.PreloadView(texture_setting);
313
+
314
+ return {
315
+ viewId: Forge.sViewStore.add(new Forge.ViewInfo(preload_view)),
316
+ textureRef: texture,
317
+ callToken: callback_token,
318
+ };
319
+ });
320
+ }
321
+
322
+
323
+ _releaseForgeView();
324
+ _getPreloadViewIdList();
325
+ _getDownloadViewIdList();
326
+
327
+ watchEffect(() => {
328
+ if (props.preloadList) {
329
+ console.log("JsvPreload: update preloadList");
330
+ preloadIsNullNum = 0;
331
+ _releasePreloadView();
332
+ _getPreloadViewIdList();
333
+ preloadToken++;
334
+ }
335
+ })
336
+ watchEffect(() => {
337
+ if (props.downloadList) {
338
+ console.log("JsvPreload: update downloadList");
339
+ downloadIsNullNum = 0
340
+ _releaseDownloadView();
341
+ _getDownloadViewIdList();
342
+ downloadToken++;
343
+ }
344
+ })
345
345
 
346
+ onBeforeUnmount(() => {
347
+ _releaseForgeView();
348
+ })
349
+
350
+
351
+ </script>
352
+
346
353
  <template>
347
354
  <div>
348
355
  <div :key="'preload_' + preloadToken">
349
- <div v-for="item in preloadViewList" :key="item.viewId" :id="item.viewId">
356
+ <div v-for="item in loadViewList.preloadViewList" :key="item.viewId" :id="item.viewId">
350
357
  <div v-if="item.viewId" :data-jsv-vw-innerview="item.viewId"></div>
351
358
  </div>
352
359
  </div>
353
360
 
354
361
  <div :key="'download_' + downloadToken">
355
- <div
356
- v-for="item in downloadViewList"
357
- :key="item.viewId"
358
- :id="item.viewId"
359
- >
362
+ <div v-for="item in loadViewList.downloadViewList" :key="item.viewId" :id="item.viewId">
360
363
  <div v-if="item.viewId" :data-jsv-vw-innerview="item.viewId"></div>
361
364
  </div>
362
365
  </div>