Merge pull request #16031 from atom/mb-one-display-layer-event-per-tx

⬆️ text-buffer for DisplayLayer.onDidChangeSync change
This commit is contained in:
Max Brunsfeld
2017-10-31 10:09:38 -07:00
committed by GitHub
3 changed files with 25 additions and 6 deletions

View File

@@ -2456,8 +2456,12 @@ class TextEditorComponent {
didChangeDisplayLayer (changes) {
for (let i = 0; i < changes.length; i++) {
const {start, oldExtent, newExtent} = changes[i]
this.spliceLineTopIndex(start.row, oldExtent.row, newExtent.row)
const {oldRange, newRange} = changes[i]
this.spliceLineTopIndex(
newRange.start.row,
oldRange.end.row - oldRange.start.row,
newRange.end.row - newRange.start.row
)
}
this.scheduleUpdate()

View File

@@ -468,10 +468,10 @@ class TextEditor extends Model
subscribeToDisplayLayer: ->
@disposables.add @tokenizedBuffer.onDidChangeGrammar @handleGrammarChange.bind(this)
@disposables.add @displayLayer.onDidChangeSync (e) =>
@disposables.add @displayLayer.onDidChange (changes) =>
@mergeIntersectingSelections()
@component?.didChangeDisplayLayer(e)
@emitter.emit 'did-change', e
@component?.didChangeDisplayLayer(changes)
@emitter.emit 'did-change', changes.map (change) -> new ChangeEvent(change)
@disposables.add @displayLayer.onDidReset =>
@mergeIntersectingSelections()
@component?.didResetDisplayLayer()
@@ -3911,3 +3911,18 @@ class TextEditor extends Model
endRow++
new Range(new Point(startRow, 0), new Point(endRow, @buffer.lineLengthForRow(endRow)))
class ChangeEvent
constructor: ({@oldRange, @newRange}) ->
Object.defineProperty @prototype, 'start', {
get: -> @oldRange.start
}
Object.defineProperty @prototype, 'oldExtent', {
get: -> @oldRange.getExtent()
}
Object.defineProperty @prototype, 'newExtent', {
get: -> @newRange.getExtent()
}