Example #1
0
        private IEnumerable <Line> GetUpdatedIndentGuides(IEnumerable <IBlock> blocks, double horizontalOffset, double spaceWidth)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            foreach (var block in blocks)
            {
                var pointStart = new SnapshotPoint(_textView.TextSnapshot, block.Area.Start);
                var pointEnd   = new SnapshotPoint(_textView.TextSnapshot, block.Area.End);

                var viewLineStart = _textView.GetTextViewLineContainingBufferPosition(pointStart);
                var viewLineEnd   = _textView.GetTextViewLineContainingBufferPosition(pointEnd);

                if (viewLineStart.Equals(viewLineEnd))
                {
                    continue;
                }

                var lineStart = pointStart.GetContainingLine();
                var spaceText = new SnapshotSpan(lineStart.Start, pointStart).GetText();
                var tabs      = spaceText.Count(ch => ch == '\t');

                var indentStart = (spaceText.Length - tabs) + tabs * _tabSize;
                var leftOffset  = indentStart * spaceWidth + horizontalOffset + _offsetX;

                yield return(new Line()
                {
                    Stroke = Brushes.DarkGray,
                    StrokeThickness = _thickness,
                    StrokeDashArray = new DoubleCollection()
                    {
                        _dashSize, _spaceSize
                    },
                    X1 = leftOffset,
                    X2 = leftOffset,
                    Y1 = (viewLineStart.Top != 0) ? viewLineStart.Bottom + _offsetY : _textView.ViewportTop,
                    Y2 = (viewLineEnd.Top != 0) ? viewLineEnd.Top - _offsetY : _textView.ViewportBottom,
                });
            }
        }
        private int GetCaretCellPosition(ITextSnapshotLine line, SnapshotPoint caretBufferPosition)
        {
            var linePrefixText = new SnapshotSpan(line.Start, caretBufferPosition).GetText();

            return(linePrefixText.Count(c => c == '|'));
        }