Store autoscroll state on Selection and Cursor models

This commit is contained in:
Corey Johnson & Nathan Sobo 2012-11-30 12:08:33 -07:00
parent b9e847d290
commit be2b9ee100
5 changed files with 26 additions and 7 deletions

View File

@ -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())

View File

@ -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

View File

@ -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()

View File

@ -66,6 +66,12 @@ class SelectionView extends View
getBufferRange: ->
@selection.getBufferRange()
needsAutoscroll: ->
@selection.needsAutoscroll
autoscrolled: ->
@selection.autoscrolled()
remove: ->
@editor.removeSelectionView(this)
super

View File

@ -42,6 +42,9 @@ class Selection
isSingleScreenLine: ->
@getScreenRange().isSingleLine()
autoscrolled: ->
@needsAutoscroll = false
getScreenRange: ->
if @anchor
new Range(@anchor.getScreenPosition(), @cursor.getScreenPosition())