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);
        }