From eb588d4c7c328488ff2fb9832ef1ac2810325b38 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 29 Mar 2017 20:51:24 -0600 Subject: [PATCH] Test and fix the `center` option to autoscroll --- spec/text-editor-component-spec.js | 12 ++++++++++++ src/text-editor-component.js | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index 5866ea947..d18ba5213 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -523,6 +523,18 @@ describe('TextEditorComponent', () => { expect(component.getScrollBottom()).toBe((6 + 1 + scrollMarginInLines) * component.measurements.lineHeight) }) + it('autoscrolls the given range to the center of the screen if the `center` option is true', async () => { + const {component, editor} = buildComponent({height: 50}) + expect(component.getLastVisibleRow()).toBe(3) + + editor.scrollToScreenRange([[4, 0], [6, 0]], {center: true}) + await component.getNextUpdatePromise() + + const actualScrollCenter = (component.getScrollTop() + component.getScrollBottom()) / 2 + const expectedScrollCenter = Math.round((4 + 7) / 2 * component.getLineHeight()) + expect(actualScrollCenter).toBe(expectedScrollCenter) + }) + it('automatically scrolls horizontally when the requested range is within the horizontal scroll margin of the right edge of the gutter or right edge of the scroll container', async () => { const {component, element, editor} = buildComponent() const {scrollContainer} = component.refs diff --git a/src/text-editor-component.js b/src/text-editor-component.js index c30f668a9..a49e7fd30 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -1472,8 +1472,8 @@ class TextEditorComponent { if (options && options.center) { const desiredScrollCenter = (screenRangeTop + screenRangeBottom) / 2 if (desiredScrollCenter < this.getScrollTop() || desiredScrollCenter > this.getScrollBottom()) { - desiredScrollTop = desiredScrollCenter - this.measurements.clientHeight / 2 - desiredScrollBottom = desiredScrollCenter + this.measurements.clientHeight / 2 + desiredScrollTop = desiredScrollCenter - this.getScrollContainerClientHeight() / 2 + desiredScrollBottom = desiredScrollCenter + this.getScrollContainerClientHeight() / 2 } } else { desiredScrollTop = screenRangeTop - verticalScrollMargin