@shijiu/jsview 1.9.730 → 1.9.747
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/dom/jsv-browser-debug-dom.js +1 -1
- package/dom/jsv-dom.js +1 -1
- package/dom/jsv-engine-js-browser.js +1 -1
- package/dom/jsv-forge-define.js +1 -1
- package/package.json +14 -17
- package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +8 -1
- package/patches/node_modules/vite/dist/node/jsview.vite.config.js +12 -6
- package/dom/jsview-dom/README.md +0 -5
- package/dom/jsview-dom/package-lock.json-perfect +0 -3898
- package/dom/jsview-dom/package.json +0 -23
- package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +0 -15
- package/dom/jsview-dom/rollup/dom.rollup.config.js +0 -14
- package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +0 -14
- package/dom/jsview-dom/rollup/forge-define.rollup.config.js +0 -14
- package/dom/jsview-dom/scripts/release_dist.sh +0 -36
- package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +0 -118
- package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +0 -19
- package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +0 -559
- package/dom/jsview-dom/src/dom-browser-hook/index.js +0 -6
- package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +0 -226
- package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +0 -85
- package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +0 -51
- package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +0 -7
- package/dom/jsview-dom/src/dom-wrapper/event/Event.js +0 -12
- package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +0 -9
- package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +0 -43
- package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +0 -8
- package/dom/jsview-dom/src/dom-wrapper/index.js +0 -16
- package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +0 -24
- package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +0 -60
- package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +0 -10
- package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +0 -498
- package/dom/jsview-dom/src/dom-wrapper/node/Document.js +0 -274
- package/dom/jsview-dom/src/dom-wrapper/node/Element.js +0 -852
- package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +0 -48
- package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +0 -47
- package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +0 -203
- package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +0 -22
- package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +0 -40
- package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +0 -48
- package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +0 -230
- package/dom/jsview-dom/src/dom-wrapper/node/Node.js +0 -178
- package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +0 -9
- package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +0 -45
- package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +0 -33
- package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +0 -41
- package/dom/jsview-dom/src/dom-wrapper/node/Text.js +0 -22
- package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +0 -4
- package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +0 -237
- package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +0 -25
- package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +0 -26
- package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +0 -65
- package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +0 -11
- package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +0 -609
- package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +0 -51
- package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +0 -385
- package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +0 -43
- package/dom/jsview-dom/src/dom-wrapper/style/URL.js +0 -144
- package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +0 -42
- package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +0 -86
- package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +0 -64
- package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +0 -42
- package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +0 -32
- package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +0 -715
- package/dom/jsview-dom/src/engine-js/ForgeDefine.js +0 -8
- package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +0 -14
- package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +0 -100
- package/dom/jsview-dom/src/engine-js/browser/animation_base.js +0 -313
- package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +0 -64
- package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +0 -287
- package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +0 -906
- package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +0 -143
- package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +0 -12
- package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +0 -160
- package/dom/jsview-dom/src/engine-js/browser/console_log.js +0 -25
- package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +0 -95
- package/dom/jsview-dom/src/engine-js/browser/easing.js +0 -114
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +0 -122
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +0 -450
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +0 -102
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +0 -296
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +0 -10
- package/dom/jsview-dom/src/engine-js/browser/index.js +0 -38
- package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +0 -336
- package/dom/jsview-dom/src/engine-js/browser/layout_params.js +0 -113
- package/dom/jsview-dom/src/engine-js/browser/layout_view.js +0 -3545
- package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +0 -15
- package/dom/jsview-dom/src/engine-js/browser/media.js +0 -379
- package/dom/jsview-dom/src/engine-js/browser/page_base.js +0 -941
- package/dom/jsview-dom/src/engine-js/browser/particle_view.js +0 -526
- package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +0 -61
- package/dom/jsview-dom/src/engine-js/browser/react_utils.js +0 -5
- package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +0 -91
- package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +0 -128
- package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +0 -155
- package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +0 -75
- package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +0 -139
- package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +0 -192
- package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +0 -454
- package/dom/jsview-dom/src/engine-js/browser/text_utils.js +0 -299
- package/dom/jsview-dom/src/engine-js/browser/text_view.js +0 -428
- package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +0 -1060
- package/dom/jsview-dom/src/engine-js/browser/url.js +0 -69
- package/dom/jsview-dom/src/engine-js/browser/velocity.js +0 -40
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +0 -77
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +0 -67
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +0 -98
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +0 -21
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +0 -24
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +0 -9
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +0 -268
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +0 -84
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +0 -213
- package/dom/jsview-dom/src/engine-js/browser/view_store.js +0 -41
- package/dom/jsview-dom/src/engine-js/index.js +0 -2
- package/dom/jsview-dom/src/engine-js/native/README.md +0 -1
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
class URL {
|
|
2
|
-
constructor(value, parseTotal) {
|
|
3
|
-
this.href = '';
|
|
4
|
-
this.origin = '';
|
|
5
|
-
this.protocol = '';
|
|
6
|
-
this.host = '';
|
|
7
|
-
this.hostname = '';
|
|
8
|
-
this.port = '';
|
|
9
|
-
this.pathname = '';
|
|
10
|
-
this.search = '';
|
|
11
|
-
this.hash = '';
|
|
12
|
-
if (!value) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (value.startsWith('url') === true) {
|
|
16
|
-
const startIdx = value.indexOf('(') + 1;
|
|
17
|
-
const endIdx = value.lastIndexOf(')');
|
|
18
|
-
value = value.substring(startIdx, endIdx).trim();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (value.startsWith('data:') === true) {
|
|
22
|
-
this.href = value;
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
if (value.startsWith('/') === true) {
|
|
26
|
-
value = document.location.origin + value;
|
|
27
|
-
}
|
|
28
|
-
if (value.startsWith('./') === true) {
|
|
29
|
-
const index = document.location.pathname.lastIndexOf("/");
|
|
30
|
-
let path = "";
|
|
31
|
-
if (index > 0) {
|
|
32
|
-
path = document.location.pathname.substring(0, index);
|
|
33
|
-
}
|
|
34
|
-
value = document.location.origin + path + value.substring(1);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
this.href = value;
|
|
38
|
-
if (!parseTotal) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
let idx = this.href.indexOf('?');
|
|
43
|
-
const protocolHostPath = (idx > 0 ? this.href.substring(0, idx) : this.href);
|
|
44
|
-
this.search = (idx > 1 ? this.href.substring(idx) : "");
|
|
45
|
-
|
|
46
|
-
idx = protocolHostPath.indexOf('://');
|
|
47
|
-
this.protocol = (idx > 0 ? protocolHostPath.substring(0, idx + 1) : "");
|
|
48
|
-
const hostPath = (idx > 1 ? protocolHostPath.substring(idx + 3) : "");
|
|
49
|
-
|
|
50
|
-
idx = hostPath.indexOf('/');
|
|
51
|
-
this.host = (idx > 0 ? hostPath.substring(0, idx) : "");
|
|
52
|
-
this.pathname = (idx > 1 ? hostPath.substring(idx) : "");
|
|
53
|
-
this.origin = (idx > 0 ? `${this.protocol}//${this.host}` : "");
|
|
54
|
-
// if(!this.origin) {
|
|
55
|
-
// throw Error("Failed to parse total url.");
|
|
56
|
-
// }
|
|
57
|
-
|
|
58
|
-
idx = this.host.indexOf(':');
|
|
59
|
-
this.hostname = (idx > 0 ? this.host.substring(0, idx) : this.host);
|
|
60
|
-
this.port = (idx > 1 ? this.host.substring(idx + 1) : "");
|
|
61
|
-
|
|
62
|
-
console.log("create total parse URL, this=", this);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
replace(newUrl) {
|
|
66
|
-
this.href = newUrl;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
export default URL;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Created by luocf on 2020/9/21.
|
|
3
|
-
*/
|
|
4
|
-
function Velocity() {
|
|
5
|
-
this.positionQueue = [];
|
|
6
|
-
this.timeQueue = [];
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
Velocity.prototype.reset = function() {
|
|
10
|
-
this.positionQueue = [];
|
|
11
|
-
this.timeQueue = [];
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
Velocity.prototype.pruneQueue = function(ms) {
|
|
15
|
-
// pull old values off of the queue
|
|
16
|
-
while (this.timeQueue.length && this.timeQueue[0] < (Date.now() - ms)) {
|
|
17
|
-
this.timeQueue.shift();
|
|
18
|
-
this.positionQueue.shift();
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
Velocity.prototype.updatePosition = function(position) {
|
|
23
|
-
this.positionQueue.push(position);
|
|
24
|
-
this.timeQueue.push(Date.now());
|
|
25
|
-
this.pruneQueue(50);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
Velocity.prototype.getVelocity = function() {
|
|
29
|
-
this.pruneQueue(1000);
|
|
30
|
-
const length = this.timeQueue.length;
|
|
31
|
-
if (length < 2) return 0;
|
|
32
|
-
|
|
33
|
-
const time = (this.timeQueue[length - 1] - this.timeQueue[0]) / 1000;
|
|
34
|
-
const distance = this.positionQueue[length - 1] - this.positionQueue[0];
|
|
35
|
-
|
|
36
|
-
console.log(`getVelocity distance:${distance}, time:${time}, velocity:${distance / time}, this.timeQueue[length-1]:${this.timeQueue[length - 1]}, this.timeQueue[0]:${this.timeQueue[0]}`);
|
|
37
|
-
return distance / time;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export default Velocity;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import Forge from "../../ForgeDefine";
|
|
2
|
-
|
|
3
|
-
{
|
|
4
|
-
/**********************************************
|
|
5
|
-
* Forge.sImpactSensorManager.AutoFroze
|
|
6
|
-
**********************************************/
|
|
7
|
-
class AutoFroze extends Forge.ViewSensor {
|
|
8
|
-
constructor(froze_pre_impact_views, froze_on_impact_views) {
|
|
9
|
-
// 此Sensor不需要回调
|
|
10
|
-
super(Forge.ViewSensor.TypeDefines.TYPE_FROZE_SET);
|
|
11
|
-
|
|
12
|
-
// Auto recycle 需要两个View list进行合并,所以对两个list都做记录(LayoutView的引用都要注意释放)
|
|
13
|
-
this._PreImpactViewList = null;
|
|
14
|
-
this._OnImpactViewList = null;
|
|
15
|
-
|
|
16
|
-
this._UpdateAutoRecycleRef(froze_pre_impact_views, true, froze_on_impact_views, true);
|
|
17
|
-
|
|
18
|
-
Forge.sViewSensorManager.AddSensor(this);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
HtmlDoWorkOnFrame() {
|
|
22
|
-
// Nothing to do for AutoFroze(not supported for PC browser)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
HtmlNeedWorkOnFrame() {
|
|
26
|
-
return false; // PC browser不需要触发每帧处理
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
UpdatePreImpactList(froze_pre_impact_views) {
|
|
30
|
-
this._UpdateAutoRecycleRef(froze_pre_impact_views, true, null, false);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
UpdateOnImpactList(froze_on_impact_views) {
|
|
34
|
-
this._UpdateAutoRecycleRef(null, false, froze_on_impact_views, true);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Hide public
|
|
38
|
-
DoRef() {
|
|
39
|
-
if (!this.Expired()) {
|
|
40
|
-
this._RefCount++;
|
|
41
|
-
} else {
|
|
42
|
-
console.error("Error: froze set is expired for all bind views lost");
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Hide public
|
|
47
|
-
UnRef() {
|
|
48
|
-
if (this._RefCount > 0) {
|
|
49
|
-
this._RefCount--;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (this._RefCount == 0) {
|
|
53
|
-
this.Recycle();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Override
|
|
58
|
-
OnSelfRecycle() {
|
|
59
|
-
this._PreImpactViewList = null;
|
|
60
|
-
this._OnImpactViewList = null;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
_UpdateAutoRecycleRef(froze_pre_impact_views, pre_has_new_data, froze_on_impact_views, on_has_new_data) {
|
|
64
|
-
if (pre_has_new_data) {
|
|
65
|
-
this._PreImpactViewList = (froze_pre_impact_views instanceof Array ? froze_pre_impact_views : []);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (on_has_new_data) {
|
|
69
|
-
this._OnImpactViewList = (froze_on_impact_views instanceof Array ? froze_on_impact_views : []);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// 合并view list
|
|
73
|
-
this.ResetAutoRecycleViewsRef([], [...this._PreImpactViewList, ...this._OnImpactViewList]);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
Forge.sImpactSensorManager.AutoFroze = AutoFroze;
|
|
77
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import Forge from "../../ForgeDefine";
|
|
2
|
-
import getTransform from "../html_shared_tools/element_transform";
|
|
3
|
-
import gjk from "../html_shared_tools/gjk";
|
|
4
|
-
|
|
5
|
-
{
|
|
6
|
-
class DragImpactSensor extends Forge.ViewSensor {
|
|
7
|
-
constructor(element_array, element2, callback) {
|
|
8
|
-
super(Forge.ViewSensor.TypeDefines.TYPE_DRAG_IMPACT);
|
|
9
|
-
|
|
10
|
-
this._Callback = callback;
|
|
11
|
-
|
|
12
|
-
this._HtmlConfig = {
|
|
13
|
-
elementArray: element_array,
|
|
14
|
-
element2: element2,
|
|
15
|
-
|
|
16
|
-
// 内部碰撞状态记录
|
|
17
|
-
status: {
|
|
18
|
-
contacted: false
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// 无自动销毁的关联
|
|
23
|
-
this.ResetAutoRecycleViewsRef([], []);
|
|
24
|
-
|
|
25
|
-
// Add to sensor manager
|
|
26
|
-
Forge.sViewSensorManager.AddSensor(this);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
HtmlDoWorkOnFrame() {
|
|
30
|
-
if (!this.Expired() && this._HtmlConfig.elementArray && this._HtmlConfig.element2) {
|
|
31
|
-
const element_array = this._HtmlConfig.elementArray;
|
|
32
|
-
const element2 = this._HtmlConfig.element2;
|
|
33
|
-
|
|
34
|
-
const ele_transform = getTransform(element2);
|
|
35
|
-
const intersected = gjk.intersect(element_array.slice(0, 1), ele_transform);
|
|
36
|
-
const intersected1 = gjk.intersect(element_array.slice(1, 2), ele_transform);
|
|
37
|
-
const intersected2 = gjk.intersect(element_array.slice(2, 3), ele_transform);
|
|
38
|
-
const intersected3 = gjk.intersect(element_array.slice(3, 4), ele_transform);
|
|
39
|
-
// console.log("intersected && intersected1 && intersected2 && intersected3:"+intersected+" , "+intersected1+" , "+intersected2 +" , "+intersected3, this._Element1, ele_transform);
|
|
40
|
-
if (!(intersected && intersected1 && intersected2 && intersected3)) {
|
|
41
|
-
if (!this._HtmlConfig.status.contacted) {
|
|
42
|
-
this._HtmlConfig.status.contacted = true;
|
|
43
|
-
this.OnCallback({ status: 1, x: ele_transform[0], y: ele_transform[1] });
|
|
44
|
-
}
|
|
45
|
-
} else {
|
|
46
|
-
if (this._HtmlConfig.status.contacted) {
|
|
47
|
-
this.OnCallback({ status: 2 });
|
|
48
|
-
this._HtmlConfig.status.contacted = false;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
OnCallback(info) {
|
|
55
|
-
// console.log("TestImpact Docallback status=" + status);
|
|
56
|
-
if (this._Callback) {
|
|
57
|
-
if (info.status == 1 && this._Callback.OnBeginContact) {
|
|
58
|
-
this._Callback.OnBeginContact(info.x, info.y);
|
|
59
|
-
} else if (info.status == 2 && this._Callback.OnEndContact) {
|
|
60
|
-
this._Callback.OnEndContact();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
Forge.DragImpactSensor = DragImpactSensor;
|
|
67
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import Forge from "../../ForgeDefine";
|
|
3
|
-
import testCollide from "../html_shared_tools/test_collide";
|
|
4
|
-
|
|
5
|
-
{
|
|
6
|
-
/**********************************************
|
|
7
|
-
* Forge.ImpactSensor
|
|
8
|
-
**********************************************/
|
|
9
|
-
|
|
10
|
-
class ImpactSensor extends Forge.ViewSensor {
|
|
11
|
-
/**
|
|
12
|
-
* @public
|
|
13
|
-
* @constructor Forge.ImpactSensor
|
|
14
|
-
* @instance
|
|
15
|
-
* @param {Forge.LayoutView} view_1 碰撞源(LayoutView)
|
|
16
|
-
* @param {Forge.LayoutView} view_2 碰撞目标(LayoutView)
|
|
17
|
-
* @param {Forge.sImpactSensorManager.Callback} callback 碰撞状态变化的回调函数
|
|
18
|
-
* @param {Forge.sImpactSensorManager.AutoFroze} froze_views_set 碰撞状态变化时,将关联的View的动画先主动暂停,避免穿模
|
|
19
|
-
**/
|
|
20
|
-
constructor(view_1, view_2, callback, froze_views_set) {
|
|
21
|
-
super(Forge.ViewSensor.TypeDefines.TYPE_IMPACT);
|
|
22
|
-
|
|
23
|
-
this._HtmlConfig = {
|
|
24
|
-
view1: view_1,
|
|
25
|
-
view2: view_2,
|
|
26
|
-
|
|
27
|
-
frozeSetId: froze_views_set ? froze_views_set.IdToken : 0, // HTML版本只记录,无法实现
|
|
28
|
-
|
|
29
|
-
// 内部碰撞状态记录
|
|
30
|
-
status: {
|
|
31
|
-
contacted: false
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
this._Callback = callback;
|
|
36
|
-
|
|
37
|
-
// 处理FrozeViewsSet
|
|
38
|
-
this._FrozeViewsSet = froze_views_set;
|
|
39
|
-
if (froze_views_set) {
|
|
40
|
-
froze_views_set.DoRef();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// 登录自动销毁的关联LayoutView, 当view1或者view2销毁时,触发sensor自我销毁
|
|
44
|
-
this.ResetAutoRecycleViewsRef([view_1, view_2], []);
|
|
45
|
-
|
|
46
|
-
// Add to sensor manager
|
|
47
|
-
Forge.sViewSensorManager.AddSensor(this);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
HtmlDoWorkOnFrame() {
|
|
51
|
-
if (!this.Expired() && this._HtmlConfig.view1 && this._HtmlConfig.view2) {
|
|
52
|
-
const intersected = testCollide(this._HtmlConfig.view1.Element, this._HtmlConfig.view2.Element);
|
|
53
|
-
|
|
54
|
-
if (intersected) {
|
|
55
|
-
if (!this._HtmlConfig.status.contacted) {
|
|
56
|
-
this._HtmlConfig.status.contacted = true;
|
|
57
|
-
this.OnCallback(1);
|
|
58
|
-
}
|
|
59
|
-
} else {
|
|
60
|
-
if (this._HtmlConfig.status.contacted) {
|
|
61
|
-
this.OnCallback(2);
|
|
62
|
-
this._HtmlConfig.status.contacted = false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* (Override) 触发碰撞回调
|
|
70
|
-
* @func DoCallback
|
|
71
|
-
* @memberof Forge.ImpactSensor
|
|
72
|
-
* @instance
|
|
73
|
-
* @param {int} status 1: collided 2: splited
|
|
74
|
-
**/
|
|
75
|
-
OnCallback(status) {
|
|
76
|
-
// console.log("TestImpact Docallback status=" + status);
|
|
77
|
-
if (this._Callback) {
|
|
78
|
-
if (status == 1 && this._Callback.OnBeginContact) {
|
|
79
|
-
this._Callback.OnBeginContact();
|
|
80
|
-
} else if (status == 2 && this._Callback.OnEndContact) {
|
|
81
|
-
this._Callback.OnEndContact();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Override
|
|
87
|
-
OnSelfRecycle() {
|
|
88
|
-
// 取消对Froze set的引用,促使FrozeSet可释放
|
|
89
|
-
if (this._FrozeViewsSet) {
|
|
90
|
-
this._FrozeViewsSet.UnRef();
|
|
91
|
-
this._FrozeViewsSet = null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
this._HtmlConfig = null; // unref all, 释放内存
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
Forge.ImpactSensor = ImpactSensor;
|
|
98
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import Forge from "../../ForgeDefine";
|
|
2
|
-
|
|
3
|
-
{
|
|
4
|
-
/**********************************************
|
|
5
|
-
* Forge.sImpactSensorManager.Callback
|
|
6
|
-
**********************************************/
|
|
7
|
-
Forge.sImpactSensorManager.Callback = class {
|
|
8
|
-
constructor(on_begin_contact, on_end_contact) {
|
|
9
|
-
this.OnBeginContact = on_begin_contact;
|
|
10
|
-
this.OnEndContact = on_end_contact;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
UpdateImpactCallback(on_begin_contact) {
|
|
14
|
-
this.OnBeginContact = on_begin_contact;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
UpdateLeaveCallback(on_end_contact) {
|
|
18
|
-
this.OnEndContact = on_end_contact;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import Forge from "../../ForgeDefine";
|
|
3
|
-
|
|
4
|
-
{
|
|
5
|
-
/**********************************************
|
|
6
|
-
* Forge.sImpactSensorManager.ImpactSensorManager
|
|
7
|
-
**********************************************/
|
|
8
|
-
class ImpactSensorManager {
|
|
9
|
-
constructor() {
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
StartTrace(layout_view1, layout_view2, callback, froze_views_set) {
|
|
14
|
-
var sensor = new Forge.ImpactSensor(
|
|
15
|
-
layout_view1,
|
|
16
|
-
layout_view2,
|
|
17
|
-
callback,
|
|
18
|
-
froze_views_set);
|
|
19
|
-
return sensor;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
Forge.sImpactSensorManager = new ImpactSensorManager();
|
|
24
|
-
}
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import Forge from "../../ForgeDefine";
|
|
3
|
-
|
|
4
|
-
{
|
|
5
|
-
|
|
6
|
-
/**********************************************
|
|
7
|
-
* Forge.ViewSensor
|
|
8
|
-
**********************************************/
|
|
9
|
-
|
|
10
|
-
let CONST_TARGET_UNKNOWN = 1;
|
|
11
|
-
let CONST_TARGET_NEW_UPDATE = 2;
|
|
12
|
-
let CONST_TARGET_DELETE = 3;
|
|
13
|
-
|
|
14
|
-
class ViewSensor {
|
|
15
|
-
/**
|
|
16
|
-
* ViewSensor 构造函数
|
|
17
|
-
*
|
|
18
|
-
* @param {Object} config sensor特殊的配置信息
|
|
19
|
-
*/
|
|
20
|
-
constructor(type, config) {
|
|
21
|
-
/**
|
|
22
|
-
* Sensor有四种状态
|
|
23
|
-
* 1. 创建状态,target != DELETE, 未加入管理map
|
|
24
|
-
* 2. 未进管理map的删除状态, target == DELETE, 未加入管理map
|
|
25
|
-
* 3. Manger管理同步状态, target != DELETE, 加入了管理map, inSyncing = true
|
|
26
|
-
* 4. Manger管理同步完毕, target != DELETE, 加入了管理map, inSyncing = false
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
this.IdToken = Forge.sViewSensorManager.IdTokenGenerator++;
|
|
30
|
-
|
|
31
|
-
this.Type = type; // 标识是哪种扩展类
|
|
32
|
-
|
|
33
|
-
this.Manager = null;
|
|
34
|
-
|
|
35
|
-
// 自动清理关联的view
|
|
36
|
-
// any: 当列表中任意view释放后,就把自己expired掉
|
|
37
|
-
// all: 当列表中所有view释放后,就把自己expired掉
|
|
38
|
-
this._OnAnyViewLostList = null;
|
|
39
|
-
this._AnyViewLostMark = null;
|
|
40
|
-
this._OnWholeViewLostList = null;
|
|
41
|
-
this._WholeViewLostMark = null;
|
|
42
|
-
|
|
43
|
-
this._HtmlStatusInfo = {
|
|
44
|
-
target: config == null ? CONST_TARGET_UNKNOWN : CONST_TARGET_NEW_UPDATE,
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
OnManaged(manager) {
|
|
49
|
-
if (this._HtmlStatusInfo.target != CONST_TARGET_DELETE) {
|
|
50
|
-
if (!this.Manager) {
|
|
51
|
-
// 对LayoutView进行是否在屏幕的监控
|
|
52
|
-
this._RegisterViewLostCallbacks();
|
|
53
|
-
|
|
54
|
-
this.Manager = manager;
|
|
55
|
-
|
|
56
|
-
return true; // 非deleted装填,可以挂载
|
|
57
|
-
} else {
|
|
58
|
-
// Already managed
|
|
59
|
-
console.error("manage duplicated")
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return false; // 已经为delete状态,不能挂载
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* 重设 auto recycle view reference
|
|
69
|
-
*
|
|
70
|
-
* @function ResetAutoRecycleViewsRef
|
|
71
|
-
* @param {Array} any_view_lost any: 当列表中任意view释放后,就把自己expired掉, 可以为[], 不能为null
|
|
72
|
-
* @param {Array} whole_views_lost all: 当列表中所有view释放后,就把自己expired掉, 可以为[], 不能为null
|
|
73
|
-
*/
|
|
74
|
-
ResetAutoRecycleViewsRef(any_view_lost, whole_views_lost) {
|
|
75
|
-
if (!(any_view_lost instanceof Array) || !(whole_views_lost instanceof Array)) {
|
|
76
|
-
console.error("need array ", any_view_lost, whole_views_lost);
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (this._HtmlStatusInfo.target != CONST_TARGET_DELETE) {
|
|
81
|
-
// 删除原本的跟踪点
|
|
82
|
-
this._UnregisterViewCallbacks();
|
|
83
|
-
|
|
84
|
-
// 使用新的跟踪点
|
|
85
|
-
this._OnAnyViewLostList = any_view_lost;
|
|
86
|
-
this._OnWholdViewLostList = whole_views_lost;
|
|
87
|
-
|
|
88
|
-
if (this.Manager) {
|
|
89
|
-
// 已经被Manager管理后,立即触发View关联处理
|
|
90
|
-
this._RegisterViewLostCallbacks();
|
|
91
|
-
}
|
|
92
|
-
} else {
|
|
93
|
-
// 处于删除状态,不做任何更新
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
Expired() {
|
|
98
|
-
return (this._HtmlStatusInfo.target == CONST_TARGET_DELETE);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
Recycle() {
|
|
102
|
-
// 无论是否已经在同步队列中,只要从非delete变成delete状态则直接往删除队列中加
|
|
103
|
-
if (this._HtmlStatusInfo.target != CONST_TARGET_DELETE) {
|
|
104
|
-
if (this.Manager) {
|
|
105
|
-
this._HtmlStatusInfo.target = CONST_TARGET_DELETE;
|
|
106
|
-
|
|
107
|
-
this.OnSelfRecycle(); // 继承类资源回收
|
|
108
|
-
|
|
109
|
-
this.Manager.RecycleSensor(this);
|
|
110
|
-
this.Manager = null; // 将Manager置空,用于防止重复删除
|
|
111
|
-
|
|
112
|
-
this._UnregisterViewCallbacks();
|
|
113
|
-
} else {
|
|
114
|
-
// 未加入到任何manager, 不用做处理
|
|
115
|
-
}
|
|
116
|
-
} else {
|
|
117
|
-
// 已经处于回收完毕状态
|
|
118
|
-
// console.log("already recycled");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// 清理View引用,避免内存泄漏
|
|
122
|
-
this._OnAnyViewLostList = null;
|
|
123
|
-
this._OnWholdViewLostList = null;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Need override
|
|
127
|
-
HtmlDoWorkOnFrame() {
|
|
128
|
-
console.log("Need be override");
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// 记录是否需要每一帧执行,默认是true(需要)
|
|
132
|
-
HtmlNeedWorkOnFrame() {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Need override
|
|
137
|
-
OnCallback(params) {
|
|
138
|
-
console.log("Need be override");
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// can override
|
|
142
|
-
OnSelfRecycle() {
|
|
143
|
-
// 当Recycle时被调用,继承类需要进行内部资源回收时进行override
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
_RegisterViewLostCallbacks() {
|
|
147
|
-
let that = this;
|
|
148
|
-
|
|
149
|
-
// Any的测算
|
|
150
|
-
if (this._OnAnyViewLostList?.length > 0) {
|
|
151
|
-
let list_length = this._OnAnyViewLostList.length;
|
|
152
|
-
|
|
153
|
-
this._AnyViewLostMark = {
|
|
154
|
-
callbacks: new Array(list_length).fill(null),
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
// 创建View的detach回调
|
|
158
|
-
for (let view_idx = 0; view_idx < list_length; view_idx++) {
|
|
159
|
-
let link_view = this._OnAnyViewLostList[view_idx];
|
|
160
|
-
|
|
161
|
-
if (!link_view.Expired) {
|
|
162
|
-
let callback = () => {
|
|
163
|
-
// 有一个view detach后,sensor就自动recycle
|
|
164
|
-
that.Recycle();
|
|
165
|
-
};
|
|
166
|
-
this._AnyViewLostMark.callbacks[view_idx] = callback
|
|
167
|
-
link_view.RegisterDetachCallback(callback);
|
|
168
|
-
} else {
|
|
169
|
-
this._OnAnyViewLostList[view_idx] = null; // Unref expired view
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
} else {
|
|
173
|
-
this._AnyViewLostMark = null;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// All的测算
|
|
177
|
-
if (this._OnWholeViewLostList?.length > 0) {
|
|
178
|
-
let list_length = this._OnWholeViewLostList.length;
|
|
179
|
-
// 重置统计 flags
|
|
180
|
-
this._WholeViewLostMark = {
|
|
181
|
-
list: new Array(list_length).fill({
|
|
182
|
-
callback: null,
|
|
183
|
-
lost: false
|
|
184
|
-
}),
|
|
185
|
-
lostCount: 0
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// 创建View的detach回调
|
|
189
|
-
for (let view_idx = 0; view_idx < list_length; view_idx++) {
|
|
190
|
-
let link_view = this._OnWholeViewLostList[view_idx];
|
|
191
|
-
|
|
192
|
-
if (!link_view.Expired) {
|
|
193
|
-
// View有效,进行挂载(不用管是否已经再rootViewTree上)
|
|
194
|
-
let callback = () => {
|
|
195
|
-
// 全部view都lost后,sensor就自动recycle
|
|
196
|
-
that._OnViewOfWholeListLost(view_idx);
|
|
197
|
-
};
|
|
198
|
-
this._WholeViewLostMark.list[view_idx].callback = callback
|
|
199
|
-
link_view.RegisterDetachCallback(callback);
|
|
200
|
-
} else {
|
|
201
|
-
// 记录为失效view
|
|
202
|
-
this._OnWholeViewLostList[view_idx] = null; // Unref expired view
|
|
203
|
-
this._WholeViewLostMark.list[view_idx].lost = true;
|
|
204
|
-
this._WholeViewLostMark.lostCount++;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
} else {
|
|
208
|
-
this._WholeViewLostMark = null;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
_UnregisterViewCallbacks() {
|
|
213
|
-
// Any Lost list
|
|
214
|
-
if (this._AnyViewLostMark) {
|
|
215
|
-
let list_length = this._OnAnyViewLostList.length;
|
|
216
|
-
for (let view_idx = 0; view_idx < list_length; view_idx++) {
|
|
217
|
-
let view = this._OnAnyViewLostList[view_idx];
|
|
218
|
-
if (view) {
|
|
219
|
-
this._OnAnyViewLostList[view_idx].UnregisterDetachCallback(
|
|
220
|
-
this._AnyViewLostMark.callbacks[view_idx]
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
this._AnyViewLostMark = null;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Whole lost list
|
|
229
|
-
if (this._WholeViewLostMark) {
|
|
230
|
-
let list_length = this._OnWholdViewLostList.length;
|
|
231
|
-
for (let view_idx = 0; view_idx < list_length; view_idx++) {
|
|
232
|
-
let view = this._OnWholdViewLostList[view_idx];
|
|
233
|
-
if (view) {
|
|
234
|
-
this._OnWholdViewLostList[view_idx].UnregisterDetachCallback(
|
|
235
|
-
this._WholeViewLostMark.list[view_idx].callback
|
|
236
|
-
);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
this._WholeViewLostMark = null;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
_OnViewOfWholeListLost(view_index) {
|
|
245
|
-
if (!this._WholeViewLostMark.list[view_index].lost) {
|
|
246
|
-
this._WholeViewLostMark.lostCount++;
|
|
247
|
-
this._WholeViewLostMark.list[view_index].lost = true;
|
|
248
|
-
|
|
249
|
-
this._WholeViewLostMark.list[view_idx].callback = null; // 清理callback, 减小内存
|
|
250
|
-
this._OnWholdViewLostList[view_index] = null; // Unref对layoutView的引用,避免内存泄漏
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
if (this._WholeViewLostMark.lostCount == this._OnWholeViewLostList.length) {
|
|
254
|
-
this.Recycle();
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
ViewSensor.TypeDefines = {
|
|
260
|
-
TYPE_IMPACT: 1,
|
|
261
|
-
TYPE_FROZE_SET: 2,
|
|
262
|
-
TYPE_ON_SCREEN: 3,
|
|
263
|
-
|
|
264
|
-
TYPE_DRAG_IMPACT: 101, // html专有
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
Forge.ViewSensor = ViewSensor;
|
|
268
|
-
}
|