mirror of
https://github.com/atom/atom.git
synced 2026-01-25 06:48:28 -05:00
Editor subscribes to EditSession for screen line changes. Remove more movement logic from cursor view.
This commit is contained in:
@@ -16,9 +16,14 @@ class CursorView extends View
|
||||
initialize: (@cursor, @editor) ->
|
||||
@anchor = new Anchor(@editor, cursor.getScreenPosition())
|
||||
@selection = @editor.compositeSelection.addSelectionForCursor(this)
|
||||
|
||||
@cursor.on 'change-screen-position', (position, options) =>
|
||||
options.fromModel = true
|
||||
@setScreenPosition(position, options)
|
||||
@updateAppearance()
|
||||
unless options.bufferChange
|
||||
@clearSelection()
|
||||
@removeIdleClassTemporarily()
|
||||
@trigger 'cursor-move', bufferChange: options.bufferChange
|
||||
|
||||
@cursor.on 'destroy', => @remove()
|
||||
|
||||
afterAttach: (onDom) ->
|
||||
@@ -39,21 +44,17 @@ class CursorView extends View
|
||||
@cursor.setBufferPosition(bufferPosition, options)
|
||||
|
||||
getScreenPosition: ->
|
||||
@anchor.getScreenPosition()
|
||||
@cursor.getScreenPosition()
|
||||
|
||||
setScreenPosition: (position, options={}) ->
|
||||
if options.fromModel
|
||||
@anchor.setScreenPosition(position, options)
|
||||
@refreshScreenPosition()
|
||||
@trigger 'cursor-move', bufferChange: options.bufferChange
|
||||
@clearSelection() unless options.bufferChange
|
||||
else
|
||||
@cursor.setScreenPosition(position, options)
|
||||
|
||||
refreshScreenPosition: ->
|
||||
@goalColumn = null
|
||||
@updateAppearance()
|
||||
|
||||
removeIdleClassTemporarily: ->
|
||||
@removeClass 'idle'
|
||||
window.clearTimeout(@idleTimeout) if @idleTimeout
|
||||
@idleTimeout = window.setTimeout (=> @addClass 'idle'), 200
|
||||
|
||||
@@ -39,6 +39,10 @@ class Cursor
|
||||
getBufferRow: ->
|
||||
@getBufferPosition().row
|
||||
|
||||
refreshScreenPosition: ->
|
||||
@anchor.refreshScreenPosition()
|
||||
@trigger 'change-screen-position', @getScreenPosition(), bufferChange: false
|
||||
|
||||
handleBufferChange: (e) ->
|
||||
@anchor.handleBufferChange(e)
|
||||
@trigger 'change-screen-position', @getScreenPosition(), bufferChange: true
|
||||
|
||||
@@ -31,9 +31,14 @@ class EditSession
|
||||
@buffer.on "change.edit-session-#{@id}", (e) =>
|
||||
@moveCursors (cursor) -> cursor.handleBufferChange(e)
|
||||
|
||||
@renderer.on "change.edit-session-#{@id}", (e) =>
|
||||
@trigger 'screen-lines-change', e
|
||||
@moveCursors (cursor) -> cursor.refreshScreenPosition() unless e.bufferChanged
|
||||
|
||||
destroy: ->
|
||||
@renderer.destroy()
|
||||
@buffer.off ".edit-session-#{@id}"
|
||||
@renderer.off ".edit-session-#{@id}"
|
||||
@renderer.destroy()
|
||||
|
||||
serialize: ->
|
||||
buffer: @buffer.serialize()
|
||||
|
||||
@@ -233,6 +233,7 @@ class Editor extends View
|
||||
@setSoftWrapColumn() if @softWrap
|
||||
@prepareForScrolling()
|
||||
@setScrollPositionFromActiveEditSession() # this also renders the visible lines
|
||||
@activeEditSession.on 'screen-lines-change', (e) => @handleRendererChange(e)
|
||||
$(window).on "resize.editor#{@id}", => @updateRenderedLines()
|
||||
@focus() if @isFocused
|
||||
@trigger 'editor-open', [this]
|
||||
@@ -321,17 +322,6 @@ class Editor extends View
|
||||
setBuffer: (buffer) ->
|
||||
@activateEditSessionForBuffer(buffer)
|
||||
|
||||
setRenderer: (renderer) ->
|
||||
@renderer?.off()
|
||||
@renderer = renderer
|
||||
@renderer.on 'change', (e) => @handleRendererChange(e)
|
||||
|
||||
@unsubscribeFromBuffer() if @buffer
|
||||
@buffer = renderer.buffer
|
||||
@buffer.on "path-change.editor#{@id}", => @trigger 'editor-path-change'
|
||||
@buffer.on "change.editor#{@id}", (e) => @handleBufferChange(e)
|
||||
@trigger 'editor-path-change'
|
||||
|
||||
activateEditSessionForBuffer: (buffer) ->
|
||||
index = @editSessionIndexForBuffer(buffer)
|
||||
unless index?
|
||||
@@ -373,11 +363,19 @@ class Editor extends View
|
||||
@activeEditSession = @editSessions[index]
|
||||
@activeEditSessionIndex = index
|
||||
|
||||
@setRenderer(@activeEditSession.getRenderer())
|
||||
@unsubscribeFromBuffer() if @buffer
|
||||
@buffer = @activeEditSession.buffer
|
||||
@buffer.on "path-change.editor#{@id}", => @trigger 'editor-path-change'
|
||||
@buffer.on "change.editor#{@id}", (e) => @handleBufferChange(e)
|
||||
@trigger 'editor-path-change'
|
||||
|
||||
@renderer = @activeEditSession.renderer
|
||||
|
||||
if @attached
|
||||
@prepareForScrolling()
|
||||
@setScrollPositionFromActiveEditSession()
|
||||
@renderLines()
|
||||
@activeEditSession.on 'screen-lines-change', (e) => @handleRendererChange(e)
|
||||
|
||||
for cursor in @activeEditSession.getCursors()
|
||||
@compositeCursor.addCursorView(cursor)
|
||||
@@ -495,8 +493,6 @@ class Editor extends View
|
||||
@lastRenderedScreenRow = maxEndRow
|
||||
@updatePaddingOfRenderedLines()
|
||||
|
||||
@compositeCursor.updateBufferPosition() unless e.bufferChanged
|
||||
|
||||
buildLineElements: (startRow, endRow) ->
|
||||
charWidth = @charWidth
|
||||
charHeight = @charHeight
|
||||
|
||||
@@ -32,8 +32,7 @@ class Anchor
|
||||
else
|
||||
@bufferPosition = Point.fromObject(position)
|
||||
|
||||
screenPosition = @editSession.screenPositionForBufferPosition(@bufferPosition, options)
|
||||
@setScreenPosition(screenPosition, clip: false, assignBufferPosition: false)
|
||||
@refreshScreenPosition(options)
|
||||
|
||||
getScreenPosition: ->
|
||||
@screenPosition
|
||||
@@ -48,3 +47,8 @@ class Anchor
|
||||
|
||||
Object.freeze @screenPosition
|
||||
Object.freeze @bufferPosition
|
||||
|
||||
refreshScreenPosition: (options) ->
|
||||
screenPosition = @editSession.screenPositionForBufferPosition(@bufferPosition, options)
|
||||
@setScreenPosition(screenPosition, clip: false, assignBufferPosition: false)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user