public void AdjustScrollBars() { _adjustScrollBarsOnNextUpdate = false; VScrollBar.Minimum = 0; // number of visible lines in document (folding!) VScrollBar.Maximum = TextArea.MaxVScrollValue; int max = 0; int firstLine = TextArea.FirstVisibleLine; int lastLine = Document.GetFirstLogicalLine(TextArea.FirstPhysicalLine + TextArea.VisibleLineCount); if (lastLine >= Document.TotalNumberOfLines) { lastLine = Document.TotalNumberOfLines - 1; } if (_lineLengthCache == null || _lineLengthCache.Length <= lastLine) { _lineLengthCache = new int[lastLine + LL_CACHE_ADD_SIZE]; } for (int lineNumber = firstLine; lineNumber <= lastLine; lineNumber++) { LineSegment lineSegment = Document.GetLineSegment(lineNumber); if (Document.FoldingManager.IsLineVisible(lineNumber)) { if (_lineLengthCache[lineNumber] > 0) { max = Math.Max(max, _lineLengthCache[lineNumber]); } else { int visualLength = TextArea.GetVisualColumnFast(lineSegment, lineSegment.Length); _lineLengthCache[lineNumber] = Math.Max(1, visualLength); max = Math.Max(max, visualLength); } } } HScrollBar.Minimum = 0; HScrollBar.Maximum = (Math.Max(max + 20, TextArea.VisibleColumnCount - 1)); VScrollBar.LargeChange = Math.Max(0, TextArea.DrawingPosition.Height); VScrollBar.SmallChange = Math.Max(0, TextArea._FontHeight); HScrollBar.LargeChange = Math.Max(0, TextArea.VisibleColumnCount - 1); HScrollBar.SmallChange = Math.Max(0, TextArea.SpaceWidth); }