Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
c128c6f6
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c128c6f6
编写于
3月 30, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Clean up horizontal reveal sequence, do not touch the DOM in onScrollHeightChanged
上级
78569ff6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
63 addition
and
37 deletion
+63
-37
src/vs/base/browser/styleMutator.ts
src/vs/base/browser/styleMutator.ts
+10
-2
src/vs/editor/browser/view/viewImpl.ts
src/vs/editor/browser/view/viewImpl.ts
+15
-7
src/vs/editor/browser/view/viewOverlays.ts
src/vs/editor/browser/view/viewOverlays.ts
+13
-15
src/vs/editor/browser/viewParts/lines/viewLines.ts
src/vs/editor/browser/viewParts/lines/viewLines.ts
+25
-13
未找到文件。
src/vs/base/browser/styleMutator.ts
浏览文件 @
c128c6f6
...
...
@@ -226,13 +226,17 @@ export const StyleMutator = {
let
desiredValue
=
top
+
'
px
'
;
if
(
domNode
.
style
.
top
!==
desiredValue
)
{
domNode
.
style
.
top
=
desiredValue
;
return
true
;
}
return
false
;
},
setLeft
:
(
domNode
:
HTMLElement
,
left
:
number
)
=>
{
let
desiredValue
=
left
+
'
px
'
;
if
(
domNode
.
style
.
left
!==
desiredValue
)
{
domNode
.
style
.
left
=
desiredValue
;
return
true
;
}
return
false
;
},
setBottom
:
(
domNode
:
HTMLElement
,
bottom
:
number
)
=>
{
let
desiredValue
=
bottom
+
'
px
'
;
...
...
@@ -272,17 +276,21 @@ export const StyleMutator = {
};
// Define setTransform
function
setWebkitTransform
(
domNode
:
HTMLElement
,
desiredValue
:
string
):
void
{
function
setWebkitTransform
(
domNode
:
HTMLElement
,
desiredValue
:
string
):
boolean
{
if
(
domNode
.
getAttribute
(
'
data-transform
'
)
!==
desiredValue
)
{
domNode
.
setAttribute
(
'
data-transform
'
,
desiredValue
);
(
<
any
>
domNode
.
style
).
webkitTransform
=
desiredValue
;
return
true
;
}
return
false
;
}
function
setTransform
(
domNode
:
HTMLElement
,
desiredValue
:
string
):
void
{
function
setTransform
(
domNode
:
HTMLElement
,
desiredValue
:
string
):
boolean
{
if
(
domNode
.
getAttribute
(
'
data-transform
'
)
!==
desiredValue
)
{
domNode
.
setAttribute
(
'
data-transform
'
,
desiredValue
);
domNode
.
style
.
transform
=
desiredValue
;
return
true
;
}
return
false
;
}
(
function
()
{
let
testDomNode
=
document
.
createElement
(
'
div
'
);
...
...
src/vs/editor/browser/view/viewImpl.ts
浏览文件 @
c128c6f6
...
...
@@ -868,19 +868,24 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
return
r
;
}
private
_getViewPartsToRender
():
ViewPart
[]
{
let
result
:
ViewPart
[]
=
[];
for
(
let
i
=
0
,
len
=
this
.
viewParts
.
length
;
i
<
len
;
i
++
)
{
let
viewPart
=
this
.
viewParts
[
i
];
if
(
viewPart
.
shouldRender
())
{
result
.
push
(
viewPart
);
}
}
return
result
;
}
private
_actualRender
():
void
{
if
(
!
dom
.
isInDOM
(
this
.
domNode
))
{
return
;
}
let
t
=
timer
.
start
(
timer
.
Topic
.
EDITOR
,
'
View.render
'
);
let
viewPartsToRender
:
ViewPart
[]
=
[];
for
(
let
i
=
0
,
len
=
this
.
viewParts
.
length
;
i
<
len
;
i
++
)
{
let
viewPart
=
this
.
viewParts
[
i
];
if
(
viewPart
.
shouldRender
())
{
viewPartsToRender
.
push
(
viewPart
);
}
}
let
viewPartsToRender
=
this
.
_getViewPartsToRender
();
if
(
!
this
.
viewLines
.
shouldRender
()
&&
viewPartsToRender
.
length
===
0
)
{
// Nothing to render
...
...
@@ -893,6 +898,9 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
if
(
this
.
viewLines
.
shouldRender
())
{
this
.
viewLines
.
renderText
(
linesViewportData
);
this
.
viewLines
.
onDidRender
();
// Rendering of viewLines might cause scroll events to occur, so collect view parts to render again
viewPartsToRender
=
this
.
_getViewPartsToRender
();
}
let
renderingContext
=
this
.
createRenderingContext
(
linesViewportData
);
...
...
src/vs/editor/browser/view/viewOverlays.ts
浏览文件 @
c128c6f6
...
...
@@ -219,13 +219,15 @@ export class MarginViewOverlays extends ViewOverlays {
private
_glyphMarginLeft
:
number
;
private
_glyphMarginWidth
:
number
;
private
_scrollHeight
:
number
;
private
_contentLeft
:
number
;
constructor
(
context
:
editorBrowser
.
IViewContext
,
layoutProvider
:
editorBrowser
.
ILayoutProvider
)
{
super
(
context
,
layoutProvider
);
this
.
_glyphMarginLeft
=
0
;
this
.
_glyphMarginWidth
=
0
;
this
.
_glyphMarginLeft
=
context
.
configuration
.
editor
.
layoutInfo
.
glyphMarginLeft
;
this
.
_glyphMarginWidth
=
context
.
configuration
.
editor
.
layoutInfo
.
glyphMarginWidth
;
this
.
_scrollHeight
=
layoutProvider
.
getScrollHeight
();
this
.
_contentLeft
=
context
.
configuration
.
editor
.
layoutInfo
.
contentLeft
;
this
.
domNode
.
setClassName
(
editorBrowser
.
ClassNames
.
MARGIN_VIEW_OVERLAYS
+
'
monaco-editor-background
'
);
this
.
domNode
.
setWidth
(
1
);
...
...
@@ -251,10 +253,6 @@ export class MarginViewOverlays extends ViewOverlays {
public
onScrollHeightChanged
(
scrollHeight
:
number
):
boolean
{
this
.
_scrollHeight
=
scrollHeight
;
var
glyphMargin
=
this
.
_getGlyphMarginDomNode
();
if
(
glyphMargin
)
{
StyleMutator
.
setHeight
(
glyphMargin
,
this
.
_scrollHeight
);
}
return
super
.
onScrollHeightChanged
(
scrollHeight
)
||
true
;
}
...
...
@@ -262,15 +260,7 @@ export class MarginViewOverlays extends ViewOverlays {
this
.
_glyphMarginLeft
=
layoutInfo
.
glyphMarginLeft
;
this
.
_glyphMarginWidth
=
layoutInfo
.
glyphMarginWidth
;
this
.
_scrollHeight
=
this
.
_layoutProvider
.
getScrollHeight
();
this
.
domNode
.
setWidth
(
layoutInfo
.
contentLeft
);
var
glyphMargin
=
this
.
_getGlyphMarginDomNode
();
if
(
glyphMargin
)
{
StyleMutator
.
setLeft
(
glyphMargin
,
layoutInfo
.
glyphMarginLeft
);
StyleMutator
.
setWidth
(
glyphMargin
,
layoutInfo
.
glyphMarginWidth
);
}
this
.
_contentLeft
=
layoutInfo
.
contentLeft
;
return
super
.
onLayoutChanged
(
layoutInfo
)
||
true
;
}
...
...
@@ -284,5 +274,13 @@ export class MarginViewOverlays extends ViewOverlays {
}
var
height
=
Math
.
min
(
this
.
_layoutProvider
.
getTotalHeight
(),
1000000
);
this
.
domNode
.
setHeight
(
height
);
this
.
domNode
.
setWidth
(
this
.
_contentLeft
);
var
glyphMargin
=
this
.
_getGlyphMarginDomNode
();
if
(
glyphMargin
)
{
StyleMutator
.
setHeight
(
glyphMargin
,
this
.
_scrollHeight
);
StyleMutator
.
setLeft
(
glyphMargin
,
this
.
_glyphMarginLeft
);
StyleMutator
.
setWidth
(
glyphMargin
,
this
.
_glyphMarginWidth
);
}
}
}
\ No newline at end of file
src/vs/editor/browser/viewParts/lines/viewLines.ts
浏览文件 @
c128c6f6
...
...
@@ -140,6 +140,7 @@ export class ViewLines extends ViewLayer {
public
onLayoutChanged
(
layoutInfo
:
editorCommon
.
IEditorLayoutInfo
):
boolean
{
var
shouldRender
=
super
.
onLayoutChanged
(
layoutInfo
);
this
.
_maxLineWidth
=
0
;
this
.
_lastRenderedData
.
resetDomNodeClientRectLeft
();
return
shouldRender
;
}
...
...
@@ -379,39 +380,50 @@ export class ViewLines extends ViewLayer {
throw
new
Error
(
'
I did not ask to render!
'
);
}
// (1) render lines - ensures lines are in the DOM
super
.
_renderLines
(
linesViewportData
);
this
.
onDidRender
();
this
.
_lastRenderedData
.
setBigNumbersDelta
(
linesViewportData
.
bigNumbersDelta
);
this
.
_lastRenderedData
.
setCurrentVisibleRange
(
linesViewportData
.
visibleRange
);
this
.
_lastRenderedData
.
resetDomNodeClientRectLeft
();
this
.
domNode
.
setWidth
(
this
.
_layoutProvider
.
getScrollWidth
());
this
.
domNode
.
setHeight
(
Math
.
min
(
this
.
_layoutProvider
.
getTotalHeight
(),
1000000
));
// (2) compute horizontal scroll position:
// - this must happen after the lines are in the DOM since it might need a line that rendered just now
// - it might change `scrollWidth` and `scrollLeft`
if
(
this
.
_lastCursorRevealRangeHorizontallyEvent
)
{
var
newScrollLeft
=
this
.
_computeScrollLeftToRevealRange
(
this
.
_lastCursorRevealRangeHorizontallyEvent
.
range
)
;
let
revealHorizontalRange
=
this
.
_lastCursorRevealRangeHorizontallyEvent
.
range
;
this
.
_lastCursorRevealRangeHorizontallyEvent
=
null
;
// allow `visibleRangesForRange2` to work
this
.
onDidRender
();
// compute new scroll position
var
newScrollLeft
=
this
.
_computeScrollLeftToRevealRange
(
revealHorizontalRange
);
var
isViewportWrapping
=
this
.
_isViewportWrapping
;
if
(
!
isViewportWrapping
)
{
// ensure `scrollWidth` is large enough
this
.
_ensureMaxLineWidth
(
newScrollLeft
.
maxHorizontalOffset
);
}
// set `scrollLeft`
this
.
_layoutProvider
.
setScrollLeft
(
newScrollLeft
.
scrollLeft
);
}
// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)
this
.
_asyncUpdateLineWidths
.
schedule
();
let
somethingChanged
=
false
;
if
(
browser
.
canUseTranslate3d
)
{
var
transform
=
'
translate3d(
'
+
-
this
.
_layoutProvider
.
getScrollLeft
()
+
'
px,
'
+
linesViewportData
.
visibleRangesDeltaTop
+
'
px, 0px)
'
;
StyleMutator
.
setTransform
(
<
HTMLElement
>
this
.
domNode
.
domNode
.
parentNode
,
transform
)
;
// TODO@Alex
somethingChanged
=
StyleMutator
.
setTransform
(
<
HTMLElement
>
this
.
domNode
.
domNode
.
parentNode
,
transform
)
||
somethingChanged
;
// TODO@Alex
}
else
{
StyleMutator
.
setTop
(
<
HTMLElement
>
this
.
domNode
.
domNode
.
parentNode
,
linesViewportData
.
visibleRangesDeltaTop
);
// TODO@Alex
StyleMutator
.
setLeft
(
<
HTMLElement
>
this
.
domNode
.
domNode
.
parentNode
,
-
this
.
_layoutProvider
.
getScrollLeft
());
// TODO@Alex
somethingChanged
=
StyleMutator
.
setTop
(
<
HTMLElement
>
this
.
domNode
.
domNode
.
parentNode
,
linesViewportData
.
visibleRangesDeltaTop
)
||
somethingChanged
;
// TODO@Alex
somethingChanged
=
StyleMutator
.
setLeft
(
<
HTMLElement
>
this
.
domNode
.
domNode
.
parentNode
,
-
this
.
_layoutProvider
.
getScrollLeft
())
||
somethingChanged
;
// TODO@Alex
}
if
(
somethingChanged
)
{
this
.
_lastRenderedData
.
resetDomNodeClientRectLeft
();
}
this
.
_lastRenderedData
.
resetDomNodeClientRectLeft
();
this
.
domNode
.
setWidth
(
this
.
_layoutProvider
.
getScrollWidth
());
this
.
domNode
.
setHeight
(
Math
.
min
(
this
.
_layoutProvider
.
getTotalHeight
(),
1000000
)
);
// Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)
this
.
_asyncUpdateLineWidths
.
schedule
(
);
}
// --- width
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录