fix gutter is too short when hor scrollbar is visible
This commit is contained in:
parent
048d9589c7
commit
eafe6a7997
2 changed files with 15 additions and 13 deletions
|
|
@ -118,9 +118,9 @@ var Gutter = function(parentEl) {
|
||||||
};
|
};
|
||||||
|
|
||||||
this.update = function(config) {
|
this.update = function(config) {
|
||||||
var firstRow = config.firstRow;
|
|
||||||
var lastRow = config.lastRow;
|
|
||||||
var session = this.session;
|
var session = this.session;
|
||||||
|
var firstRow = config.firstRow;
|
||||||
|
var lastRow = Math.min(config.lastRow + 1, session.getLength() - 1); // needed to compensate
|
||||||
var fold = session.getNextFoldLine(firstRow);
|
var fold = session.getNextFoldLine(firstRow);
|
||||||
var foldStart = fold ? fold.start.row : Infinity;
|
var foldStart = fold ? fold.start.row : Infinity;
|
||||||
var foldWidgets = this.$showFoldWidgets && session.foldWidgets;
|
var foldWidgets = this.$showFoldWidgets && session.foldWidgets;
|
||||||
|
|
|
||||||
|
|
@ -894,18 +894,19 @@ var VirtualRenderer = function(container, theme) {
|
||||||
this.$autosize();
|
this.$autosize();
|
||||||
|
|
||||||
var session = this.session;
|
var session = this.session;
|
||||||
|
var size = this.$size;
|
||||||
|
|
||||||
var hideScrollbars = this.$size.height <= 2 * this.lineHeight;
|
var hideScrollbars = size.height <= 2 * this.lineHeight;
|
||||||
var screenLines = this.session.getScreenLength();
|
var screenLines = this.session.getScreenLength();
|
||||||
var maxHeight = screenLines * this.lineHeight;
|
var maxHeight = screenLines * this.lineHeight;
|
||||||
|
|
||||||
var offset = this.scrollTop % this.lineHeight;
|
var offset = this.scrollTop % this.lineHeight;
|
||||||
var minHeight = this.$size.scrollerHeight + this.lineHeight;
|
var minHeight = size.scrollerHeight + this.lineHeight;
|
||||||
|
|
||||||
var longestLine = this.$getLongestLine();
|
var longestLine = this.$getLongestLine();
|
||||||
|
|
||||||
var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||
|
var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||
|
||||||
this.$size.scrollerWidth - longestLine - 2 * this.$padding < 0);
|
size.scrollerWidth - longestLine - 2 * this.$padding < 0);
|
||||||
|
|
||||||
var hScrollChanged = this.$horizScroll !== horizScroll;
|
var hScrollChanged = this.$horizScroll !== horizScroll;
|
||||||
if (hScrollChanged) {
|
if (hScrollChanged) {
|
||||||
|
|
@ -914,15 +915,15 @@ var VirtualRenderer = function(container, theme) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.$maxLines && this.$scrollPastEnd) {
|
if (!this.$maxLines && this.$scrollPastEnd) {
|
||||||
if (this.scrollTop > maxHeight - this.$size.scrollerHeight)
|
if (this.scrollTop > maxHeight - size.scrollerHeight)
|
||||||
maxHeight += Math.min(
|
maxHeight += Math.min(
|
||||||
(this.$size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd,
|
(size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd,
|
||||||
this.scrollTop - maxHeight + this.$size.scrollerHeight
|
this.scrollTop - maxHeight + size.scrollerHeight
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||
|
var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||
|
||||||
this.$size.scrollerHeight - maxHeight < 0);
|
size.scrollerHeight - maxHeight < 0);
|
||||||
var vScrollChanged = this.$vScroll !== vScroll;
|
var vScrollChanged = this.$vScroll !== vScroll;
|
||||||
if (vScrollChanged) {
|
if (vScrollChanged) {
|
||||||
this.$vScroll = vScroll;
|
this.$vScroll = vScroll;
|
||||||
|
|
@ -930,10 +931,10 @@ var VirtualRenderer = function(container, theme) {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.session.setScrollTop(Math.max(-this.scrollMargin.top,
|
this.session.setScrollTop(Math.max(-this.scrollMargin.top,
|
||||||
Math.min(this.scrollTop, maxHeight - this.$size.scrollerHeight + this.scrollMargin.v)));
|
Math.min(this.scrollTop, maxHeight - size.scrollerHeight + this.scrollMargin.v)));
|
||||||
|
|
||||||
this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft,
|
this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft,
|
||||||
longestLine + 2 * this.$padding - this.$size.scrollerWidth + this.scrollMargin.h)));
|
longestLine + 2 * this.$padding - size.scrollerWidth + this.scrollMargin.h)));
|
||||||
|
|
||||||
var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;
|
var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;
|
||||||
var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));
|
var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));
|
||||||
|
|
@ -955,7 +956,7 @@ var VirtualRenderer = function(container, theme) {
|
||||||
firstRowHeight = session.getRowLength(firstRow) * lineHeight;
|
firstRowHeight = session.getRowLength(firstRow) * lineHeight;
|
||||||
|
|
||||||
lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);
|
lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);
|
||||||
minHeight = this.$size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +
|
minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +
|
||||||
firstRowHeight;
|
firstRowHeight;
|
||||||
|
|
||||||
offset = this.scrollTop - firstRowScreen * lineHeight;
|
offset = this.scrollTop - firstRowScreen * lineHeight;
|
||||||
|
|
@ -964,7 +965,7 @@ var VirtualRenderer = function(container, theme) {
|
||||||
// Horizontal scrollbar visibility may have changed, which changes
|
// Horizontal scrollbar visibility may have changed, which changes
|
||||||
// the client height of the scroller
|
// the client height of the scroller
|
||||||
if (hScrollChanged || vScrollChanged) {
|
if (hScrollChanged || vScrollChanged) {
|
||||||
changes = this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);
|
changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);
|
||||||
this._signal("scrollbarVisibilityChanged");
|
this._signal("scrollbarVisibilityChanged");
|
||||||
if (vScrollChanged)
|
if (vScrollChanged)
|
||||||
longestLine = this.$getLongestLine();
|
longestLine = this.$getLongestLine();
|
||||||
|
|
@ -981,6 +982,7 @@ var VirtualRenderer = function(container, theme) {
|
||||||
minHeight : minHeight,
|
minHeight : minHeight,
|
||||||
maxHeight : maxHeight,
|
maxHeight : maxHeight,
|
||||||
offset : offset,
|
offset : offset,
|
||||||
|
gutterOffset : Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight),
|
||||||
height : this.$size.scrollerHeight
|
height : this.$size.scrollerHeight
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue