Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
487f4dbe
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,发现更多精彩内容 >>
提交
487f4dbe
编写于
2月 04, 2017
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Introduce CoordinatesConverter
上级
3390f625
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
152 addition
and
135 deletion
+152
-135
src/vs/editor/browser/view/viewController.ts
src/vs/editor/browser/view/viewController.ts
+1
-1
src/vs/editor/browser/view/viewImpl.ts
src/vs/editor/browser/view/viewImpl.ts
+5
-6
src/vs/editor/browser/view/viewOutgoingEvents.ts
src/vs/editor/browser/view/viewOutgoingEvents.ts
+2
-2
src/vs/editor/browser/viewLayout/layoutProvider.ts
src/vs/editor/browser/viewLayout/layoutProvider.ts
+3
-4
src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts
...editor/browser/viewParts/contentWidgets/contentWidgets.ts
+2
-2
src/vs/editor/browser/viewParts/lines/viewLines.ts
src/vs/editor/browser/viewParts/lines/viewLines.ts
+2
-2
src/vs/editor/browser/viewParts/viewZones/viewZones.ts
src/vs/editor/browser/viewParts/viewZones/viewZones.ts
+2
-2
src/vs/editor/browser/widget/codeEditorWidget.ts
src/vs/editor/browser/widget/codeEditorWidget.ts
+0
-1
src/vs/editor/common/commonCodeEditor.ts
src/vs/editor/common/commonCodeEditor.ts
+8
-8
src/vs/editor/common/controller/textAreaHandler.ts
src/vs/editor/common/controller/textAreaHandler.ts
+1
-1
src/vs/editor/common/controller/textAreaState.ts
src/vs/editor/common/controller/textAreaState.ts
+4
-1
src/vs/editor/common/viewModel/viewModel.ts
src/vs/editor/common/viewModel/viewModel.ts
+19
-5
src/vs/editor/common/viewModel/viewModelDecorations.ts
src/vs/editor/common/viewModel/viewModelDecorations.ts
+10
-11
src/vs/editor/common/viewModel/viewModelImpl.ts
src/vs/editor/common/viewModel/viewModelImpl.ts
+81
-81
src/vs/editor/test/browser/controller/imeTester.ts
src/vs/editor/test/browser/controller/imeTester.ts
+6
-4
src/vs/editor/test/common/controller/textAreaState.test.ts
src/vs/editor/test/common/controller/textAreaState.test.ts
+6
-4
未找到文件。
src/vs/editor/browser/view/viewController.ts
浏览文件 @
487f4dbe
...
...
@@ -243,7 +243,7 @@ export class ViewController implements IViewController {
// ----------------------
private
convertViewToModelPosition
(
viewPosition
:
Position
):
Position
{
return
this
.
viewModel
.
convertViewPositionToModelPosition
(
viewPosition
.
lineNumber
,
viewPosition
.
column
);
return
this
.
viewModel
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
viewPosition
.
lineNumber
,
viewPosition
.
column
);
}
public
emitKeyDown
(
e
:
IKeyboardEvent
):
void
{
...
...
src/vs/editor/browser/view/viewImpl.ts
浏览文件 @
487f4dbe
...
...
@@ -588,7 +588,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
lineNumber
:
modelLineNumber
,
column
:
modelColumn
});
let
viewPosition
=
this
.
_context
.
model
.
convertModelPositionToViewPosition
(
modelPosition
.
lineNumber
,
modelPosition
.
column
);
let
viewPosition
=
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
modelPosition
.
lineNumber
,
modelPosition
.
column
);
return
this
.
layoutProvider
.
getVerticalOffsetForLineNumber
(
viewPosition
.
lineNumber
);
},
delegateVerticalScrollbarMouseDown
:
(
browserEvent
:
MouseEvent
)
=>
{
...
...
@@ -605,7 +605,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
lineNumber
:
modelLineNumber
,
column
:
modelColumn
});
let
viewPosition
=
this
.
_context
.
model
.
convertModelPositionToViewPosition
(
modelPosition
.
lineNumber
,
modelPosition
.
column
);
let
viewPosition
=
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
modelPosition
.
lineNumber
,
modelPosition
.
column
);
this
.
_flushAccumulatedAndRenderNow
();
let
visibleRanges
=
this
.
viewLines
.
visibleRangesForRange2
(
new
Range
(
viewPosition
.
lineNumber
,
viewPosition
.
column
,
viewPosition
.
lineNumber
,
viewPosition
.
column
),
0
);
if
(
!
visibleRanges
)
{
...
...
@@ -641,7 +641,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
this
.
_context
.
model
.
getLineMaxColumn
(
endLineNumber
)
);
return
this
.
_context
.
model
.
convertViewRangeToModelRange
(
completelyVisibleLinesRange
);
return
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertViewRangeToModelRange
(
completelyVisibleLinesRange
);
}
public
getInternalEventBus
():
IEventEmitter
{
...
...
@@ -723,17 +723,16 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
}
};
let
r
:
any
=
safeInvoke1Arg
(
callback
,
changeAccessor
);
safeInvoke1Arg
(
callback
,
changeAccessor
);
// Invalidate changeAccessor
changeAccessor
.
addZone
=
null
;
changeAccessor
.
removeZone
=
null
;
if
(
zonesHaveChanged
)
{
this
.
layoutProvider
.
onHeightMaybeChanged
();
this
.
_context
.
privateViewEventBus
.
emit
(
editorCommon
.
EventType
.
ViewZonesChanged
,
null
);
}
return
r
;
});
return
zonesHaveChanged
;
}
...
...
src/vs/editor/browser/view/viewOutgoingEvents.ts
浏览文件 @
487f4dbe
...
...
@@ -99,11 +99,11 @@ export class ViewOutgoingEvents extends Disposable {
}
private
_convertViewToModelPosition
(
viewPosition
:
Position
):
Position
{
return
this
.
_viewModel
.
convertViewPositionToModelPosition
(
viewPosition
.
lineNumber
,
viewPosition
.
column
);
return
this
.
_viewModel
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
viewPosition
.
lineNumber
,
viewPosition
.
column
);
}
private
_convertViewToModelRange
(
viewRange
:
Range
):
Range
{
return
this
.
_viewModel
.
convertViewRangeToModelRange
(
viewRange
);
return
this
.
_viewModel
.
co
ordinatesConverter
.
co
nvertViewRangeToModelRange
(
viewRange
);
}
}
...
...
src/vs/editor/browser/viewLayout/layoutProvider.ts
浏览文件 @
487f4dbe
...
...
@@ -135,13 +135,12 @@ export class LayoutProvider extends ViewEventHandler implements IDisposable, ILa
this
.
_configuration
.
setMaxLineNumber
(
this
.
_model
.
getMaxLineNumber
());
}
// ---- begin view event handlers
public
onZonesChanged
():
boolean
{
public
onHeightMaybeChanged
():
void
{
this
.
_updateHeight
();
return
false
;
}
// ---- begin view event handlers
public
onModelFlushed
():
boolean
{
this
.
_linesLayout
.
onModelFlushed
(
this
.
_model
.
getLineCount
());
this
.
_updateLineCount
();
...
...
src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts
浏览文件 @
487f4dbe
...
...
@@ -328,12 +328,12 @@ export class ViewContentWidgets extends ViewPart {
// Do not trust that widgets have a valid position
let
validModelPosition
=
this
.
_context
.
model
.
validateModelPosition
(
widgetData
.
position
);
if
(
!
this
.
_context
.
model
.
modelPositionIsVisible
(
validModelPosition
))
{
if
(
!
this
.
_context
.
model
.
coordinatesConverter
.
modelPositionIsVisible
(
validModelPosition
))
{
// this position is hidden by the view model
return
null
;
}
let
position
=
this
.
_context
.
model
.
convertModelPositionToViewPosition
(
validModelPosition
.
lineNumber
,
validModelPosition
.
column
);
let
position
=
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
validModelPosition
.
lineNumber
,
validModelPosition
.
column
);
let
placement
:
IBoxLayoutResult
=
null
;
let
fetchPlacement
=
()
=>
{
...
...
src/vs/editor/browser/viewParts/lines/viewLines.ts
浏览文件 @
487f4dbe
...
...
@@ -300,7 +300,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
let
nextLineModelLineNumber
:
number
;
if
(
includeNewLines
)
{
nextLineModelLineNumber
=
this
.
_context
.
model
.
convertViewPositionToModelPosition
(
range
.
startLineNumber
,
1
).
lineNumber
;
nextLineModelLineNumber
=
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
range
.
startLineNumber
,
1
).
lineNumber
;
}
let
rendStartLineNumber
=
this
.
_linesCollection
.
getStartLineNumber
();
...
...
@@ -321,7 +321,7 @@ export class ViewLines extends ViewLayer<ViewLine> implements IViewLines {
if
(
includeNewLines
&&
lineNumber
<
originalEndLineNumber
)
{
let
currentLineModelLineNumber
=
nextLineModelLineNumber
;
nextLineModelLineNumber
=
this
.
_context
.
model
.
convertViewPositionToModelPosition
(
lineNumber
+
1
,
1
).
lineNumber
;
nextLineModelLineNumber
=
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
lineNumber
+
1
,
1
).
lineNumber
;
if
(
currentLineModelLineNumber
!==
nextLineModelLineNumber
)
{
visibleRangesForLine
[
visibleRangesForLine
.
length
-
1
].
width
+=
ViewLines
.
LINE_FEED_WIDTH
;
...
...
src/vs/editor/browser/viewParts/viewZones/viewZones.ts
浏览文件 @
487f4dbe
...
...
@@ -178,8 +178,8 @@ export class ViewZones extends ViewPart {
});
}
let
viewPosition
=
this
.
_context
.
model
.
convertModelPositionToViewPosition
(
zoneAfterModelPosition
.
lineNumber
,
zoneAfterModelPosition
.
column
);
let
isVisible
=
this
.
_context
.
model
.
modelPositionIsVisible
(
zoneBeforeModelPosition
);
let
viewPosition
=
this
.
_context
.
model
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
zoneAfterModelPosition
.
lineNumber
,
zoneAfterModelPosition
.
column
);
let
isVisible
=
this
.
_context
.
model
.
coordinatesConverter
.
modelPositionIsVisible
(
zoneBeforeModelPosition
);
return
{
afterViewLineNumber
:
viewPosition
.
lineNumber
,
heightInPx
:
(
isVisible
?
this
.
_heightInPixels
(
zone
)
:
0
)
...
...
src/vs/editor/browser/widget/codeEditorWidget.ts
浏览文件 @
487f4dbe
...
...
@@ -374,7 +374,6 @@ export abstract class CodeEditorWidget extends CommonCodeEditor implements edito
public
changeViewZones
(
callback
:
(
accessor
:
editorBrowser
.
IViewZoneChangeAccessor
)
=>
void
):
void
{
if
(
!
this
.
hasView
)
{
// console.warn('Cannot change view zones on editor that is not attached to a model, since there is no view.');
return
;
}
let
hasChanges
=
this
.
_view
.
change
(
callback
);
...
...
src/vs/editor/common/commonCodeEditor.ts
浏览文件 @
487f4dbe
...
...
@@ -815,28 +815,28 @@ export abstract class CommonCodeEditor extends EventEmitter implements editorCom
let
viewModelHelper
:
IViewModelHelper
=
{
viewModel
:
this
.
viewModel
,
getCurrentCompletelyVisibleViewLinesRangeInViewport
:
()
=>
{
return
this
.
viewModel
.
convertModelRangeToViewRange
(
this
.
getCompletelyVisibleLinesRangeInViewport
());
return
this
.
viewModel
.
co
ordinatesConverter
.
co
nvertModelRangeToViewRange
(
this
.
getCompletelyVisibleLinesRangeInViewport
());
},
getCurrentCompletelyVisibleModelLinesRangeInViewport
:
()
=>
{
return
this
.
getCompletelyVisibleLinesRangeInViewport
();
},
convertModelPositionToViewPosition
:
(
lineNumber
:
number
,
column
:
number
)
=>
{
return
this
.
viewModel
.
convertModelPositionToViewPosition
(
lineNumber
,
column
);
return
this
.
viewModel
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
lineNumber
,
column
);
},
convertModelRangeToViewRange
:
(
modelRange
:
Range
)
=>
{
return
this
.
viewModel
.
convertModelRangeToViewRange
(
modelRange
);
return
this
.
viewModel
.
co
ordinatesConverter
.
co
nvertModelRangeToViewRange
(
modelRange
);
},
convertViewToModelPosition
:
(
lineNumber
:
number
,
column
:
number
)
=>
{
return
this
.
viewModel
.
convertViewPositionToModelPosition
(
lineNumber
,
column
);
return
this
.
viewModel
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
lineNumber
,
column
);
},
convertViewSelectionToModelSelection
:
(
viewSelection
:
editorCommon
.
I
Selection
)
=>
{
return
this
.
viewModel
.
convertViewSelectionToModelSelection
(
viewSelection
);
convertViewSelectionToModelSelection
:
(
viewSelection
:
Selection
)
=>
{
return
this
.
viewModel
.
co
ordinatesConverter
.
co
nvertViewSelectionToModelSelection
(
viewSelection
);
},
validateViewPosition
:
(
viewPosition
:
Position
,
modelPosition
:
Position
):
Position
=>
{
return
this
.
viewModel
.
validateViewPosition
(
viewPosition
.
lineNumber
,
viewPosition
.
column
,
modelPosition
);
return
this
.
viewModel
.
coordinatesConverter
.
validateViewPosition
(
viewPosition
.
lineNumber
,
viewPosition
.
column
,
modelPosition
);
},
validateViewRange
:
(
viewRange
:
Range
,
modelRange
:
Range
):
Range
=>
{
return
this
.
viewModel
.
validateViewRange
(
viewRange
.
startLineNumber
,
viewRange
.
startColumn
,
viewRange
.
endLineNumber
,
viewRange
.
endColumn
,
modelRange
);
return
this
.
viewModel
.
coordinatesConverter
.
validateViewRange
(
viewRange
.
startLineNumber
,
viewRange
.
startColumn
,
viewRange
.
endLineNumber
,
viewRange
.
endColumn
,
modelRange
);
}
};
...
...
src/vs/editor/common/controller/textAreaHandler.ts
浏览文件 @
487f4dbe
...
...
@@ -352,7 +352,7 @@ export class TextAreaHandler extends Disposable {
let
range
:
Range
=
selections
[
0
];
if
(
range
.
isEmpty
())
{
if
(
this
.
Browser
.
enableEmptySelectionClipboard
)
{
let
modelLineNumber
=
this
.
model
.
convertViewPositionToModelPosition
(
range
.
startLineNumber
,
1
).
lineNumber
;
let
modelLineNumber
=
this
.
model
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
range
.
startLineNumber
,
1
).
lineNumber
;
return
this
.
model
.
getModelLineContent
(
modelLineNumber
)
+
newLineCharacter
;
}
else
{
return
''
;
...
...
src/vs/editor/common/controller/textAreaState.ts
浏览文件 @
487f4dbe
...
...
@@ -56,7 +56,10 @@ export interface ISimpleModel {
getValueInRange
(
range
:
Range
,
eol
:
EndOfLinePreference
):
string
;
getModelLineContent
(
lineNumber
:
number
):
string
;
getLineCount
():
number
;
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
;
coordinatesConverter
:
{
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
;
};
}
export
interface
ITypeData
{
...
...
src/vs/editor/common/viewModel/viewModel.ts
浏览文件 @
487f4dbe
...
...
@@ -9,8 +9,27 @@ import { IModelDecoration, EndOfLinePreference, IPosition } from 'vs/editor/comm
import
{
ViewLineToken
}
from
'
vs/editor/common/core/viewLineToken
'
;
import
{
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
{
Selection
}
from
'
vs/editor/common/core/selection
'
;
export
interface
ICoordinatesConverter
{
// View -> Model conversion and related methods
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
;
convertViewRangeToModelRange
(
viewRange
:
Range
):
Range
;
convertViewSelectionToModelSelection
(
viewSelection
:
Selection
):
Selection
;
validateViewPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
,
expectedModelPosition
:
Position
):
Position
;
validateViewRange
(
viewStartLineNumber
:
number
,
viewStartColumn
:
number
,
viewEndLineNumber
:
number
,
viewEndColumn
:
number
,
modelRange
:
Range
):
Range
;
// Model -> View conversion and related methods
convertModelPositionToViewPosition
(
modelLineNumber
:
number
,
modelColumn
:
number
):
Position
;
convertModelRangeToViewRange
(
modelRange
:
Range
):
Range
;
convertWholeLineModelRangeToViewRange
(
modelRange
:
Range
):
Range
;
modelPositionIsVisible
(
position
:
Position
):
boolean
;
}
export
interface
IViewModel
extends
IEventEmitter
{
readonly
coordinatesConverter
:
ICoordinatesConverter
;
/**
* Gives a hint that a lot of requests are about to come in for these line numbers.
*/
...
...
@@ -34,14 +53,9 @@ export interface IViewModel extends IEventEmitter {
getEOL
():
string
;
getValueInRange
(
range
:
Range
,
eol
:
EndOfLinePreference
):
string
;
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
;
convertViewRangeToModelRange
(
viewRange
:
Range
):
Range
;
getModelLineContent
(
lineNumber
:
number
):
string
;
getModelLineMaxColumn
(
modelLineNumber
:
number
):
number
;
validateModelPosition
(
position
:
IPosition
):
Position
;
convertModelPositionToViewPosition
(
modelLineNumber
:
number
,
modelColumn
:
number
):
Position
;
modelPositionIsVisible
(
position
:
Position
):
boolean
;
}
export
class
ViewLineRenderingData
{
...
...
src/vs/editor/common/viewModel/viewModelDecorations.ts
浏览文件 @
487f4dbe
...
...
@@ -7,12 +7,7 @@
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
import
*
as
editorCommon
from
'
vs/editor/common/editorCommon
'
;
import
{
InlineDecoration
,
ViewModelDecoration
}
from
'
vs/editor/common/viewModel/viewModel
'
;
export
interface
IModelRangeToViewRangeConverter
{
convertModelRangeToViewRange
(
modelRange
:
Range
,
isWholeLine
:
boolean
):
Range
;
convertViewRangeToModelRange
(
viewRange
:
Range
):
Range
;
}
import
{
InlineDecoration
,
ViewModelDecoration
,
ICoordinatesConverter
}
from
'
vs/editor/common/viewModel/viewModel
'
;
export
interface
IDecorationsViewportData
{
/**
...
...
@@ -30,18 +25,18 @@ export class ViewModelDecorations implements IDisposable {
private
readonly
editorId
:
number
;
private
readonly
model
:
editorCommon
.
IModel
;
private
readonly
configuration
:
editorCommon
.
IConfiguration
;
private
readonly
converter
:
IModelRangeToViewRange
Converter
;
private
readonly
_coordinatesConverter
:
ICoordinates
Converter
;
private
_decorationsCache
:
{
[
decorationId
:
string
]:
ViewModelDecoration
;
};
private
_cachedModelDecorationsResolver
:
IDecorationsViewportData
;
private
_cachedModelDecorationsResolverViewRange
:
Range
;
constructor
(
editorId
:
number
,
model
:
editorCommon
.
IModel
,
configuration
:
editorCommon
.
IConfiguration
,
co
nverter
:
IModelRangeToViewRange
Converter
)
{
constructor
(
editorId
:
number
,
model
:
editorCommon
.
IModel
,
configuration
:
editorCommon
.
IConfiguration
,
co
ordinatesConverter
:
ICoordinates
Converter
)
{
this
.
editorId
=
editorId
;
this
.
model
=
model
;
this
.
configuration
=
configuration
;
this
.
converter
=
c
onverter
;
this
.
_coordinatesConverter
=
coordinatesC
onverter
;
this
.
_decorationsCache
=
Object
.
create
(
null
);
this
.
_clearCachedModelDecorationsResolver
();
...
...
@@ -99,7 +94,11 @@ export class ViewModelDecorations implements IDisposable {
this
.
_decorationsCache
[
id
]
=
r
;
}
if
(
r
.
range
===
null
)
{
r
.
range
=
this
.
converter
.
convertModelRangeToViewRange
(
modelDecoration
.
range
,
modelDecoration
.
options
.
isWholeLine
);
if
(
modelDecoration
.
options
.
isWholeLine
)
{
r
.
range
=
this
.
_coordinatesConverter
.
convertWholeLineModelRangeToViewRange
(
modelDecoration
.
range
);
}
else
{
r
.
range
=
this
.
_coordinatesConverter
.
convertModelRangeToViewRange
(
modelDecoration
.
range
);
}
}
return
r
;
}
...
...
@@ -133,7 +132,7 @@ export class ViewModelDecorations implements IDisposable {
}
private
_getDecorationsViewportData
(
viewportRange
:
Range
):
IDecorationsViewportData
{
let
viewportModelRange
=
this
.
c
onverter
.
convertViewRangeToModelRange
(
viewportRange
);
let
viewportModelRange
=
this
.
_coordinatesC
onverter
.
convertViewRangeToModelRange
(
viewportRange
);
let
startLineNumber
=
viewportRange
.
startLineNumber
;
let
endLineNumber
=
viewportRange
.
endLineNumber
;
let
modelDecorations
=
this
.
model
.
getDecorationsInRange
(
viewportModelRange
,
this
.
editorId
,
this
.
configuration
.
editor
.
readOnly
);
...
...
src/vs/editor/common/viewModel/viewModelImpl.ts
浏览文件 @
487f4dbe
...
...
@@ -13,20 +13,83 @@ import { Selection } from 'vs/editor/common/core/selection';
import
*
as
editorCommon
from
'
vs/editor/common/editorCommon
'
;
import
{
ViewModelCursors
}
from
'
vs/editor/common/viewModel/viewModelCursors
'
;
import
{
ViewModelDecorations
}
from
'
vs/editor/common/viewModel/viewModelDecorations
'
;
import
{
ViewLineRenderingData
,
ViewModelDecoration
,
IViewModel
}
from
'
vs/editor/common/viewModel/viewModel
'
;
import
{
ViewLineRenderingData
,
ViewModelDecoration
,
IViewModel
,
ICoordinatesConverter
}
from
'
vs/editor/common/viewModel/viewModel
'
;
import
{
SplitLinesCollection
}
from
'
vs/editor/common/viewModel/splitLinesCollection
'
;
export
class
CoordinatesConverter
implements
ICoordinatesConverter
{
private
readonly
_model
:
editorCommon
.
IModel
;
private
readonly
_lines
:
SplitLinesCollection
;
constructor
(
model
:
editorCommon
.
IModel
,
lines
:
SplitLinesCollection
)
{
this
.
_model
=
model
;
this
.
_lines
=
lines
;
}
// View -> Model conversion and related methods
public
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
{
return
this
.
_lines
.
convertViewPositionToModelPosition
(
viewLineNumber
,
viewColumn
);
}
public
convertViewRangeToModelRange
(
viewRange
:
Range
):
Range
{
let
start
=
this
.
_lines
.
convertViewPositionToModelPosition
(
viewRange
.
startLineNumber
,
viewRange
.
startColumn
);
let
end
=
this
.
_lines
.
convertViewPositionToModelPosition
(
viewRange
.
endLineNumber
,
viewRange
.
endColumn
);
return
new
Range
(
start
.
lineNumber
,
start
.
column
,
end
.
lineNumber
,
end
.
column
);
}
public
convertViewSelectionToModelSelection
(
viewSelection
:
Selection
):
Selection
{
let
selectionStart
=
this
.
_lines
.
convertViewPositionToModelPosition
(
viewSelection
.
selectionStartLineNumber
,
viewSelection
.
selectionStartColumn
);
let
position
=
this
.
_lines
.
convertViewPositionToModelPosition
(
viewSelection
.
positionLineNumber
,
viewSelection
.
positionColumn
);
return
new
Selection
(
selectionStart
.
lineNumber
,
selectionStart
.
column
,
position
.
lineNumber
,
position
.
column
);
}
public
validateViewPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
,
expectedModelPosition
:
Position
):
Position
{
return
this
.
_lines
.
validateViewPosition
(
viewLineNumber
,
viewColumn
,
expectedModelPosition
);
}
public
validateViewRange
(
viewStartLineNumber
:
number
,
viewStartColumn
:
number
,
viewEndLineNumber
:
number
,
viewEndColumn
:
number
,
modelRange
:
Range
):
Range
{
var
validViewStart
=
this
.
validateViewPosition
(
viewStartLineNumber
,
viewStartColumn
,
modelRange
.
getStartPosition
());
var
validViewEnd
=
this
.
validateViewPosition
(
viewEndLineNumber
,
viewEndColumn
,
modelRange
.
getEndPosition
());
return
new
Range
(
validViewStart
.
lineNumber
,
validViewStart
.
column
,
validViewEnd
.
lineNumber
,
validViewEnd
.
column
);
}
// Model -> View conversion and related methods
public
convertModelPositionToViewPosition
(
modelLineNumber
:
number
,
modelColumn
:
number
):
Position
{
return
this
.
_lines
.
convertModelPositionToViewPosition
(
modelLineNumber
,
modelColumn
);
}
public
convertModelRangeToViewRange
(
modelRange
:
Range
):
Range
{
let
start
=
this
.
_lines
.
convertModelPositionToViewPosition
(
modelRange
.
startLineNumber
,
modelRange
.
startColumn
);
let
end
=
this
.
_lines
.
convertModelPositionToViewPosition
(
modelRange
.
endLineNumber
,
modelRange
.
endColumn
);
return
new
Range
(
start
.
lineNumber
,
start
.
column
,
end
.
lineNumber
,
end
.
column
);
}
public
convertWholeLineModelRangeToViewRange
(
modelRange
:
Range
):
Range
{
let
start
=
this
.
_lines
.
convertModelPositionToViewPosition
(
modelRange
.
startLineNumber
,
1
);
let
end
=
this
.
_lines
.
convertModelPositionToViewPosition
(
modelRange
.
endLineNumber
,
this
.
_model
.
getLineMaxColumn
(
modelRange
.
endLineNumber
));
return
new
Range
(
start
.
lineNumber
,
start
.
column
,
end
.
lineNumber
,
end
.
column
);
}
public
modelPositionIsVisible
(
position
:
Position
):
boolean
{
return
this
.
_lines
.
modelPositionIsVisible
(
position
.
lineNumber
,
position
.
column
);
}
}
export
class
ViewModel
extends
EventEmitter
implements
IViewModel
{
private
editorId
:
number
;
private
configuration
:
editorCommon
.
IConfiguration
;
private
model
:
editorCommon
.
IModel
;
private
readonly
lines
:
SplitLinesCollection
;
private
readonly
editorId
:
number
;
private
readonly
configuration
:
editorCommon
.
IConfiguration
;
private
readonly
model
:
editorCommon
.
IModel
;
public
readonly
coordinatesConverter
:
ICoordinatesConverter
;
private
listenersToRemove
:
IDisposable
[];
private
_toDispose
:
IDisposable
[];
private
lines
:
SplitLinesCollection
;
private
decorations
:
ViewModelDecorations
;
private
cursors
:
ViewModelCursors
;
private
readonly
decorations
:
ViewModelDecorations
;
private
readonly
cursors
:
ViewModelCursors
;
private
_renderCustomLineNumbers
:
(
lineNumber
:
number
)
=>
string
;
private
_renderRelativeLineNumbers
:
boolean
;
...
...
@@ -42,23 +105,15 @@ export class ViewModel extends EventEmitter implements IViewModel {
this
.
configuration
=
configuration
;
this
.
model
=
model
;
this
.
coordinatesConverter
=
new
CoordinatesConverter
(
this
.
model
,
this
.
lines
);
this
.
_lastCursorPosition
=
new
Position
(
1
,
1
);
this
.
_renderCustomLineNumbers
=
this
.
configuration
.
editor
.
viewInfo
.
renderCustomLineNumbers
;
this
.
_renderRelativeLineNumbers
=
this
.
configuration
.
editor
.
viewInfo
.
renderRelativeLineNumbers
;
this
.
_centeredViewLine
=
-
1
;
this
.
decorations
=
new
ViewModelDecorations
(
this
.
editorId
,
this
.
model
,
this
.
configuration
,
{
convertModelRangeToViewRange
:
(
modelRange
:
Range
,
isWholeLine
:
boolean
):
Range
=>
{
if
(
isWholeLine
)
{
return
this
.
convertWholeLineModelRangeToViewRange
(
modelRange
);
}
return
this
.
convertModelRangeToViewRange
(
modelRange
);
},
convertViewRangeToModelRange
:
(
viewRange
:
Range
):
Range
=>
{
return
this
.
convertViewRangeToModelRange
(
viewRange
);
}
});
this
.
decorations
=
new
ViewModelDecorations
(
this
.
editorId
,
this
.
model
,
this
.
configuration
,
this
.
coordinatesConverter
);
this
.
decorations
.
reset
();
this
.
cursors
=
new
ViewModelCursors
(
this
.
configuration
);
...
...
@@ -93,11 +148,7 @@ export class ViewModel extends EventEmitter implements IViewModel {
this
.
listenersToRemove
=
dispose
(
this
.
listenersToRemove
);
this
.
_toDispose
=
dispose
(
this
.
_toDispose
);
this
.
decorations
.
dispose
();
this
.
decorations
=
null
;
this
.
lines
.
dispose
();
this
.
lines
=
null
;
this
.
configuration
=
null
;
this
.
model
=
null
;
}
private
_onTabSizeChange
(
newTabSize
:
number
):
boolean
{
...
...
@@ -122,7 +173,7 @@ export class ViewModel extends EventEmitter implements IViewModel {
private
_restoreCenteredModelRange
(
range
:
Range
):
void
{
// modelLine -> viewLine
var
newCenteredViewRange
=
this
.
convertModelRangeToViewRange
(
range
);
var
newCenteredViewRange
=
this
.
co
ordinatesConverter
.
co
nvertModelRangeToViewRange
(
range
);
// Send a reveal event to restore the centered content
var
restoreRevealEvent
:
editorCommon
.
IViewRevealRangeEvent
=
{
...
...
@@ -187,7 +238,7 @@ export class ViewModel extends EventEmitter implements IViewModel {
}
let
viewLineNumber
=
this
.
_centeredViewLine
;
let
currentCenteredViewRange
=
new
Range
(
viewLineNumber
,
this
.
getLineMinColumn
(
viewLineNumber
),
viewLineNumber
,
this
.
getLineMaxColumn
(
viewLineNumber
));
return
this
.
convertViewRangeToModelRange
(
currentCenteredViewRange
);
return
this
.
co
ordinatesConverter
.
co
nvertViewRangeToModelRange
(
currentCenteredViewRange
);
}
private
_onEvents
(
events
:
EmitterEvent
[]):
void
{
...
...
@@ -346,8 +397,8 @@ export class ViewModel extends EventEmitter implements IViewModel {
for
(
let
i
=
0
,
len
=
e
.
ranges
.
length
;
i
<
len
;
i
++
)
{
let
modelRange
=
e
.
ranges
[
i
];
let
viewStartLineNumber
=
this
.
convertModelPositionToViewPosition
(
modelRange
.
fromLineNumber
,
1
).
lineNumber
;
let
viewEndLineNumber
=
this
.
convertModelPositionToViewPosition
(
modelRange
.
toLineNumber
,
this
.
model
.
getLineMaxColumn
(
modelRange
.
toLineNumber
)).
lineNumber
;
let
viewStartLineNumber
=
this
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
modelRange
.
fromLineNumber
,
1
).
lineNumber
;
let
viewEndLineNumber
=
this
.
co
ordinatesConverter
.
co
nvertModelPositionToViewPosition
(
modelRange
.
toLineNumber
,
this
.
model
.
getLineMaxColumn
(
modelRange
.
toLineNumber
)).
lineNumber
;
viewRanges
[
i
]
=
{
fromLineNumber
:
viewStartLineNumber
,
toLineNumber
:
viewEndLineNumber
...
...
@@ -367,16 +418,6 @@ export class ViewModel extends EventEmitter implements IViewModel {
this
.
lines
.
onModelLinesInserted
(
e
.
versionId
,
e
.
fromLineNumber
,
e
.
toLineNumber
,
e
.
detail
.
split
(
'
\n
'
),
(
eventType
:
string
,
payload
:
any
)
=>
this
.
emit
(
eventType
,
payload
));
}
public
validateViewRange
(
viewStartLineNumber
:
number
,
viewStartColumn
:
number
,
viewEndLineNumber
:
number
,
viewEndColumn
:
number
,
modelRange
:
Range
):
Range
{
var
validViewStart
=
this
.
validateViewPosition
(
viewStartLineNumber
,
viewStartColumn
,
modelRange
.
getStartPosition
());
var
validViewEnd
=
this
.
validateViewPosition
(
viewEndLineNumber
,
viewEndColumn
,
modelRange
.
getEndPosition
());
return
new
Range
(
validViewStart
.
lineNumber
,
validViewStart
.
column
,
validViewEnd
.
lineNumber
,
validViewEnd
.
column
);
}
public
validateViewPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
,
expectedModelPosition
:
Position
):
Position
{
return
this
.
lines
.
validateViewPosition
(
viewLineNumber
,
viewColumn
,
expectedModelPosition
);
}
private
onCursorPositionChanged
(
e
:
editorCommon
.
ICursorPositionChangedEvent
):
void
{
this
.
cursors
.
onCursorPositionChanged
(
e
,
(
eventType
:
string
,
payload
:
any
)
=>
this
.
emit
(
eventType
,
payload
));
}
...
...
@@ -388,7 +429,7 @@ export class ViewModel extends EventEmitter implements IViewModel {
if
(
!
e
.
viewRange
)
{
e
=
{
range
:
e
.
range
,
viewRange
:
this
.
convertModelRangeToViewRange
(
e
.
range
),
viewRange
:
this
.
co
ordinatesConverter
.
co
nvertModelRangeToViewRange
(
e
.
range
),
verticalType
:
e
.
verticalType
,
revealHorizontal
:
e
.
revealHorizontal
,
revealCursor
:
e
.
revealCursor
,
...
...
@@ -450,7 +491,7 @@ export class ViewModel extends EventEmitter implements IViewModel {
}
public
getLineRenderLineNumber
(
viewLineNumber
:
number
):
string
{
let
modelPosition
=
this
.
convertViewPositionToModelPosition
(
viewLineNumber
,
1
);
let
modelPosition
=
this
.
co
ordinatesConverter
.
co
nvertViewPositionToModelPosition
(
viewLineNumber
,
1
);
if
(
modelPosition
.
column
!==
1
)
{
return
''
;
}
...
...
@@ -509,30 +550,10 @@ export class ViewModel extends EventEmitter implements IViewModel {
}
public
getValueInRange
(
range
:
Range
,
eol
:
editorCommon
.
EndOfLinePreference
):
string
{
var
modelRange
=
this
.
convertViewRangeToModelRange
(
range
);
var
modelRange
=
this
.
co
ordinatesConverter
.
co
nvertViewRangeToModelRange
(
range
);
return
this
.
model
.
getValueInRange
(
modelRange
,
eol
);
}
// View -> Model conversion and related methods
public
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
{
return
this
.
lines
.
convertViewPositionToModelPosition
(
viewLineNumber
,
viewColumn
);
}
public
convertViewRangeToModelRange
(
viewRange
:
Range
):
Range
{
var
start
=
this
.
convertViewPositionToModelPosition
(
viewRange
.
startLineNumber
,
viewRange
.
startColumn
);
var
end
=
this
.
convertViewPositionToModelPosition
(
viewRange
.
endLineNumber
,
viewRange
.
endColumn
);
return
new
Range
(
start
.
lineNumber
,
start
.
column
,
end
.
lineNumber
,
end
.
column
);
}
public
convertViewSelectionToModelSelection
(
viewSelection
:
editorCommon
.
ISelection
):
Selection
{
let
selectionStart
=
this
.
convertViewPositionToModelPosition
(
viewSelection
.
selectionStartLineNumber
,
viewSelection
.
selectionStartColumn
);
let
position
=
this
.
convertViewPositionToModelPosition
(
viewSelection
.
positionLineNumber
,
viewSelection
.
positionColumn
);
return
new
Selection
(
selectionStart
.
lineNumber
,
selectionStart
.
column
,
position
.
lineNumber
,
position
.
column
);
}
// Model -> View conversion and related methods
public
getModelLineContent
(
modelLineNumber
:
number
):
string
{
return
this
.
model
.
getLineContent
(
modelLineNumber
);
}
...
...
@@ -544,25 +565,4 @@ export class ViewModel extends EventEmitter implements IViewModel {
public
validateModelPosition
(
position
:
editorCommon
.
IPosition
):
Position
{
return
this
.
model
.
validatePosition
(
position
);
}
public
convertModelPositionToViewPosition
(
modelLineNumber
:
number
,
modelColumn
:
number
):
Position
{
return
this
.
lines
.
convertModelPositionToViewPosition
(
modelLineNumber
,
modelColumn
);
}
public
convertModelRangeToViewRange
(
modelRange
:
Range
):
Range
{
var
start
=
this
.
convertModelPositionToViewPosition
(
modelRange
.
startLineNumber
,
modelRange
.
startColumn
);
var
end
=
this
.
convertModelPositionToViewPosition
(
modelRange
.
endLineNumber
,
modelRange
.
endColumn
);
return
new
Range
(
start
.
lineNumber
,
start
.
column
,
end
.
lineNumber
,
end
.
column
);
}
public
convertWholeLineModelRangeToViewRange
(
modelRange
:
Range
):
Range
{
var
start
=
this
.
convertModelPositionToViewPosition
(
modelRange
.
startLineNumber
,
1
);
var
end
=
this
.
convertModelPositionToViewPosition
(
modelRange
.
endLineNumber
,
this
.
model
.
getLineMaxColumn
(
modelRange
.
endLineNumber
));
return
new
Range
(
start
.
lineNumber
,
start
.
column
,
end
.
lineNumber
,
end
.
column
);
}
public
modelPositionIsVisible
(
position
:
Position
):
boolean
{
return
this
.
lines
.
modelPositionIsVisible
(
position
.
lineNumber
,
position
.
column
);
}
}
\ No newline at end of file
}
src/vs/editor/test/browser/controller/imeTester.ts
浏览文件 @
487f4dbe
...
...
@@ -19,6 +19,12 @@ class SingleLineTestModel implements ISimpleModel {
private
_line
:
string
;
private
_eol
:
string
;
public
coordinatesConverter
=
{
convertViewPositionToModelPosition
:
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
=>
{
return
new
Position
(
viewLineNumber
,
viewColumn
);
}
};
constructor
(
line
:
string
)
{
this
.
_line
=
line
;
this
.
_eol
=
'
\n
'
;
...
...
@@ -47,10 +53,6 @@ class SingleLineTestModel implements ISimpleModel {
getLineCount
():
number
{
return
1
;
}
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
{
return
new
Position
(
viewLineNumber
,
viewColumn
);
}
}
class
TestView
{
...
...
src/vs/editor/test/common/controller/textAreaState.test.ts
浏览文件 @
487f4dbe
...
...
@@ -411,6 +411,12 @@ class SimpleModel implements ISimpleModel {
private
_lines
:
string
[];
private
_eol
:
string
;
public
coordinatesConverter
=
{
convertViewPositionToModelPosition
:
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
=>
{
return
new
Position
(
viewLineNumber
,
viewColumn
);
}
};
constructor
(
lines
:
string
[],
eol
:
string
)
{
this
.
_lines
=
lines
;
this
.
_eol
=
eol
;
...
...
@@ -466,8 +472,4 @@ class SimpleModel implements ISimpleModel {
public
getLineCount
():
number
{
return
this
.
_lines
.
length
;
}
public
convertViewPositionToModelPosition
(
viewLineNumber
:
number
,
viewColumn
:
number
):
Position
{
return
new
Position
(
viewLineNumber
,
viewColumn
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录