diff --git a/demo/autoresize.html b/demo/autoresize.html index 73a87599..ef4cbe04 100644 --- a/demo/autoresize.html +++ b/demo/autoresize.html @@ -7,14 +7,13 @@ @@ -24,6 +23,8 @@
minHeight = 2 lines+ + @@ -46,6 +47,14 @@ require(["ace/ace"], function(ace) { editor2.setOption("maxLines", 30); editor2.setOption("minLines", 2); + var editor = ace.edit("editor3"); + editor.setOptions({ + maxLines: 100, + autoScrollEditorIntoView: true, + maxLines: 8 + }); + editor.renderer.setScrollMargin(10, 10, 10, 10); + var editor = ace.edit("editor"); editor.setTheme("ace/theme/tomorrow"); editor.session.setMode("ace/mode/html"); diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 27da0dcb..386bbf00 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -919,6 +919,8 @@ var VirtualRenderer = function(container, theme) { (this.$minLines||1) * this.lineHeight, Math.min(maxHeight, height) ) + this.scrollMargin.v + (this.$extraHeight || 0); + if (this.$horizScroll) + desiredHeight += this.scrollBarH.getHeight(); var vScroll = height > maxHeight; if (desiredHeight != this.desiredHeight || @@ -939,9 +941,6 @@ var VirtualRenderer = function(container, theme) { }; this.$computeLayerConfig = function() { - if (this.$maxLines && this.lineHeight > 1) - this.$autosize(); - var session = this.session; var size = this.$size; @@ -949,9 +948,6 @@ var VirtualRenderer = function(container, theme) { var screenLines = this.session.getScreenLength(); var maxHeight = screenLines * this.lineHeight; - var offset = this.scrollTop % this.lineHeight; - var minHeight = size.scrollerHeight + this.lineHeight; - var longestLine = this.$getLongestLine(); var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || @@ -962,6 +958,12 @@ var VirtualRenderer = function(container, theme) { this.$horizScroll = horizScroll; this.scrollBarH.setVisible(horizScroll); } + // autoresize only after updating hscroll to include scrollbar height in desired height + if (this.$maxLines && this.lineHeight > 1) + this.$autosize(); + + var offset = this.scrollTop % this.lineHeight; + var minHeight = size.scrollerHeight + this.lineHeight; var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd