Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
9cdba608
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,发现更多精彩内容 >>
提交
9cdba608
编写于
2月 16, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Keep track of last rendered data
上级
4d010f7b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
60 addition
and
28 deletion
+60
-28
src/vs/editor/browser/viewParts/minimap/minimap.ts
src/vs/editor/browser/viewParts/minimap/minimap.ts
+60
-28
未找到文件。
src/vs/editor/browser/viewParts/minimap/minimap.ts
浏览文件 @
9cdba608
...
...
@@ -94,8 +94,6 @@ class MinimapOptions {
class
MinimapLayout
{
public
readonly
viewportStartLineNumber
:
number
;
/**
* slider dom node top (in CSS px)
*/
...
...
@@ -115,7 +113,7 @@ class MinimapLayout {
public
readonly
endLineNumber
:
number
;
constructor
(
prevLayout
:
MinimapLayout
,
lastRenderData
:
RenderData
,
options
:
MinimapOptions
,
viewportStartLineNumber
:
number
,
viewportEndLineNumber
:
number
,
...
...
@@ -157,18 +155,18 @@ class MinimapLayout {
// Aligning the slider's centers can result (correctly) in tremor.
// i.e. scrolling down might result in the startLineNumber going up.
// Avoid this tremor by being consistent w.r.t. the previous computed result
if
(
prevLayout
)
{
if
(
prevLayout
.
viewportStartLineNumber
<=
viewportStartLineNumber
)
{
if
(
lastRenderData
)
{
if
(
lastRenderData
.
viewportStartLineNumber
<=
viewportStartLineNumber
)
{
// going down => make sure we don't go above our previous decision
if
(
desiredStartLineNumber
<
prevLayout
.
startLineNumber
)
{
desiredStartLineNumber
=
prevLayout
.
startLineNumber
;
if
(
desiredStartLineNumber
<
lastRenderData
.
startLineNumber
)
{
desiredStartLineNumber
=
lastRenderData
.
startLineNumber
;
desiredEndLineNumber
=
desiredStartLineNumber
+
minimapLinesFitting
-
1
;
}
}
if
(
prevLayout
.
viewportStartLineNumber
>=
viewportStartLineNumber
)
{
if
(
lastRenderData
.
viewportStartLineNumber
>=
viewportStartLineNumber
)
{
// going up => make sure we don't go below our previous decision
if
(
desiredEndLineNumber
>
prevLayout
.
endLineNumber
)
{
desiredEndLineNumber
=
prevLayout
.
endLineNumber
;
if
(
desiredEndLineNumber
>
lastRenderData
.
endLineNumber
)
{
desiredEndLineNumber
=
lastRenderData
.
endLineNumber
;
desiredStartLineNumber
=
desiredEndLineNumber
-
minimapLinesFitting
+
1
;
}
}
...
...
@@ -208,7 +206,38 @@ class MinimapLayout {
this
.
sliderTop
=
Math
.
floor
((
viewportStartLineNumber
-
this
.
startLineNumber
)
*
minimapLineHeight
/
pixelRatio
);
this
.
sliderHeight
=
Math
.
floor
(
viewportLineCount
*
minimapLineHeight
/
pixelRatio
);
}
}
class
RenderData
{
/**
* editor viewport start line number.
*/
public
readonly
viewportStartLineNumber
:
number
;
/**
* editor viewport end line number.
*/
public
readonly
viewportEndLineNumber
:
number
;
/**
* minimap render start line number.
*/
public
readonly
startLineNumber
:
number
;
/**
* minimap render end line number.
*/
public
readonly
endLineNumber
:
number
;
constructor
(
viewportStartLineNumber
:
number
,
viewportEndLineNumber
:
number
,
startLineNumber
:
number
,
endLineNumber
:
number
)
{
this
.
viewportStartLineNumber
=
viewportStartLineNumber
;
this
.
viewportEndLineNumber
=
viewportEndLineNumber
;
this
.
startLineNumber
=
startLineNumber
;
this
.
endLineNumber
=
endLineNumber
;
}
}
...
...
@@ -226,7 +255,7 @@ export class Minimap extends ViewPart {
private
readonly
_minimapCharRenderer
:
MinimapCharRenderer
;
private
_options
:
MinimapOptions
;
private
_last
Layout
:
MinimapLayout
;
private
_last
RenderData
:
RenderData
;
private
_backgroundFillData
:
Uint8ClampedArray
;
constructor
(
context
:
ViewContext
,
viewLayout
:
IViewLayout
,
editorScrollbar
:
EditorScrollbar
)
{
...
...
@@ -235,7 +264,7 @@ export class Minimap extends ViewPart {
this
.
_editorScrollbar
=
editorScrollbar
;
this
.
_options
=
new
MinimapOptions
(
this
.
_context
.
configuration
);
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
this
.
_backgroundFillData
=
null
;
this
.
_domNode
=
createFastDomNode
(
document
.
createElement
(
'
div
'
));
...
...
@@ -315,22 +344,22 @@ export class Minimap extends ViewPart {
return
false
;
}
this
.
_options
=
opts
;
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
this
.
_applyLayout
();
return
true
;
}
public
onLineMappingChanged
():
boolean
{
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
return
true
;
}
public
onModelFlushed
():
boolean
{
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
return
true
;
}
public
onModelLinesDeleted
(
e
:
editorCommon
.
IViewLinesDeletedEvent
):
boolean
{
// TODO@minimap: only do so when the lines are painted in the minimap
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
return
true
;
}
public
onModelLineChanged
(
e
:
editorCommon
.
IViewLineChangedEvent
):
boolean
{
...
...
@@ -339,7 +368,7 @@ export class Minimap extends ViewPart {
}
public
onModelLinesInserted
(
e
:
editorCommon
.
IViewLinesInsertedEvent
):
boolean
{
// TODO@minimap: only do so when the lines are painted in the minimap
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
return
true
;
}
public
onModelTokensChanged
(
e
:
editorCommon
.
IViewTokensChangedEvent
):
boolean
{
...
...
@@ -356,7 +385,7 @@ export class Minimap extends ViewPart {
return
e
.
scrollTopChanged
||
e
.
scrollHeightChanged
;
}
public
onZonesChanged
():
boolean
{
this
.
_last
Layout
=
null
;
this
.
_last
RenderData
=
null
;
return
true
;
}
...
...
@@ -381,8 +410,8 @@ export class Minimap extends ViewPart {
const
minimapLineHeight
=
(
renderMinimap
===
RenderMinimap
.
Large
?
Constants
.
x2_CHAR_HEIGHT
:
Constants
.
x1_CHAR_HEIGHT
);
const
charWidth
=
(
renderMinimap
===
RenderMinimap
.
Large
?
Constants
.
x2_CHAR_WIDTH
:
Constants
.
x1_CHAR_WIDTH
);
this
.
_lastL
ayout
=
new
MinimapLayout
(
this
.
_last
Layout
,
const
l
ayout
=
new
MinimapLayout
(
this
.
_last
RenderData
,
this
.
_options
,
renderingCtx
.
visibleRange
.
startLineNumber
,
renderingCtx
.
visibleRange
.
endLineNumber
,
...
...
@@ -391,12 +420,11 @@ export class Minimap extends ViewPart {
this
.
_editorScrollbar
.
getVerticalSliderVerticalCenter
()
);
this
.
_slider
.
setTop
(
this
.
_lastLayout
.
sliderTop
);
this
.
_slider
.
setHeight
(
this
.
_lastLayout
.
sliderHeight
);
const
startLineNumber
=
this
.
_lastLayout
.
startLineNumber
;
const
endLineNumber
=
this
.
_lastLayout
.
endLineNumber
;
this
.
_slider
.
setTop
(
layout
.
sliderTop
);
this
.
_slider
.
setHeight
(
layout
.
sliderHeight
);
const
startLineNumber
=
layout
.
startLineNumber
;
const
endLineNumber
=
layout
.
endLineNumber
;
// Prepare image data (fill with background color)
let
imageData
=
ctx
.
createImageData
(
WIDTH
,
HEIGHT
);
...
...
@@ -404,15 +432,12 @@ export class Minimap extends ViewPart {
let
background
=
this
.
_tokensColorTracker
.
getColor
(
ColorId
.
DefaultBackground
);
let
start
=
performance
.
now
();
let
needed
:
boolean
[]
=
[];
for
(
let
lineNumber
=
startLineNumber
;
lineNumber
<=
endLineNumber
;
lineNumber
++
)
{
needed
[
lineNumber
-
startLineNumber
]
=
true
;
}
const
data2
=
this
.
_context
.
model
.
getMinimapLinesRenderingData
(
startLineNumber
,
endLineNumber
,
needed
);
const
tabSize
=
data2
.
tabSize
;
let
end
=
performance
.
now
();
console
.
log
(
`FETCHING MINIMAP DATA TOOK
${
end
-
start
}
ms.`
);
// let start2 = performance.now();
let
dy
=
0
;
...
...
@@ -423,6 +448,13 @@ export class Minimap extends ViewPart {
// let end2 = performance.now();
// console.log(`PAINTING MINIMAP TOOK ${end2 - start2} ms.`);
this
.
_lastRenderData
=
new
RenderData
(
renderingCtx
.
visibleRange
.
startLineNumber
,
renderingCtx
.
visibleRange
.
endLineNumber
,
startLineNumber
,
endLineNumber
);
ctx
.
putImageData
(
imageData
,
0
,
0
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录