Welcome to mirror list, hosted at ThFree Co, Russian Federation.

DefaultTextViewPrimitive.cs « EditorPrimitives « Impl « Text « src - github.com/microsoft/vs-editor-api.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4dca517c8e5593251a6975806b4acb5f8cc1777e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//
//  Copyright (c) Microsoft Corporation. All rights reserved.
//  Licensed under the MIT License. See License.txt in the project root for license information.
//
// This file contain implementations details that are subject to change without notice.
// Use at your own risk.
//
namespace Microsoft.VisualStudio.Text.EditorPrimitives.Implementation
{
    using Microsoft.VisualStudio.Text;
    using Microsoft.VisualStudio.Text.Editor;
    using Microsoft.VisualStudio.Text.Formatting;
    using LegacySelection = Microsoft.VisualStudio.Text.Editor.LegacySelection;

    internal sealed class DefaultTextViewPrimitive : TextView
    {
        private ITextView _textView;
        private Caret _caret;
        private LegacySelection _selection;
        private TextBuffer _textBuffer;
        private IViewPrimitivesFactoryService _viewPrimitivesFactory;

        internal DefaultTextViewPrimitive(ITextView textView, IViewPrimitivesFactoryService viewPrimitivesFactory, IBufferPrimitivesFactoryService bufferPrimitivesFactory)
        {
            _textView = textView;

            _viewPrimitivesFactory = viewPrimitivesFactory;

            _textBuffer = bufferPrimitivesFactory.CreateTextBuffer(textView.TextBuffer);

            _caret = _viewPrimitivesFactory.CreateCaret(this);
            _selection = _viewPrimitivesFactory.CreateSelection(this);
        }

        public override void MoveLineToTop(int lineNumber)
        {
            ITextSnapshotLine line = _textView.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(lineNumber);
            _textView.DisplayTextLineContainingBufferPosition(line.Start, 0.0, ViewRelativePosition.Top);
        }

        public override void MoveLineToBottom(int lineNumber)
        {
            ITextSnapshotLine line = _textView.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(lineNumber);
            _textView.DisplayTextLineContainingBufferPosition(line.Start, 0.0, ViewRelativePosition.Bottom);
        }

        public override void ScrollUp(int lines)
        {
            _textView.ViewScroller.ScrollViewportVerticallyByPixels(((double)lines) * _textView.LineHeight);
        }

        public override void ScrollDown(int lines)
        {
            _textView.ViewScroller.ScrollViewportVerticallyByPixels(- ((double)lines) * _textView.LineHeight);
        }

        public override void ScrollPageDown()
        {
            _textView.ViewScroller.ScrollViewportVerticallyByPage(ScrollDirection.Down);
        }

        public override void ScrollPageUp()
        {
            _textView.ViewScroller.ScrollViewportVerticallyByPage(ScrollDirection.Up);
        }

        public override bool Show(DisplayTextPoint point, HowToShow howToShow)
        {
            if (howToShow == HowToShow.AsIs)
            {
                _textView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(point.AdvancedTextPoint, 0), EnsureSpanVisibleOptions.MinimumScroll);
            }
            else if (howToShow == HowToShow.Centered)
            {
                _textView.ViewScroller.EnsureSpanVisible(new SnapshotSpan(point.AdvancedTextPoint, 0), EnsureSpanVisibleOptions.AlwaysCenter);
            }
            else if (howToShow == HowToShow.OnFirstLineOfView)
            {
                _textView.DisplayTextLineContainingBufferPosition(point.AdvancedTextPoint, 0.0, ViewRelativePosition.Top);
            }
            return point.IsVisible;
        }

        public override VisibilityState Show(DisplayTextRange textRange, HowToShow howToShow)
        {
            if (howToShow == HowToShow.AsIs)
            {
                _textView.ViewScroller.EnsureSpanVisible(textRange.AdvancedTextRange, EnsureSpanVisibleOptions.MinimumScroll);
            }
            else if (howToShow == HowToShow.Centered)
            {
                _textView.ViewScroller.EnsureSpanVisible(textRange.AdvancedTextRange, EnsureSpanVisibleOptions.AlwaysCenter);
            }
            else if (howToShow == HowToShow.OnFirstLineOfView)
            {
                _textView.DisplayTextLineContainingBufferPosition(textRange.AdvancedTextRange.Start, 0.0, ViewRelativePosition.Top);
            }

            return textRange.Visibility;
        }

        public override DisplayTextPoint GetTextPoint(int position)
        {
            return _viewPrimitivesFactory.CreateDisplayTextPoint(this, position);
        }

        public override DisplayTextPoint GetTextPoint(TextPoint textPoint)
        {
            return GetTextPoint(textPoint.CurrentPosition);
        }

        public override DisplayTextPoint GetTextPoint(int line, int column)
        {
            ITextSnapshotLine snapshotLine = _textView.TextBuffer.CurrentSnapshot.GetLineFromLineNumber(line);
            return GetTextPoint(snapshotLine.Start + column);
        }

        public override DisplayTextRange GetTextRange(TextPoint startPoint, TextPoint endPoint)
        {
            return GetTextRange(TextBuffer.GetTextRange(startPoint, endPoint));
        }

        public override DisplayTextRange GetTextRange(TextRange textRange)
        {
            return _viewPrimitivesFactory.CreateDisplayTextRange(this, textRange);
        }

        public override DisplayTextRange GetTextRange(int startPosition, int endPosition)
        {
            return GetTextRange(TextBuffer.GetTextPoint(startPosition), TextBuffer.GetTextPoint(endPosition));
        }

        public override DisplayTextRange VisibleSpan
        {
            get { return GetTextRange(_textView.TextViewLines.FirstVisibleLine.Start, _textView.TextViewLines.LastVisibleLine.EndIncludingLineBreak); }
        }

        public override ITextView AdvancedTextView
        {
            get { return _textView; }
        }

        public override Caret Caret
        {
            get { return _caret; }
        }

        public override LegacySelection Selection
        {
            get { return _selection; }
        }

        public override TextBuffer TextBuffer
        {
            get { return _textBuffer; }
        }
    }
}