From b198acc995fdeeb348ac7948bc66c6dbd1394570 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 23 Sep 2015 15:24:35 +0200 Subject: [PATCH] Fix soft wrapping when editorWidthInChars is used --- spec/text-editor-presenter-spec.coffee | 6 ++++++ src/display-buffer.coffee | 4 ++-- src/text-editor-presenter.coffee | 14 ++++++++++---- src/text-editor.coffee | 4 ++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index bb2e492eb..d726685c5 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -2132,6 +2132,12 @@ describe "TextEditorPresenter", -> expectValues lineNumberStateForScreenRow(presenter, 6), {screenRow: 6, bufferRow: 3, softWrapped: true} expectValues lineNumberStateForScreenRow(presenter, 7), {screenRow: 7, bufferRow: 4, softWrapped: false} + presenter.setContentFrameWidth(500) + + expectValues lineNumberStateForScreenRow(presenter, 5), {screenRow: 5, bufferRow: 4, softWrapped: false} + expectValues lineNumberStateForScreenRow(presenter, 6), {screenRow: 6, bufferRow: 5, softWrapped: false} + expectValues lineNumberStateForScreenRow(presenter, 7), {screenRow: 7, bufferRow: 6, softWrapped: false} + describe ".decorationClasses", -> it "adds decoration classes to the relevant line number state objects, both initially and when decorations change", -> marker1 = editor.markBufferRange([[4, 0], [6, 2]], invalidate: 'touch', maintainHistory: true) diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 42ca817ab..8679ad868 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -198,13 +198,13 @@ class DisplayBuffer extends Model setVerticalScrollbarWidth: (@verticalScrollbarWidth) -> @verticalScrollbarWidth getHeight: -> - @height or 0 + @height setHeight: (@height) -> @height getWidth: -> - @width or 0 + @width setWidth: (newWidth) -> oldWidth = @width diff --git a/src/text-editor-presenter.coffee b/src/text-editor-presenter.coffee index 0c3294b04..77bb87f53 100644 --- a/src/text-editor-presenter.coffee +++ b/src/text-editor-presenter.coffee @@ -32,6 +32,7 @@ class TextEditorPresenter @lineNumberDecorationsByScreenRow = {} @customGutterDecorationsByGutterNameAndScreenRow = {} @transferMeasurementsToModel() + @transferMeasurementsFromModel() @observeModel() @observeConfig() @buildState() @@ -53,6 +54,9 @@ class TextEditorPresenter @model.setLineHeightInPixels(@lineHeight) if @lineHeight? @model.setDefaultCharWidth(@baseCharacterWidth) if @baseCharacterWidth? + transferMeasurementsFromModel: -> + @editorWidthInChars = @model.getEditorWidthInChars() + # Private: Determines whether {TextEditorPresenter} is currently batching changes. # Returns a {Boolean}, `true` if is collecting changes, `false` if is applying them. isBatching: -> @@ -677,7 +681,6 @@ class TextEditorPresenter @updateScrollHeight() if @contentWidth isnt oldContentWidth - @model.setWidth(Math.min(@clientWidth, @contentWidth)) @updateScrollbarDimensions() @updateScrollWidth() @@ -685,9 +688,10 @@ class TextEditorPresenter return unless @height? and @horizontalScrollbarHeight? clientHeight = @height - @horizontalScrollbarHeight + @model.setHeight(clientHeight) + unless @clientHeight is clientHeight @clientHeight = clientHeight - @model.setHeight(@clientHeight) @updateScrollHeight() @updateScrollTop() @@ -695,9 +699,10 @@ class TextEditorPresenter return unless @contentFrameWidth? and @verticalScrollbarWidth? clientWidth = @contentFrameWidth - @verticalScrollbarWidth + @model.setWidth(clientWidth) unless @editorWidthInChars + unless @clientWidth is clientWidth @clientWidth = clientWidth - @model.setWidth(Math.min(@clientWidth, @contentWidth)) @updateScrollWidth() @updateScrollLeft() @@ -941,9 +946,10 @@ class TextEditorPresenter @updateEndRow() setContentFrameWidth: (contentFrameWidth) -> - unless @contentFrameWidth is contentFrameWidth + if @contentFrameWidth isnt contentFrameWidth or @editorWidthInChars? oldContentFrameWidth = @contentFrameWidth @contentFrameWidth = contentFrameWidth + @editorWidthInChars = null @updateScrollbarDimensions() @updateClientWidth() @shouldUpdateVerticalScrollState = true diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 9f3e230fb..c77b2e3fb 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -554,6 +554,10 @@ class TextEditor extends Model setEditorWidthInChars: (editorWidthInChars) -> @displayBuffer.setEditorWidthInChars(editorWidthInChars) + # Returns the editor width in characters. + getEditorWidthInChars: -> + @displayBuffer.getEditorWidthInChars() + ### Section: File Details ###