@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.
- package/package.json +1 -1
- package/utils/JsViewEngineWidget/JsvFocusBlock.vue +1 -1
- package/utils/JsViewEngineWidget/JsvFocusHub.ts +123 -0
- package/utils/JsViewEngineWidget/JsvFocusManager.js +4 -3
- package/utils/JsViewEngineWidget/MetroWidget/AnimationManager.ts +145 -51
- package/utils/JsViewEngineWidget/MetroWidget/ListWidget.vue +51 -64
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +62 -71
- package/utils/JsViewEngineWidget/MetroWidget/MetroWidgetSetup.js +308 -613
- package/utils/JsViewEngineWidget/TemplateParser/CommonMetroTemplate.ts +127 -247
- package/utils/JsViewEngineWidget/TemplateParser/ListMetroTemplate.ts +1 -0
- package/utils/JsViewEngineWidget/TemplateParser/MetroTemplate.ts +36 -2
- package/utils/JsViewEngineWidget/WidgetCommon.ts +25 -6
- package/utils/JsViewPlugin/JsvAudio/{JsvAudioBrowser.vue → BrowserAudio/BrowserAudio.vue} +1 -1
- package/utils/JsViewPlugin/JsvAudio/index.js +1 -1
- package/utils/JsViewPlugin/JsvLatex/BrowserDomBuilder.js +37 -0
- package/utils/JsViewPlugin/JsvLatex/Color.ts +43 -0
- package/utils/JsViewPlugin/JsvLatex/JsvLatex.vue +159 -0
- package/utils/JsViewPlugin/JsvLatex/JsvLatexBridgeProxy.js +16 -0
- package/utils/JsViewPlugin/JsvLatex/JsvLatexBrowser.vue +59 -0
- package/utils/JsViewPlugin/JsvLatex/PluginLoader.js +171 -0
- package/utils/JsViewPlugin/JsvLatex/index.js +28 -0
- package/utils/JsViewPlugin/JsvLatex/mathjax-tex-svg.txt +1 -0
- package/utils/JsViewPlugin/JsvLatex/version.js +24 -0
- package/utils/JsViewPlugin/JsvLatex/version.mjs +24 -0
- package/utils/JsViewPlugin/index.js +2 -1
- package/utils/JsViewVueTools/JsvDynamicCssStyle.js +2 -52
- package/utils/JsViewVueTools/JsvPerformance.ts +11 -0
- package/utils/JsViewVueTools/JsvPreDownloader.ts +55 -11
- package/utils/JsViewVueTools/JsvStyleSheetsDeclarer.js +40 -0
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CanvasTexture.ts +143 -0
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/CommandList.ts +24 -0
- package/utils/JsViewVueTools/JsvTextureStore/CanvasTexture/Path.ts +198 -0
- package/utils/JsViewVueTools/JsvTextureStore/JsvTextureStore.ts +31 -0
- package/utils/JsViewVueTools/JsvTextureStore/Store.ts +32 -0
- package/utils/JsViewVueTools/JsvTextureStore/Texture.ts +38 -0
- package/utils/JsViewVueTools/index.js +3 -0
- package/utils/JsViewVueWidget/JsvEnableRenderBreak.vue +17 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActionRefObject.ts +6 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.ts +144 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorState.ts +6 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/{CallbackManager.js → CallbackManager.ts} +19 -10
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ForgeTypeDefine.ts +45 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/FreeMoveActor.vue +1 -1
- package/utils/JsViewVueWidget/JsvFreeMoveActor/JsvEnvBlocker.vue +124 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/KeepFlags.ts +6 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.ts +553 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.ts +138 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.ts +53 -0
- package/utils/JsViewVueWidget/JsvFreeMoveActor/index.js +11 -1
- package/utils/JsViewVueWidget/JsvHole.js +1 -1
- package/utils/JsViewVueWidget/JsvLine/JsvLine.vue +101 -0
- package/utils/JsViewVueWidget/JsvLine/LineManager.js +62 -0
- package/utils/JsViewVueWidget/JsvLine/index.js +3 -0
- package/utils/JsViewVueWidget/JsvMarquee.vue +316 -139
- package/utils/JsViewVueWidget/JsvMindMap/CommonType.ts +1 -0
- package/utils/JsViewVueWidget/JsvMindMap/Constant.ts +20 -0
- package/utils/JsViewVueWidget/JsvMindMap/DataTree.ts +394 -0
- package/utils/JsViewVueWidget/JsvMindMap/Geometry.ts +277 -0
- package/utils/JsViewVueWidget/JsvMindMap/JsvMindMap.vue +653 -0
- package/utils/JsViewVueWidget/JsvMindMap/index.js +1 -0
- package/utils/JsViewVueWidget/JsvMindMap/rtree.js +628 -0
- package/utils/JsViewVueWidget/JsvNinePatch.vue +2 -2
- package/utils/JsViewVueWidget/JsvPieChart.vue +124 -0
- package/utils/JsViewVueWidget/JsvPosterImage.vue +32 -9
- package/utils/JsViewVueWidget/JsvPreload/BrowserPreload.vue +135 -133
- package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +273 -270
- package/utils/JsViewVueWidget/JsvSector.vue +107 -0
- package/utils/JsViewVueWidget/JsvTextBox.vue +14 -1
- package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +28 -2
- package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +122 -93
- package/utils/JsViewVueWidget/index.js +15 -7
- package/utils/JsViewVueWidget/JsvFreeMoveActor/ActorControl.js +0 -112
- package/utils/JsViewVueWidget/JsvFreeMoveActor/CommonTools.js +0 -18
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetAction.js +0 -216
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetCondition.js +0 -66
- package/utils/JsViewVueWidget/JsvFreeMoveActor/SetState.js +0 -38
- package/utils/JsViewVueWidget/JsvFreeMoveActor/TypeDefine.js +0 -12
- package/utils/JsViewVueWidget/JsvTouchContainer.vue +0 -183
- package/utils/JsViewVueWidget/JsvTransparentDiv.vue +0 -87
- /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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
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
|
-
|
|
331
|
-
(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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>
|