From be2b9ee100ba2a66a1c2e03f75ce938f0161a238 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 30 Nov 2012 12:08:33 -0700 Subject: [PATCH] Store autoscroll state on Selection and Cursor models --- src/app/cursor-view.coffee | 9 ++++++--- src/app/cursor.coffee | 7 +++++++ src/app/editor.coffee | 8 ++++---- src/app/selection-view.coffee | 6 ++++++ src/app/selection.coffee | 3 +++ 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/app/cursor-view.coffee b/src/app/cursor-view.coffee index 36af2fd2b..b4ad022d3 100644 --- a/src/app/cursor-view.coffee +++ b/src/app/cursor-view.coffee @@ -14,7 +14,6 @@ class CursorView extends View visible: true needsUpdate: true - needsAutoscroll: true needsRemoval: false shouldPauseBlinking: false @@ -22,12 +21,10 @@ class CursorView extends View @cursor.on 'moved.cursor-view', ({ autoscroll }) => @needsUpdate = true @shouldPauseBlinking = true - @needsAutoscroll = (autoscroll ? true) and @cursor?.isLastCursor() @editor.requestDisplayUpdate() @cursor.on 'change-visibility.cursor-view', (visible) => @needsUpdate = true - @needsAutoscroll = visible and @cursor.isLastCursor() @editor.requestDisplayUpdate() @cursor.on 'destroy.cursor-view', => @@ -55,6 +52,12 @@ class CursorView extends View @setVisible(@cursor.isVisible() and not @editor.isFoldedAtScreenRow(screenPosition.row)) + needsAutoscroll: -> + @cursor.needsAutoscroll + + autoscrolled: -> + @cursor.autoscrolled() + getPixelPosition: -> @editor.pixelPositionForScreenPosition(@getScreenPosition()) diff --git a/src/app/cursor.coffee b/src/app/cursor.coffee index 3395cef8a..49f4631b9 100644 --- a/src/app/cursor.coffee +++ b/src/app/cursor.coffee @@ -11,15 +11,18 @@ class Cursor goalColumn: null wordRegex: /(\w+)|([^\w\n]+)/g visible: true + needsAutoscroll: false constructor: ({@editSession, screenPosition, bufferPosition}) -> @anchor = @editSession.addAnchor(strong: true) @anchor.on 'moved', (e) => + @needsAutoscroll = (e.autoscroll ? true) and @isLastCursor() @trigger 'moved', e @editSession.trigger 'cursor-moved', e @setScreenPosition(screenPosition) if screenPosition @setBufferPosition(bufferPosition) if bufferPosition + @needsAutoscroll = true destroy: -> @anchor.destroy() @@ -48,6 +51,7 @@ class Cursor setVisible: (visible) -> if @visible != visible @visible = visible + @needsAutoscroll = @visible and @isLastCursor() @trigger 'change-visibility', @visible isVisible: -> @visible @@ -55,6 +59,9 @@ class Cursor isLastCursor: -> this == @editSession.getLastCursor() + autoscrolled: -> + @needsAutoscroll = false + clearSelection: -> if @selection @selection.clear() unless @selection.retainSelection diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 5c0eb90df..41687aee5 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -794,13 +794,13 @@ class Editor extends View do (cursorView) -> cursorView.resetBlinking() autoscroll: (options={}) -> - for cursorView in @getCursorViews() when cursorView.needsAutoscroll + for cursorView in @getCursorViews() when cursorView.needsAutoscroll() @scrollTo(cursorView.getPixelPosition()) unless options.suppressAutoScroll - cursorView.needsAutoscroll = false + cursorView.autoscrolled() - for selectionView in @getSelectionViews() when selectionView.selection.needsAutoscroll + for selectionView in @getSelectionViews() when selectionView.needsAutoscroll() @scrollTo(selectionView.getCenterPixelPosition(), center: true) - selectionView.selection.needsAutoscroll = false + selectionView.autoscrolled() updateRenderedLines: -> firstVisibleScreenRow = @getFirstVisibleScreenRow() diff --git a/src/app/selection-view.coffee b/src/app/selection-view.coffee index 3e9a404b8..cbc59e05b 100644 --- a/src/app/selection-view.coffee +++ b/src/app/selection-view.coffee @@ -66,6 +66,12 @@ class SelectionView extends View getBufferRange: -> @selection.getBufferRange() + needsAutoscroll: -> + @selection.needsAutoscroll + + autoscrolled: -> + @selection.autoscrolled() + remove: -> @editor.removeSelectionView(this) super diff --git a/src/app/selection.coffee b/src/app/selection.coffee index e7a59d077..7f19bf0bc 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -42,6 +42,9 @@ class Selection isSingleScreenLine: -> @getScreenRange().isSingleLine() + autoscrolled: -> + @needsAutoscroll = false + getScreenRange: -> if @anchor new Range(@anchor.getScreenPosition(), @cursor.getScreenPosition())