From fd182ea76f370b31482e508c97ab8b8a45adb73a Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 10 Jul 2014 12:56:11 +0100 Subject: [PATCH] Redraw lines and active line highlight when offscreen updates are made When setUseWrapMode is true, if some text is inserted into a line which is above the cursor and offscreen, then the renderer did not previously redraw the lines or active line highlight. However, if this insert causes the line to wrap onto another line then everything is shifted down by one visual line, leaving the onscreen lines in an out of date state. With this commit, the onscreen lines and active line highlight are now redrawn when this happens. --- lib/ace/editor.js | 1 + lib/ace/virtual_renderer.js | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 6a68e5de..e198ecaa 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -708,6 +708,7 @@ var Editor = function(renderer, session) { // update cursor because tab characters can influence the cursor position this.$cursorChange(); + this.$updateHighlightActiveLine(); }; this.onTokenizerUpdate = function(e) { diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 33f3a906..dfb435be 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -276,8 +276,13 @@ var VirtualRenderer = function(container, theme) { this.$changedLines.lastRow = lastRow; } - if (this.$changedLines.firstRow > this.layerConfig.lastRow || - this.$changedLines.lastRow < this.layerConfig.firstRow) + // If the change happened offscreen above us then it's possible + // that a new line wrap will affect the position of the lines on our + // screen so they need redrawn. + if (this.$changedLines.lastRow < this.layerConfig.firstRow) + this.$changedLines.lastRow = this.layerConfig.lastRow + + if (this.$changedLines.firstRow > this.layerConfig.lastRow) return; this.$loop.schedule(this.CHANGE_LINES); };