Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
972de415
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
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,发现更多精彩内容 >>
提交
972de415
编写于
7月 10, 2019
作者:
J
Joao Moreno
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
splitview: snap out behaviour
上级
89397197
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
9 deletion
+53
-9
src/vs/base/browser/ui/splitview/splitview.ts
src/vs/base/browser/ui/splitview/splitview.ts
+48
-4
test/splitview/public/index.html
test/splitview/public/index.html
+5
-5
未找到文件。
src/vs/base/browser/ui/splitview/splitview.ts
浏览文件 @
972de415
...
...
@@ -47,6 +47,7 @@ export interface IView {
readonly
maximumSize
:
number
;
readonly
onDidChange
:
Event
<
number
|
undefined
>
;
readonly
priority
?:
LayoutPriority
;
readonly
snap
?:
boolean
;
layout
(
size
:
number
,
orientation
:
Orientation
):
void
;
setVisible
?(
visible
:
boolean
):
void
;
}
...
...
@@ -97,6 +98,7 @@ abstract class ViewItem {
get
minimumSize
():
number
{
return
this
.
visible
?
this
.
view
.
minimumSize
:
0
;
}
get
maximumSize
():
number
{
return
this
.
visible
?
this
.
view
.
maximumSize
:
0
;
}
get
priority
():
LayoutPriority
|
undefined
{
return
this
.
view
.
priority
;
}
get
snap
():
boolean
{
return
!!
this
.
view
.
snap
;
}
constructor
(
protected
container
:
HTMLElement
,
private
view
:
IView
,
private
_size
:
number
,
private
disposable
:
IDisposable
)
{
dom
.
addClass
(
container
,
'
visible
'
);
...
...
@@ -143,6 +145,8 @@ interface ISashDragState {
minDelta
:
number
;
maxDelta
:
number
;
alt
:
boolean
;
snapIndex
:
number
|
undefined
;
snapLimitDelta
:
number
|
undefined
;
disposable
:
IDisposable
;
}
...
...
@@ -480,18 +484,40 @@ export class SplitView extends Disposable {
}
}
this
.
sashDragState
=
{
start
,
current
:
start
,
index
,
sizes
,
minDelta
,
maxDelta
,
alt
,
disposable
};
let
snapIndex
:
number
|
undefined
;
let
snapLimitDelta
:
number
|
undefined
;
if
(
!
alt
)
{
const
upIndexes
=
range
(
index
,
-
1
);
const
downIndexes
=
range
(
index
+
1
,
this
.
viewItems
.
length
);
const
minDeltaUp
=
upIndexes
.
reduce
((
r
,
i
)
=>
r
+
(
this
.
viewItems
[
i
].
minimumSize
-
sizes
[
i
]),
0
);
const
maxDeltaUp
=
upIndexes
.
reduce
((
r
,
i
)
=>
r
+
(
this
.
viewItems
[
i
].
maximumSize
-
sizes
[
i
]),
0
);
const
maxDeltaDown
=
downIndexes
.
length
===
0
?
Number
.
POSITIVE_INFINITY
:
downIndexes
.
reduce
((
r
,
i
)
=>
r
+
(
sizes
[
i
]
-
this
.
viewItems
[
i
].
minimumSize
),
0
);
const
minDeltaDown
=
downIndexes
.
length
===
0
?
Number
.
NEGATIVE_INFINITY
:
downIndexes
.
reduce
((
r
,
i
)
=>
r
+
(
sizes
[
i
]
-
this
.
viewItems
[
i
].
maximumSize
),
0
);
const
minDelta
=
Math
.
max
(
minDeltaUp
,
minDeltaDown
);
const
maxDelta
=
Math
.
min
(
maxDeltaDown
,
maxDeltaUp
);
if
(
this
.
viewItems
[
index
].
snap
)
{
snapIndex
=
index
;
snapLimitDelta
=
minDelta
-
(
this
.
viewItems
[
index
].
minimumSize
/
2
);
}
else
if
(
this
.
viewItems
[
index
+
1
].
snap
)
{
snapIndex
=
index
+
1
;
snapLimitDelta
=
maxDelta
+
(
this
.
viewItems
[
index
+
1
].
minimumSize
/
2
);
}
}
this
.
sashDragState
=
{
start
,
current
:
start
,
index
,
sizes
,
minDelta
,
maxDelta
,
alt
,
snapIndex
,
snapLimitDelta
,
disposable
};
};
resetSashDragState
(
start
,
alt
);
}
private
onSashChange
({
current
}:
ISashEvent
):
void
{
const
{
index
,
start
,
sizes
,
alt
,
minDelta
,
maxDelta
}
=
this
.
sashDragState
;
const
{
index
,
start
,
sizes
,
alt
,
minDelta
,
maxDelta
,
snapIndex
,
snapLimitDelta
}
=
this
.
sashDragState
;
this
.
sashDragState
.
current
=
current
;
const
delta
=
current
-
start
;
const
newDelta
=
this
.
resize
(
index
,
delta
,
sizes
,
undefined
,
undefined
,
minDelta
,
maxDelta
);
const
newDelta
=
this
.
resize
(
index
,
delta
,
sizes
,
undefined
,
undefined
,
minDelta
,
maxDelta
,
snapIndex
,
snapLimitDelta
);
if
(
alt
)
{
const
isLastSash
=
index
===
this
.
sashItems
.
length
-
1
;
...
...
@@ -601,7 +627,9 @@ export class SplitView extends Disposable {
lowPriorityIndexes
?:
number
[],
highPriorityIndexes
?:
number
[],
overloadMinDelta
:
number
=
Number
.
NEGATIVE_INFINITY
,
overloadMaxDelta
:
number
=
Number
.
POSITIVE_INFINITY
overloadMaxDelta
:
number
=
Number
.
POSITIVE_INFINITY
,
snapIndex
?:
number
,
snapLimitDelta
?:
number
):
number
{
if
(
index
<
0
||
index
>=
this
.
viewItems
.
length
)
{
return
0
;
...
...
@@ -637,6 +665,22 @@ export class SplitView extends Disposable {
const
minDelta
=
Math
.
max
(
minDeltaUp
,
minDeltaDown
,
overloadMinDelta
);
const
maxDelta
=
Math
.
min
(
maxDeltaDown
,
maxDeltaUp
,
overloadMaxDelta
);
if
(
typeof
snapIndex
===
'
number
'
&&
typeof
snapLimitDelta
===
'
number
'
)
{
const
snapView
=
this
.
viewItems
[
snapIndex
];
if
(
snapIndex
===
index
)
{
// up
if
(
delta
>=
snapLimitDelta
)
{
snapView
.
visible
=
true
;
}
else
{
snapView
.
visible
=
false
;
}
}
else
{
// down
snapView
.
visible
=
delta
<
snapLimitDelta
;
}
return
this
.
resize
(
index
,
delta
,
sizes
,
lowPriorityIndexes
,
highPriorityIndexes
,
overloadMinDelta
,
overloadMaxDelta
);
}
delta
=
clamp
(
delta
,
minDelta
,
maxDelta
);
for
(
let
i
=
0
,
deltaUp
=
delta
;
i
<
upItems
.
length
;
i
++
)
{
...
...
test/splitview/public/index.html
浏览文件 @
972de415
...
...
@@ -36,7 +36,7 @@
class
View
{
static
ID
=
0
;
constructor
()
{
constructor
(
snap
)
{
this
.
element
=
document
.
createElement
(
'
div
'
);
this
.
element
.
className
=
'
view
'
;
this
.
element
.
style
.
backgroundColor
=
`hsl(
${
rand
(
1
,
360
)}
, 50%, 70%)`
;
...
...
@@ -44,7 +44,7 @@
this
.
minimumSize
=
100
;
this
.
maximumSize
=
Number
.
POSITIVE_INFINITY
;
this
.
onDidChange
=
Event
.
None
;
this
.
snap
=
true
;
this
.
snap
=
snap
;
}
layout
(
size
,
orientation
)
{
...
...
@@ -56,9 +56,9 @@
const
splitview
=
new
SplitView
(
container
,
{});
splitview
.
layout
(
600
);
const
view1
=
new
View
();
const
view2
=
new
View
();
const
view3
=
new
View
();
const
view1
=
new
View
(
true
);
const
view2
=
new
View
(
false
);
const
view3
=
new
View
(
true
);
splitview
.
addView
(
view1
,
Sizing
.
Distribute
);
splitview
.
addView
(
view2
,
Sizing
.
Distribute
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录