improve MouseWheel behavior

This commit is contained in:
nightwing 2013-02-04 00:01:19 +04:00
commit ed7750e70e
2 changed files with 10 additions and 20 deletions

View file

@ -297,28 +297,18 @@ function DefaultHandlers(mouseHandler) {
}; };
this.onMouseWheel = function(ev) { this.onMouseWheel = function(ev) {
if (ev.getShiftKey() || ev.getAccelKey()){ if (ev.getShiftKey() || ev.getAccelKey())
return; return;
} var t = ev.domEvent.timeStamp;
var dt = t - (this.$lastScrollTime||0);
var editor = this.editor; var editor = this.editor;
var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
if (isScrolable) { if (isScrolable || dt < 200) {
this.$passScrollEvent = false; this.$lastScrollTime = t;
} else { editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
if (this.$passScrollEvent) return ev.stop();
return;
if (!this.$scrollStopTimeout) {
var self = this;
this.$scrollStopTimeout = setTimeout(function() {
self.$passScrollEvent = true;
self.$scrollStopTimeout = null;
}, 200);
}
} }
editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
return ev.preventDefault();
}; };
}).call(DefaultHandlers.prototype); }).call(DefaultHandlers.prototype);

View file

@ -1122,9 +1122,9 @@ var VirtualRenderer = function(container, theme) {
* @returns {Boolean} * @returns {Boolean}
**/ **/
this.isScrollableBy = function(deltaX, deltaY) { this.isScrollableBy = function(deltaX, deltaY) {
if (deltaY < 0 && this.session.getScrollTop() > 0) if (deltaY < 0 && this.session.getScrollTop() >= 1)
return true; 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; return true;
// todo: handle horizontal scrolling // todo: handle horizontal scrolling
}; };