From 81508772f378f44715a17ccd51b63c2a86c4028a Mon Sep 17 00:00:00 2001 From: C9 Date: Fri, 30 Nov 2012 04:58:21 -0500 Subject: [PATCH] Initial support for scrolling --- demo/kitchen-sink/demo.js | 26 +++++-- kitchen-sink.html | 3 +- lib/ace/css/editor.css | 16 +++++ lib/ace/layer/mobilescroll.js | 129 ++++++++++++++++++++++++++++++++++ lib/ace/virtual_renderer.js | 8 +++ 5 files changed, 174 insertions(+), 8 deletions(-) create mode 100644 lib/ace/layer/mobilescroll.js diff --git a/demo/kitchen-sink/demo.js b/demo/kitchen-sink/demo.js index 7a2008e8..3f9eaafc 100644 --- a/demo/kitchen-sink/demo.js +++ b/demo/kitchen-sink/demo.js @@ -394,11 +394,9 @@ bindCheckbox("highlight_token", function(checked) { }); bindCheckbox("mobile_mode", function(checked) { - //var editor = env.editor; /** Mobile test **/ if (checked) { var editorElement = document.getElementById("editor"); - var editorElementChild = editorElement.childNodes[0]; var left = editorElement.offsetLeft; var height = editorElement.style.height; @@ -407,7 +405,7 @@ bindCheckbox("mobile_mode", function(checked) { var mobileScrollDiv = document.createElement("div"); mobileScrollDiv.id = "scrolldiv_container"; - mobileScrollDiv.style.width = width + "px"; + mobileScrollDiv.style.width = (width+30) + "px"; //mobileScrollDiv.style.left = left + "px"; mobileScrollDiv.style.height = height; @@ -419,6 +417,8 @@ bindCheckbox("mobile_mode", function(checked) { var movementDiff = 0, lastMovementPos = 0; var timeDiff = 0, lastTime = 0; + var waitingForLastScroll = false; + document.addEventListener("touchmove", function(e) { //console.log(" TOUCHMOVE", e, mobileScrollDiv.scrollTop); movementDiff = mobileScrollDiv.scrollTop - lastMovementPos; @@ -430,24 +430,30 @@ bindCheckbox("mobile_mode", function(checked) { var movingTimer; document.addEventListener("touchstart", function(e) { if (e.target.className.split(" ").indexOf("ace_content") !== -1) { - if (movingTimer) - clearInterval(movingTimer); + clearInterval(movingTimer); + waitingForLastScroll = false; + movementDiff = 0, lastMovementPos = 0; + timeDiff = 0, lastTime = 0; //console.log("touchstart", e); } }, false); document.addEventListener("touchend", function(e) { if (e.target.className.split(" ").indexOf("ace_content") !== -1) { + waitingForLastScroll = true; + //console.log("TOUCH END", e); //console.log(movementDiff, timeDiff); var position = mobileScrollDiv.scrollTop; //var velocity = (movementDiff/timeDiff) * 4; var velocity = movementDiff; + movingTimer = setInterval(function() { position += velocity; - velocity *= 0.94; + velocity *= 0.949; //console.log(velocity); env.editor.session.setScrollTop(position); + mobileScrollDiv.scrollTop = position; if (Math.abs(velocity) < 4) clearInterval(movingTimer); }, 5); @@ -456,7 +462,13 @@ bindCheckbox("mobile_mode", function(checked) { mobileScrollDiv.onscroll = function(e) { //console.log("Scrolling", e, mobileScrollDiv.scrollTop); - env.editor.session.setScrollTop(mobileScrollDiv.scrollTop); + if (waitingForLastScroll === false) { + env.editor.session.setScrollTop(mobileScrollDiv.scrollTop); + } + // Set the top of the scrolldiv to what the editor scrolltop is + /*else { + mobileScrollDiv.scrollTop = env.editor.session.getScrollTop(); + }*/ }; } else { diff --git a/kitchen-sink.html b/kitchen-sink.html index 9164cbbe..dc205075 100644 --- a/kitchen-sink.html +++ b/kitchen-sink.html @@ -5,6 +5,7 @@ Ace Kitchen Sink +