From f406786a3a98dbd1cc3847eb58e8808ff928651f Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 7 Jun 2012 16:31:40 -0600 Subject: [PATCH] Editor subscribes to EditSession for screen line changes. Remove more movement logic from cursor view. --- src/app/cursor-view.coffee | 17 +++++++++-------- src/app/cursor.coffee | 4 ++++ src/app/edit-session.coffee | 7 ++++++- src/app/editor.coffee | 24 ++++++++++-------------- src/app/new-anchor.coffee | 8 ++++++-- 5 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/app/cursor-view.coffee b/src/app/cursor-view.coffee index db9e691ee..c35acffb1 100644 --- a/src/app/cursor-view.coffee +++ b/src/app/cursor-view.coffee @@ -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 diff --git a/src/app/cursor.coffee b/src/app/cursor.coffee index 43836087b..842ea5d07 100644 --- a/src/app/cursor.coffee +++ b/src/app/cursor.coffee @@ -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 diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 725c22652..4033d35fd 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -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() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 0a52f373e..f5ec38832 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -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 diff --git a/src/app/new-anchor.coffee b/src/app/new-anchor.coffee index aa3d93412..c55912089 100644 --- a/src/app/new-anchor.coffee +++ b/src/app/new-anchor.coffee @@ -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) +