Adding/removing SelectionViews through Editor#updateDisplay

This commit is contained in:
Nathan Sobo
2012-11-13 15:06:32 -07:00
parent c09249313b
commit f96cf439c0
2 changed files with 19 additions and 9 deletions

View File

@@ -46,6 +46,7 @@ class Editor extends View
lineOverdraw: 100
pendingChanges: null
newCursors: null
newSelections: null
@deserialize: (state, rootView) ->
editSessions = state.editSessions.map (state) -> EditSession.deserialize(state, rootView.project)
@@ -66,6 +67,7 @@ class Editor extends View
@editSessions = []
@pendingChanges = []
@newCursors = []
@newSelections = []
if editSession?
@editSessions.push editSession
@@ -666,8 +668,15 @@ class Editor extends View
cursorView.updateDisplay(options)
updateSelectionViews: ->
if @newSelections.length > 0
@addSelectionView(selection) for selection in @newSelections
@newSelections = []
for selectionView in @getSelectionViews()
selectionView.updateDisplay()
if selectionView.destroyed
selectionView.remove()
else
selectionView.updateDisplay()
syncCursorAnimations: ->
for cursorView in @getCursorViews()
@@ -745,16 +754,15 @@ class Editor extends View
@updateLayerDimensions()
@setScrollPositionFromActiveEditSession()
@addCursorView(cursor, autoscroll: false) for cursor in @activeEditSession.getCursors()
@addSelectionView(selection) for selection in @activeEditSession.getSelections()
@activeEditSession.on 'add-cursor', (cursor) =>
@newCursors.push(cursor)
@activeEditSession.on 'add-selection', (selection) =>
@newCursors.push(selection.cursor)
@newSelections.push(selection)
@updateDisplay(autoscroll: true)
@activeEditSession.on 'add-selection', (selection) => @addSelectionView(selection)
@activeEditSession.on 'screen-lines-change', (e) => @handleDisplayBufferChange(e)
@newCursors = @activeEditSession.getCursors()
@newSelections = @activeEditSession.getSelections()
@updateDisplay(autoscroll: false)
updateDisplay: (options) ->

View File

@@ -9,12 +9,14 @@ class SelectionView extends View
@div()
regions: null
destroyed: false
initialize: ({@editor, @selection} = {}) ->
@regions = []
@selection.on 'change-screen-range', => @updateDisplay()
@selection.on 'destroy', => @remove()
@updateDisplay()
@selection.on 'destroy', =>
@destroyed = true
@editor.updateDisplay()
updateDisplay: ->
@clearRegions()