Disable auto-scroll and make overflow-x hidden when soft-wrap is enabled

This commit is contained in:
Corey Johnson
2012-03-07 11:20:47 -08:00
parent 461dd5cd37
commit 29c697faaa
4 changed files with 65 additions and 2 deletions

View File

@@ -353,6 +353,60 @@ describe "Editor", ->
editor.setCursorScreenPosition([2, 3])
expect(editor.lines.scrollLeft()).toBe(0)
describe "when soft-wrap is on", ->
beforeEach ->
editor.setSoftWrap(true)
it "does not scroll the buffer", ->
editor.width(charWidth * 30)
# moving right
editor.setCursorScreenPosition([2, 24])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 25])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 28])
expect(editor.scrollLeft()).toBe 0
# moving left
editor.setCursorScreenPosition([2, 9])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 8])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 5])
expect(editor.scrollLeft()).toBe 0
describe "when soft-wrap is on", ->
beforeEach ->
editor.setSoftWrap(true)
it "does not scroll the buffer", ->
editor.width(charWidth * 30)
# moving right
editor.setCursorScreenPosition([2, 24])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 25])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 28])
expect(editor.scrollLeft()).toBe 0
# moving left
editor.setCursorScreenPosition([2, 9])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 8])
expect(editor.scrollLeft()).toBe 0
editor.setCursorScreenPosition([2, 5])
expect(editor.scrollLeft()).toBe 0
describe "when left is pressed on the first column", ->
describe "when there is a previous line", ->
it "wraps to the end of the previous line", ->

View File

@@ -128,7 +128,9 @@ class Cursor extends View
@editor.scrollTop(desiredTop)
autoScrollHorizontally: (position) ->
charsInView = @editor.lines.width() / @width()
return if @editor.softWrap
charsInView = @editor.width() / @width()
maxScrollMargin = Math.floor((charsInView - 1) / 2)
scrollMargin = Math.min(@editor.hScrollMargin, maxScrollMargin)
margin = scrollMargin * @width()

View File

@@ -230,10 +230,13 @@ class Editor extends View
setSoftWrap: (@softWrap) ->
@setMaxLineLength()
if @softWrap
@addClass 'soft-wrap'
@_setMaxLineLength = => @setMaxLineLength()
$(window).on 'resize', @_setMaxLineLength
else
$(window).off 'resize', @_setMaxLineLength
@removeClass 'soft-wrap'
clipScreenPosition: (screenPosition, options={}) ->
@renderer.clipScreenPosition(screenPosition, options)

View File

@@ -12,6 +12,10 @@
-webkit-user-select: none;
}
.editor.soft-wrap {
overflow-x: hidden;
}
.editor .content {
display: -webkit-flexbox;
}
@@ -24,7 +28,7 @@
}
.editor .gutter.drop-shadow {
-webkit-box-shadow: -2px 0px 10px 2px #222;
-webkit-box-shadow: -2px 0px 10px 2px #222;
}
.editor .lines {