diff options
| author | Shai Frieder <Shai.Frieder@twine-s.com> | 2019-04-15 11:44:09 +0300 |
|---|---|---|
| committer | Shai Frieder <Shai.Frieder@twine-s.com> | 2019-04-15 11:44:09 +0300 |
| commit | 64e2776e794d752daaeb06121492744266f65a23 (patch) | |
| tree | 00bed37becbcea5b31b9879c7341c7f0e2bb3ce1 /Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/TextViewCachedElements.cs | |
| parent | 49db61f198119289433e1f2e35b97e011c47aefe (diff) | |
| parent | aa5ba8c457c3722cf215c2992a0b03f310afd1c1 (diff) | |
| download | Tango-64e2776e794d752daaeb06121492744266f65a23.tar.gz Tango-64e2776e794d752daaeb06121492744266f65a23.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
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(); + } + } +} |
