Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
88c9d84f
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
88c9d84f
编写于
3月 27, 2020
作者:
N
nrayburn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Replace mutationObserver with resizeObserver for monaco editor automaticLayout
上级
44549789
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
53 addition
and
28 deletion
+53
-28
src/vs/editor/browser/config/elementSizeObserver.ts
src/vs/editor/browser/config/elementSizeObserver.ts
+53
-28
未找到文件。
src/vs/editor/browser/config/elementSizeObserver.ts
浏览文件 @
88c9d84f
...
...
@@ -3,9 +3,34 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
Disposable
,
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IDimension
}
from
'
vs/editor/common/editorCommon
'
;
import
*
as
dom
from
'
vs/base/browser/dom
'
;
interface
ResizeObserver
{
observe
(
target
:
Element
):
void
;
unobserve
(
target
:
Element
):
void
;
disconnect
():
void
;
}
interface
ResizeObserverSize
{
inlineSize
:
number
;
blockSize
:
number
;
}
interface
ResizeObserverEntry
{
readonly
target
:
Element
;
readonly
contentRect
:
DOMRectReadOnly
;
readonly
borderBoxSize
:
ResizeObserverSize
;
readonly
contentBoxSize
:
ResizeObserverSize
;
}
type
ResizeObserverCallback
=
(
entries
:
ReadonlyArray
<
ResizeObserverEntry
>
,
observer
:
ResizeObserver
)
=>
void
;
declare
const
ResizeObserver
:
{
prototype
:
ResizeObserver
;
new
(
callback
:
ResizeObserverCallback
):
ResizeObserver
;
};
export
class
ElementSizeObserver
extends
Disposable
{
...
...
@@ -13,8 +38,8 @@ export class ElementSizeObserver extends Disposable {
private
readonly
changeCallback
:
()
=>
void
;
private
width
:
number
;
private
height
:
number
;
private
mutationObserver
:
Mutation
Observer
|
null
;
private
windowSizeListener
:
IDisposable
|
null
;
private
resizeObserver
:
Resize
Observer
|
null
;
private
measureReferenceDomElementToken
:
number
;
constructor
(
referenceDomElement
:
HTMLElement
|
null
,
dimension
:
IDimension
|
undefined
,
changeCallback
:
()
=>
void
)
{
super
();
...
...
@@ -22,9 +47,9 @@ export class ElementSizeObserver extends Disposable {
this
.
changeCallback
=
changeCallback
;
this
.
width
=
-
1
;
this
.
height
=
-
1
;
this
.
mutationObserver
=
null
;
this
.
windowSizeListener
=
null
;
this
.
resizeObserver
=
null
;
this
.
measureReferenceDomElement
(
false
,
dimension
);
this
.
measureReferenceDomElementToken
=
-
1
;
}
public
dispose
():
void
{
...
...
@@ -41,25 +66,33 @@ export class ElementSizeObserver extends Disposable {
}
public
startObserving
():
void
{
if
(
!
this
.
mutationObserver
&&
this
.
referenceDomElement
)
{
this
.
mutationObserver
=
new
MutationObserver
(()
=>
this
.
_onDidMutate
());
this
.
mutationObserver
.
observe
(
this
.
referenceDomElement
,
{
attributes
:
true
,
});
}
if
(
!
this
.
windowSizeListener
)
{
this
.
windowSizeListener
=
dom
.
addDisposableListener
(
window
,
'
resize
'
,
()
=>
this
.
_onDidResizeWindow
());
if
(
typeof
ResizeObserver
!==
'
undefined
'
)
{
if
(
!
this
.
resizeObserver
&&
this
.
referenceDomElement
)
{
this
.
resizeObserver
=
new
ResizeObserver
((
entries
)
=>
{
if
(
entries
&&
entries
[
0
])
{
this
.
observe
({
width
:
entries
[
0
].
contentRect
.
width
,
height
:
entries
[
0
].
contentRect
.
height
});
}
else
{
this
.
observe
();
}
});
this
.
resizeObserver
.
observe
(
this
.
referenceDomElement
);
}
}
else
{
if
(
this
.
measureReferenceDomElementToken
===
-
1
)
{
// setInterval type defaults to NodeJS.Timeout instead of number, so specify it as a number
this
.
measureReferenceDomElementToken
=
setInterval
(()
=>
this
.
observe
(),
100
)
as
unknown
as
number
;
}
}
}
public
stopObserving
():
void
{
if
(
this
.
mutation
Observer
)
{
this
.
mutation
Observer
.
disconnect
();
this
.
mutation
Observer
=
null
;
if
(
this
.
resize
Observer
)
{
this
.
resize
Observer
.
disconnect
();
this
.
resize
Observer
=
null
;
}
if
(
this
.
windowSizeListener
)
{
this
.
windowSizeListener
.
dispose
(
);
this
.
windowSizeListener
=
null
;
if
(
this
.
measureReferenceDomElementToken
!==
-
1
)
{
clearInterval
(
this
.
measureReferenceDomElementToken
);
this
.
measureReferenceDomElementToken
=
-
1
;
}
}
...
...
@@ -67,14 +100,6 @@ export class ElementSizeObserver extends Disposable {
this
.
measureReferenceDomElement
(
true
,
dimension
);
}
private
_onDidMutate
():
void
{
this
.
measureReferenceDomElement
(
true
);
}
private
_onDidResizeWindow
():
void
{
this
.
measureReferenceDomElement
(
true
);
}
private
measureReferenceDomElement
(
callChangeCallback
:
boolean
,
dimension
?:
IDimension
):
void
{
let
observedWidth
=
0
;
let
observedHeight
=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录