diff options
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextViewCachedElements.cs')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextViewCachedElements.cs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextViewCachedElements.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextViewCachedElements.cs new file mode 100644 index 000000000..c56e22eaf --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextViewCachedElements.cs @@ -0,0 +1,43 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using System.Windows.Media; +using System.Windows.Media.TextFormatting; +using Tango.Scripting.Editors.Utils; + +namespace Tango.Scripting.Editors.Rendering +{ + sealed class TextViewCachedElements : IDisposable + { + TextFormatter formatter; + Dictionary<string, TextLine> nonPrintableCharacterTexts; + + public TextLine GetTextForNonPrintableCharacter(string text, ITextRunConstructionContext context) + { + if (nonPrintableCharacterTexts == null) + nonPrintableCharacterTexts = new Dictionary<string, TextLine>(); + TextLine textLine; + if (!nonPrintableCharacterTexts.TryGetValue(text, out textLine)) { + var p = new VisualLineElementTextRunProperties(context.GlobalTextRunProperties); + p.SetForegroundBrush(context.TextView.NonPrintableCharacterBrush); + if (formatter == null) + formatter = TextFormatterFactory.Create(context.TextView); + textLine = FormattedTextElement.PrepareText(formatter, text, p); + nonPrintableCharacterTexts[text] = textLine; + } + return textLine; + } + + public void Dispose() + { + if (nonPrintableCharacterTexts != null) { + foreach (TextLine line in nonPrintableCharacterTexts.Values) + line.Dispose(); + } + if (formatter != null) + formatter.Dispose(); + } + } +} |
