Move hidden input to follow cursor to stop spurious scrolling

Commit 8e77c05c fixed scrolling *up* when clicking the buffer while
scrolled down. But it was still scrolling to the far left when typing /
clicking on a really long line. This commit solves both issues by
always positioning the hidden input to the same location as the cursor,
so it doesn't tell webkit to scroll away from the current focus when it
is focused or the user types.
This commit is contained in:
Nathan Sobo
2012-01-31 11:21:08 -07:00
parent d42cdaf157
commit a72dc17b87
2 changed files with 10 additions and 2 deletions

View File

@@ -50,13 +50,18 @@ describe "Editor", ->
describe "cursor movement", ->
describe ".setCursorPosition({row, column})", ->
it "moves the cursor to cover the character at the given row and column", ->
beforeEach ->
editor.attachToDom()
editor.setCursorPosition(row: 2, column: 2)
it "moves the cursor to cover the character at the given row and column", ->
expect(editor.getCursor().position().top).toBe(2 * editor.lineHeight)
expect(editor.getCursor().position().left).toBe(2 * editor.charWidth)
it "moves the hidden input element to the position of the cursor to prevent scrolling misbehavior", ->
expect(editor.hiddenInput.position().top).toBe(2 * editor.lineHeight)
expect(editor.hiddenInput.position().left).toBe(2 * editor.charWidth)
describe "when the arrow keys are pressed", ->
it "moves the cursor by a single row/column", ->
editor.trigger keydownEvent('right')

View File

@@ -66,7 +66,6 @@ class Editor extends Template
handleEvents: ->
@on 'focus', =>
@hiddenInput.css(top: @scrollTop())
@hiddenInput.focus()
false
@@ -79,8 +78,12 @@ class Editor extends Template
@hiddenInput.on "textInput", (e) =>
@insertText(e.originalEvent.data)
@on 'cursor:position-changed', =>
@hiddenInput.css(@pixelPositionFromPoint(@cursor.getPosition()))
@one 'attach', =>
@calculateDimensions()
@hiddenInput.width(@charWidth)
@focus()
buildLineElement: (lineText) ->