Skip to content
This repository has been archived by the owner on Mar 3, 2023. It is now read-only.

Commit

Permalink
Merge pull request #15487 from atom/as-scroll-sensitivity
Browse files Browse the repository at this point in the history
Always honor scroll intent on mousewheel
  • Loading branch information
Antonio Scandurra committed Sep 2, 2017
1 parent bdeb65b commit bdbcc20
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
35 changes: 34 additions & 1 deletion spec/text-editor-component-spec.js
Expand Up @@ -1214,7 +1214,6 @@ describe('TextEditorComponent', () => {
}

{
global.debug = true
const expectedScrollTop = component.getScrollTop()
const expectedScrollLeft = 20 * (scrollSensitivity / 100)
component.didMouseWheel({deltaX: 20, deltaY: -10})
Expand All @@ -1233,6 +1232,40 @@ describe('TextEditorComponent', () => {
}
})

it('always scrolls by a minimum of 1, even when the delta is small or the scroll sensitivity is low', () => {
const scrollSensitivity = 10
const {component, editor} = buildComponent({height: 50, width: 50, scrollSensitivity})

{
component.didMouseWheel({deltaX: 0, deltaY: 3})
expect(component.getScrollTop()).toBe(1)
expect(component.getScrollLeft()).toBe(0)
expect(component.refs.content.style.transform).toBe(`translate(0px, -1px)`)
}

{
component.didMouseWheel({deltaX: 4, deltaY: 0})
expect(component.getScrollTop()).toBe(1)
expect(component.getScrollLeft()).toBe(1)
expect(component.refs.content.style.transform).toBe(`translate(-1px, -1px)`)
}

editor.update({scrollSensitivity: 100})
{
component.didMouseWheel({deltaX: 0, deltaY: -0.3})
expect(component.getScrollTop()).toBe(0)
expect(component.getScrollLeft()).toBe(1)
expect(component.refs.content.style.transform).toBe(`translate(-1px, 0px)`)
}

{
component.didMouseWheel({deltaX: -0.1, deltaY: 0})
expect(component.getScrollTop()).toBe(0)
expect(component.getScrollLeft()).toBe(0)
expect(component.refs.content.style.transform).toBe(`translate(0px, 0px)`)
}
})

it('inverts deltaX and deltaY when holding shift on Windows and Linux', async () => {
const scrollSensitivity = 50
const {component, editor} = buildComponent({height: 50, width: 50, scrollSensitivity})
Expand Down
8 changes: 6 additions & 2 deletions src/text-editor-component.js
Expand Up @@ -1525,11 +1525,15 @@ class TextEditorComponent {
let {deltaX, deltaY} = event

if (Math.abs(deltaX) > Math.abs(deltaY)) {
deltaX = deltaX * scrollSensitivity
deltaX = (Math.sign(deltaX) === 1)
? Math.max(1, deltaX * scrollSensitivity)
: Math.min(-1, deltaX * scrollSensitivity)
deltaY = 0
} else {
deltaX = 0
deltaY = deltaY * scrollSensitivity
deltaY = (Math.sign(deltaY) === 1)
? Math.max(1, deltaY * scrollSensitivity)
: Math.min(-1, deltaY * scrollSensitivity)
}

if (this.getPlatform() !== 'darwin' && event.shiftKey) {
Expand Down

0 comments on commit bdbcc20

Please sign in to comment.