Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
31a42937
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,发现更多精彩内容 >>
提交
31a42937
编写于
6月 06, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move slider position computation into ScrollbarState (#6710)
上级
7b9679d2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
43 addition
and
13 deletion
+43
-13
src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts
src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts
+13
-12
src/vs/base/browser/ui/scrollbar/scrollbarState.ts
src/vs/base/browser/ui/scrollbar/scrollbarState.ts
+30
-1
未找到文件。
src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts
浏览文件 @
31a42937
...
...
@@ -197,31 +197,32 @@ export abstract class AbstractScrollbar extends Widget {
private
_onMouseDown
(
e
:
IMouseEvent
):
void
{
let
domNodePosition
=
DomUtils
.
getDomNodePagePosition
(
this
.
domNode
.
domNode
);
let
desiredSliderPosition
=
this
.
_mouseDownRelativePosition
(
e
,
domNodePosition
)
-
this
.
_scrollbarState
.
getArrowSize
()
-
this
.
_scrollbarState
.
getSliderSize
()
/
2
;
this
.
setDesiredScrollPosition
(
this
.
_scrollbarState
.
convertSliderPositionToScrollPosition
(
desiredSliderPosition
));
this
.
setDesiredScrollPosition
(
this
.
_scrollbarState
.
getDesiredScrollPositionFromOffset
(
this
.
_mouseDownRelativePosition
(
e
,
domNodePosition
)));
this
.
_sliderMouseDown
(
e
);
}
private
_sliderMouseDown
(
e
:
IMouseEvent
):
void
{
if
(
e
.
leftButton
)
{
let
initialMouseOrthogonalPosition
=
this
.
_sliderOrthogonal
MousePosition
(
e
);
let
initialScrollPosition
=
this
.
_getScrollPosition
(
);
let
draggingDelta
=
this
.
_sliderMousePosition
(
e
)
-
this
.
_scrollbarState
.
getSliderPosition
();
const
initialMousePosition
=
this
.
_slider
MousePosition
(
e
);
const
initialMouseOrthogonalPosition
=
this
.
_sliderOrthogonalMousePosition
(
e
);
const
initialScrollbarState
=
this
.
_scrollbarState
.
clone
();
this
.
slider
.
toggleClassName
(
'
active
'
,
true
);
this
.
_mouseMoveMonitor
.
startMonitoring
(
standardMouseMoveMerger
,
(
mouseMoveData
:
IStandardMouseMoveEventData
)
=>
{
le
t
mouseOrthogonalPosition
=
this
.
_sliderOrthogonalMousePosition
(
mouseMoveData
);
le
t
mouseOrthogonalDelta
=
Math
.
abs
(
mouseOrthogonalPosition
-
initialMouseOrthogonalPosition
);
// console.log(initialMouseOrthogonalPosition + ' -> ' + mouseOrthogonalPosition + ': ' + mouseOrthogonalDelta);
cons
t
mouseOrthogonalPosition
=
this
.
_sliderOrthogonalMousePosition
(
mouseMoveData
);
cons
t
mouseOrthogonalDelta
=
Math
.
abs
(
mouseOrthogonalPosition
-
initialMouseOrthogonalPosition
);
if
(
Platform
.
isWindows
&&
mouseOrthogonalDelta
>
MOUSE_DRAG_RESET_DISTANCE
)
{
// The mouse has wondered away from the scrollbar => reset dragging
this
.
setDesiredScrollPosition
(
initialScrollPosition
);
}
else
{
let
desiredSliderPosition
=
this
.
_sliderMousePosition
(
mouseMoveData
)
-
draggingDelta
;
this
.
setDesiredScrollPosition
(
this
.
_scrollbarState
.
convertSliderPositionToScrollPosition
(
desiredSliderPosition
));
this
.
setDesiredScrollPosition
(
initialScrollbarState
.
getScrollPosition
());
return
;
}
const
mousePosition
=
this
.
_sliderMousePosition
(
mouseMoveData
);
const
mouseDelta
=
mousePosition
-
initialMousePosition
;
this
.
setDesiredScrollPosition
(
initialScrollbarState
.
getDesiredScrollPositionFromDelta
(
mouseDelta
));
},
()
=>
{
this
.
slider
.
toggleClassName
(
'
active
'
,
false
);
...
...
src/vs/base/browser/ui/scrollbar/scrollbarState.ts
浏览文件 @
31a42937
...
...
@@ -92,6 +92,14 @@ export class ScrollbarState {
this
.
_refreshComputedValues
();
}
public
clone
():
ScrollbarState
{
let
r
=
new
ScrollbarState
(
this
.
_arrowSize
,
this
.
_scrollbarSize
,
this
.
_oppositeScrollbarSize
);
r
.
setVisibleSize
(
this
.
_visibleSize
);
r
.
setScrollSize
(
this
.
_scrollSize
);
r
.
setScrollPosition
(
this
.
_scrollPosition
);
return
r
;
}
public
setVisibleSize
(
visibleSize
:
number
):
boolean
{
let
iVisibleSize
=
Math
.
round
(
visibleSize
);
if
(
this
.
_visibleSize
!==
iVisibleSize
)
{
...
...
@@ -178,6 +186,10 @@ export class ScrollbarState {
return
this
.
_arrowSize
;
}
public
getScrollPosition
():
number
{
return
this
.
_scrollPosition
;
}
public
getRectangleLargeSize
():
number
{
return
this
.
_computedAvailableSize
;
}
...
...
@@ -202,7 +214,24 @@ export class ScrollbarState {
return
(
this
.
_computedSliderPosition
+
this
.
_computedSliderSize
/
2
);
}
p
ublic
convertSliderPositionToScrollPosition
(
desiredSliderPosition
:
number
):
number
{
p
rivate
_
convertSliderPositionToScrollPosition
(
desiredSliderPosition
:
number
):
number
{
return
desiredSliderPosition
/
this
.
_computedRatio
;
}
/**
* Compute a desired `scrollPosition` such that `offset` ends up in the center of the slider.
* `offset` is based on the same coordinate system as the `sliderPosition`.
*/
public
getDesiredScrollPositionFromOffset
(
offset
:
number
):
number
{
let
desiredSliderPosition
=
offset
-
this
.
_arrowSize
-
this
.
_computedSliderSize
/
2
;
return
this
.
_convertSliderPositionToScrollPosition
(
desiredSliderPosition
);
}
/**
* Compute a desired `scrollPosition` such that the slider moves by `delta`.
*/
public
getDesiredScrollPositionFromDelta
(
delta
:
number
):
number
{
let
desiredSliderPosition
=
this
.
_computedSliderPosition
+
delta
;
return
this
.
_convertSliderPositionToScrollPosition
(
desiredSliderPosition
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录