From ed7750e70e86bcff5122d663949aa741043e99cc Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 4 Feb 2013 00:01:19 +0400 Subject: [PATCH] improve MouseWheel behavior --- lib/ace/mouse/default_handlers.js | 26 ++++++++------------------ lib/ace/virtual_renderer.js | 4 ++-- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/lib/ace/mouse/default_handlers.js b/lib/ace/mouse/default_handlers.js index a6ce5c61..3a7e97af 100644 --- a/lib/ace/mouse/default_handlers.js +++ b/lib/ace/mouse/default_handlers.js @@ -297,28 +297,18 @@ function DefaultHandlers(mouseHandler) { }; this.onMouseWheel = function(ev) { - if (ev.getShiftKey() || ev.getAccelKey()){ + if (ev.getShiftKey() || ev.getAccelKey()) return; - } + var t = ev.domEvent.timeStamp; + var dt = t - (this.$lastScrollTime||0); + var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - if (isScrolable) { - this.$passScrollEvent = false; - } else { - if (this.$passScrollEvent) - return; - - if (!this.$scrollStopTimeout) { - var self = this; - this.$scrollStopTimeout = setTimeout(function() { - self.$passScrollEvent = true; - self.$scrollStopTimeout = null; - }, 200); - } + if (isScrolable || dt < 200) { + this.$lastScrollTime = t; + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.stop(); } - - editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - return ev.preventDefault(); }; }).call(DefaultHandlers.prototype); diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 1a9e0721..a95f999d 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -1122,9 +1122,9 @@ var VirtualRenderer = function(container, theme) { * @returns {Boolean} **/ this.isScrollableBy = function(deltaX, deltaY) { - if (deltaY < 0 && this.session.getScrollTop() > 0) + if (deltaY < 0 && this.session.getScrollTop() >= 1) return true; - if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight < this.layerConfig.maxHeight) + if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1) return true; // todo: handle horizontal scrolling };