mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-22 00:19:24 +03:00
Store autoscroll state on Selection and Cursor models
This commit is contained in:
parent
b9e847d290
commit
be2b9ee100
@ -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())
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -66,6 +66,12 @@ class SelectionView extends View
|
||||
getBufferRange: ->
|
||||
@selection.getBufferRange()
|
||||
|
||||
needsAutoscroll: ->
|
||||
@selection.needsAutoscroll
|
||||
|
||||
autoscrolled: ->
|
||||
@selection.autoscrolled()
|
||||
|
||||
remove: ->
|
||||
@editor.removeSelectionView(this)
|
||||
super
|
||||
|
@ -42,6 +42,9 @@ class Selection
|
||||
isSingleScreenLine: ->
|
||||
@getScreenRange().isSingleLine()
|
||||
|
||||
autoscrolled: ->
|
||||
@needsAutoscroll = false
|
||||
|
||||
getScreenRange: ->
|
||||
if @anchor
|
||||
new Range(@anchor.getScreenPosition(), @cursor.getScreenPosition())
|
||||
|
Loading…
Reference in New Issue
Block a user