From 05a9bfd332c6eb340e373ac4e8172069cc6a25c7 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Mon, 20 Sep 2010 11:48:13 +0200 Subject: [PATCH] 2d mouse wheel support --- src/ace/Editor.js | 3 +-- src/ace/VirtualRenderer.js | 5 +++++ src/ace/lib/event.js | 22 +++++++++++++++++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/ace/Editor.js b/src/ace/Editor.js index b8cef49d..39afc06b 100644 --- a/src/ace/Editor.js +++ b/src/ace/Editor.js @@ -323,8 +323,7 @@ var Editor = function(renderer, doc) { }; this.onMouseWheel = function(e) { - var delta = e.wheel; - this.renderer.scrollToY(this.renderer.getScrollTop() - (delta * 15)); + this.renderer.scrollBy(e.wheelX, e.wheelY); return ace.preventDefault(e); }; diff --git a/src/ace/VirtualRenderer.js b/src/ace/VirtualRenderer.js index 7efb57ec..60cfe9cc 100644 --- a/src/ace/VirtualRenderer.js +++ b/src/ace/VirtualRenderer.js @@ -314,6 +314,11 @@ var VirtualRenderer = function(container) { } }; + this.scrollBy = function(deltaX, deltaY) { + deltaY && this.scrollToY(this.scrollTop + deltaY); + deltaX && (this.scroller.scrollLeft += deltaX); + }; + this.screenToTextCoordinates = function(pageX, pageY) { var canvasPos = this.scroller.getBoundingClientRect(); diff --git a/src/ace/lib/event.js b/src/ace/lib/event.js index 9b574da5..f0d4fdae 100644 --- a/src/ace/lib/event.js +++ b/src/ace/lib/event.js @@ -110,8 +110,24 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) { event.addMouseWheelListener = function(el, callback) { var listener = function(e) { - e.wheel = (e.wheelDelta) ? e.wheelDelta / 120 - : -(e.detail || 0) / 3; + if (e.wheelDelta !== undefined) { + if (e.wheelDeltaX !== undefined) { + e.wheelX = e.wheelDeltaX / 8; + e.wheelY = e.wheelDeltaY / 8; + } else { + e.wheelX = 0; + e.wheelY = e.wheelDelta / 8; + } + } + else { + if (e.axis && e.axis == e.HORIZONTAL_AXIS) { + e.wheelX = (e.detail || 0) * 5; + e.wheelY = 0; + } else { + e.wheelX = 0; + e.wheelY = (e.detail || 0) * 5; + } + } callback(e); }; event.addListener(el, "DOMMouseScroll", listener); @@ -158,6 +174,6 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) { }); } }; - + return event; }); \ No newline at end of file