mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-10-27 19:48:28 +03:00
Merge pull request #8373 from atom/ns-fix-other-gutter-drags
Make gutter dragging experience consistent across selection modes
This commit is contained in:
commit
dfb31d7d50
@ -403,7 +403,7 @@ class TextEditorComponent
|
||||
when 3
|
||||
@editor.getLastSelection().selectLine()
|
||||
|
||||
@handleDragUntilMouseUp event, (screenPosition) =>
|
||||
@handleDragUntilMouseUp (screenPosition) =>
|
||||
@editor.selectToScreenPosition(screenPosition, true)
|
||||
|
||||
onLineNumberGutterMouseDown: (event) =>
|
||||
@ -419,61 +419,36 @@ class TextEditorComponent
|
||||
@onGutterClick(event)
|
||||
|
||||
onGutterClick: (event) =>
|
||||
clickedRow = @screenPositionForMouseEvent(event).row
|
||||
clickedBufferRow = @editor.bufferRowForScreenRow(clickedRow)
|
||||
|
||||
clickedBufferRow = @editor.bufferRowForScreenRow(@screenPositionForMouseEvent(event).row)
|
||||
@editor.setSelectedBufferRange([[clickedBufferRow, 0], [clickedBufferRow + 1, 0]], preserveFolds: true)
|
||||
|
||||
@handleDragUntilMouseUp event, (screenPosition) =>
|
||||
dragRow = screenPosition.row
|
||||
dragBufferRow = @editor.bufferRowForScreenRow(dragRow)
|
||||
if dragBufferRow < clickedBufferRow # dragging up
|
||||
@editor.setSelectedBufferRange([[dragBufferRow, 0], [clickedBufferRow + 1, 0]], reversed: true, preserveFolds: true, autoscroll: false)
|
||||
else
|
||||
@editor.setSelectedBufferRange([[clickedBufferRow, 0], [dragBufferRow + 1, 0]], reversed: false, preserveFolds: true, autoscroll: false)
|
||||
@editor.getLastCursor().autoscroll()
|
||||
@handleGutterDrag(clickedBufferRow)
|
||||
|
||||
onGutterMetaClick: (event) =>
|
||||
clickedRow = @screenPositionForMouseEvent(event).row
|
||||
clickedBufferRow = @editor.bufferRowForScreenRow(clickedRow)
|
||||
|
||||
bufferRange = new Range([clickedBufferRow, 0], [clickedBufferRow + 1, 0])
|
||||
rowSelection = @editor.addSelectionForBufferRange(bufferRange, preserveFolds: true)
|
||||
|
||||
@handleDragUntilMouseUp event, (screenPosition) =>
|
||||
dragRow = screenPosition.row
|
||||
dragBufferRow = @editor.bufferRowForScreenRow(dragRow)
|
||||
|
||||
if dragBufferRow < clickedBufferRow # dragging up
|
||||
rowSelection.setBufferRange([[dragBufferRow, 0], [clickedBufferRow + 1, 0]], preserveFolds: true)
|
||||
else
|
||||
rowSelection.setBufferRange([[clickedBufferRow, 0], [dragBufferRow + 1, 0]], preserveFolds: true)
|
||||
|
||||
# The merge process will possibly destroy the current selection because
|
||||
# it will be merged into another one. Therefore, we need to obtain a
|
||||
# reference to the new selection that contains the originally selected row
|
||||
rowSelection = _.find @editor.getSelections(), (selection) ->
|
||||
selection.intersectsBufferRange(bufferRange)
|
||||
clickedBufferRow = @editor.bufferRowForScreenRow(@screenPositionForMouseEvent(event).row)
|
||||
@editor.addSelectionForBufferRange([[clickedBufferRow, 0], [clickedBufferRow + 1, 0]], preserveFolds: true)
|
||||
@handleGutterDrag(clickedBufferRow)
|
||||
|
||||
onGutterShiftClick: (event) =>
|
||||
clickedRow = @screenPositionForMouseEvent(event).row
|
||||
clickedBufferRow = @editor.bufferRowForScreenRow(clickedRow)
|
||||
tailPosition = @editor.getLastSelection().getTailScreenPosition()
|
||||
tailBufferPosition = @editor.bufferPositionForScreenPosition(tailPosition)
|
||||
clickedBufferRow = @editor.bufferRowForScreenRow(@screenPositionForMouseEvent(event).row)
|
||||
tailBufferPosition = @editor.getLastSelection().getTailBufferPosition()
|
||||
|
||||
if clickedRow < tailPosition.row
|
||||
@editor.selectToBufferPosition([clickedBufferRow, 0])
|
||||
if clickedBufferRow < tailBufferPosition.row
|
||||
@editor.selectToBufferPosition([clickedBufferRow, 0], true)
|
||||
else
|
||||
@editor.selectToBufferPosition([clickedBufferRow + 1, 0])
|
||||
@editor.selectToBufferPosition([clickedBufferRow + 1, 0], true)
|
||||
|
||||
@handleDragUntilMouseUp event, (screenPosition) =>
|
||||
dragRow = screenPosition.row
|
||||
dragBufferRow = @editor.bufferRowForScreenRow(dragRow)
|
||||
if dragRow < tailPosition.row # dragging up
|
||||
@editor.setSelectedBufferRange([[dragBufferRow, 0], tailBufferPosition], preserveFolds: true)
|
||||
@handleGutterDrag(tailBufferPosition.row, tailBufferPosition.column)
|
||||
|
||||
handleGutterDrag: (tailRow, tailColumn) ->
|
||||
tailPosition = [tailRow, tailColumn] if tailColumn?
|
||||
|
||||
@handleDragUntilMouseUp (screenPosition) =>
|
||||
dragRow = @editor.bufferPositionForScreenPosition(screenPosition).row
|
||||
if dragRow < tailRow
|
||||
@editor.getLastSelection().setBufferRange([[dragRow, 0], tailPosition ? [tailRow + 1, 0]], reversed: true, autoscroll: false, preserveFolds: true)
|
||||
else
|
||||
@editor.setSelectedBufferRange([tailBufferPosition, [dragBufferRow + 1, 0]], preserveFolds: true)
|
||||
|
||||
@editor.getLastSelection().setBufferRange([tailPosition ? [tailRow, 0], [dragRow + 1, 0]], reversed: false, autoscroll: false, preserveFolds: true)
|
||||
@editor.getLastCursor().autoscroll()
|
||||
|
||||
onStylesheetsChanged: (styleElement) =>
|
||||
return unless @performedInitialMeasurement
|
||||
@ -523,7 +498,7 @@ class TextEditorComponent
|
||||
onCursorMoved: =>
|
||||
@cursorMoved = true
|
||||
|
||||
handleDragUntilMouseUp: (event, dragHandler) =>
|
||||
handleDragUntilMouseUp: (dragHandler) =>
|
||||
dragging = false
|
||||
lastMousePosition = {}
|
||||
animationLoop = =>
|
||||
|
Loading…
Reference in New Issue
Block a user