mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 07:58:04 +03:00
Introduce Selection object that contains the cursor
All cursor operations will be proxied through the selection, so that the selection can be cleared if necessary.
This commit is contained in:
parent
83c8684f80
commit
c70206fc9c
@ -33,8 +33,8 @@ describe "Editor", ->
|
||||
editor.attachToDom()
|
||||
editor.setPosition(row: 2, column: 2)
|
||||
|
||||
expect(editor.cursor.position().top).toBe(2 * editor.lineHeight)
|
||||
expect(editor.cursor.position().left).toBe(2 * editor.charWidth)
|
||||
expect(editor.getCursor().position().top).toBe(2 * editor.lineHeight)
|
||||
expect(editor.getCursor().position().left).toBe(2 * editor.charWidth)
|
||||
|
||||
describe "when the arrow keys are pressed", ->
|
||||
it "moves the cursor by a single row/column", ->
|
||||
@ -204,8 +204,8 @@ describe "Editor", ->
|
||||
|
||||
editor.attachToDom()
|
||||
|
||||
expect(editor.cursor.position().top).toBe(2 * editor.lineHeight)
|
||||
expect(editor.cursor.position().left).toBe(2 * editor.charWidth)
|
||||
expect(editor.getCursor().position().top).toBe(2 * editor.lineHeight)
|
||||
expect(editor.getCursor().position().left).toBe(2 * editor.charWidth)
|
||||
|
||||
it "is focused", ->
|
||||
editor.attachToDom()
|
||||
|
@ -17,7 +17,7 @@ class Cursor extends Template
|
||||
setPosition: (point) ->
|
||||
@point = @editor.clipPosition(point)
|
||||
@goalColumn = null
|
||||
@updateAbsolutePosition()
|
||||
@updateScreenPosition()
|
||||
|
||||
getPosition: -> @point
|
||||
|
||||
@ -78,7 +78,7 @@ class Cursor extends Template
|
||||
|
||||
@setPosition({row, column})
|
||||
|
||||
updateAbsolutePosition: ->
|
||||
updateScreenPosition: ->
|
||||
position = @editor.pixelPositionFromPoint(@point)
|
||||
@css(position)
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
Template = require 'template'
|
||||
Buffer = require 'buffer'
|
||||
Cursor = require 'cursor'
|
||||
Selection = require 'selection'
|
||||
$ = require 'jquery'
|
||||
$$ = require 'template/builder'
|
||||
_ = require 'underscore'
|
||||
@ -14,20 +14,17 @@ class Editor extends Template
|
||||
|
||||
viewProperties:
|
||||
buffer: null
|
||||
cursor: null
|
||||
selection: null
|
||||
scrollMargin: 2
|
||||
|
||||
initialize: () ->
|
||||
requireStylesheet 'editor.css'
|
||||
|
||||
@bindKeys()
|
||||
@attachCursor()
|
||||
@selection = Selection.build(this)
|
||||
@append(@selection)
|
||||
@handleEvents()
|
||||
@setBuffer(new Buffer)
|
||||
|
||||
attachCursor: ->
|
||||
@cursor = Cursor.build(this).appendTo(this)
|
||||
|
||||
bindKeys: ->
|
||||
atom.bindKeys '*',
|
||||
right: 'move-right'
|
||||
@ -84,7 +81,7 @@ class Editor extends Template
|
||||
@updateLineElement(curRow)
|
||||
curRow++
|
||||
|
||||
@cursor.bufferChanged(e)
|
||||
@selection.bufferChanged(e)
|
||||
|
||||
updateLineElement: (row) ->
|
||||
line = @buffer.getLine(row)
|
||||
@ -116,7 +113,7 @@ class Editor extends Template
|
||||
@charWidth = fragment.width()
|
||||
@lineHeight = fragment.outerHeight()
|
||||
fragment.remove()
|
||||
@cursor.updateAbsolutePosition()
|
||||
@selection.updateScreenPosition()
|
||||
|
||||
scrollBottom: (newValue) ->
|
||||
if newValue?
|
||||
@ -126,10 +123,12 @@ class Editor extends Template
|
||||
|
||||
getCurrentLine: -> @buffer.getLine(@getPosition().row)
|
||||
|
||||
moveUp: -> @cursor.moveUp()
|
||||
moveDown: -> @cursor.moveDown()
|
||||
moveRight: -> @cursor.moveRight()
|
||||
moveLeft: -> @cursor.moveLeft()
|
||||
setPosition: (point) -> @cursor.setPosition(point)
|
||||
getPosition: -> @cursor.getPosition()
|
||||
setColumn: (column)-> @cursor.setColumn column
|
||||
getCursor: -> @selection.cursor
|
||||
moveUp: -> @selection.moveCursorUp()
|
||||
moveDown: -> @selection.moveCursorDown()
|
||||
moveRight: -> @selection.moveCursorRight()
|
||||
moveLeft: -> @selection.moveCursorLeft()
|
||||
setPosition: (point) -> @selection.setCursorPosition(point)
|
||||
getPosition: -> @selection.getCursorPosition()
|
||||
setColumn: (column) -> @selection.setCursorColumn(column)
|
||||
|
||||
|
52
src/atom/selection.coffee
Normal file
52
src/atom/selection.coffee
Normal file
@ -0,0 +1,52 @@
|
||||
Template = require 'template'
|
||||
Cursor = require 'cursor'
|
||||
|
||||
module.exports =
|
||||
class Selection extends Template
|
||||
content: ->
|
||||
@div()
|
||||
|
||||
viewProperties:
|
||||
initialize: (editor) ->
|
||||
@editor = editor
|
||||
@cursor = Cursor.build(editor).appendTo(this)
|
||||
|
||||
bufferChanged: (e) ->
|
||||
@cursor.setPosition(e.postRange.end)
|
||||
|
||||
updateScreenPosition: ->
|
||||
@cursor.updateScreenPosition()
|
||||
|
||||
setCursorPosition: (point) ->
|
||||
@cursor.setPosition(point)
|
||||
|
||||
getCursorPosition: ->
|
||||
@cursor.getPosition()
|
||||
|
||||
setCursorColumn: (column) ->
|
||||
@cursor.setColumn(column)
|
||||
|
||||
getCursorColumn: ->
|
||||
@cursor.getColumn()
|
||||
|
||||
getCursorRow: ->
|
||||
@cursor.getRow()
|
||||
|
||||
moveCursorUp: ->
|
||||
@cursor.moveUp()
|
||||
|
||||
moveCursorDown: ->
|
||||
@cursor.moveDown()
|
||||
|
||||
moveCursorLeft: ->
|
||||
@cursor.moveLeft()
|
||||
|
||||
moveCursorRight: ->
|
||||
@cursor.moveRight()
|
||||
|
||||
moveCursorToLineEnd: ->
|
||||
@cursor.moveToLineEnd()
|
||||
|
||||
moveCursorToLineStart: ->
|
||||
@cursor.moveToLineStart()
|
||||
|
Loading…
Reference in New Issue
Block a user