From ddf5d1ab4567d5c2eb2526d85efb921dfe7b5a3c Mon Sep 17 00:00:00 2001 From: DanyaPostfactum Date: Thu, 12 Sep 2013 02:48:46 +1000 Subject: [PATCH] Improve autoscroll behavior for text dragging --- lib/ace/css/editor.css | 1 + lib/ace/mouse/dragdrop_handler.js | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index 1244c1b0..89141ec2 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -16,6 +16,7 @@ top: 0; bottom: 0; background-color: inherit; + z-index: 8; } .ace_content { diff --git a/lib/ace/mouse/dragdrop_handler.js b/lib/ace/mouse/dragdrop_handler.js index fcd13840..8d760e6e 100644 --- a/lib/ace/mouse/dragdrop_handler.js +++ b/lib/ace/mouse/dragdrop_handler.js @@ -193,16 +193,15 @@ function DragdropHandler(mouseHandler) { }; var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); - var scrollX = 0; - var scrollY = 0; + var scrollCursor = {row: dragCursor.row, column: dragCursor.column}; if (nearestXOffset / characterWidth <= 2) { - scrollX = characterWidth * (offsets.x.left < offsets.x.right ? -1 : +1); + scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); } if (nearestYOffset / lineHeight <= 1) { - scrollY = lineHeight * (offsets.y.top < offsets.y.bottom ? -1 : +1); + scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); } editor.moveCursorToPosition(dragCursor); - editor.renderer.scrollBy(scrollX, scrollY); + editor.renderer.scrollCursorIntoView(scrollCursor); } function addDragMarker() { @@ -220,7 +219,9 @@ function DragdropHandler(mouseHandler) { clearInterval(timerId); editor.session.removeMarker(dragSelectionMarker); dragSelectionMarker = null; + editor.$blockScrolling += 1; editor.selection.fromOrientedRange(range); + editor.$blockScrolling -= 1; range = null; counter = 0; event.removeListener(document, "mousemove", onMouseMove);