| File: System\Windows\Media\textformatting\TextRunCache.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\PresentationCore\PresentationCore.csproj (PresentationCore) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // // // // Contents: Cache of text and text properties of run // // Spec: Text Formatting API.doc // // using MS.Internal.TextFormatting; namespace System.Windows.Media.TextFormatting { /// <summary> /// TextFormatter caches runs it receives from GetTextRun callback. This cache /// object is managed by text layout client. /// /// This method is used to improve performance in application whose fetching the /// run has significant performance implication. Application using this caching /// mechanism is responsible for invalidating the content in the cache when /// its changed. /// </summary> public sealed class TextRunCache { /// <summary> /// Constructing text run cache /// </summary> public TextRunCache() {} /// <summary> /// Client to notify change in part of the cache when text or /// properties of the run is being added, removed or replaced. /// </summary> /// <param name="textSourceCharacterIndex">text source character index to specify where in the source text the change starts.</param> /// <param name="addition">the number of text source characters to be added in the source text</param> /// <param name="removal">the number of text source characters to be removed in the source text</param> public void Change( int textSourceCharacterIndex, int addition, int removal ) { _imp?.Change( textSourceCharacterIndex, addition, removal ); } /// <summary> /// Client to invalidate the whole cache, in effect emptying the cache and /// cause the cache refill in subsequent call to Text Formatting API. /// </summary> public void Invalidate() { if(_imp != null) { _imp = null; } } /// <summary> /// Return all cached TextRun in a TextSpan list. If TextRun is not cached for a particular character range, /// the TextSpan would contain null TextRun object. /// </summary> #if OPTIMALBREAK_API public IList<TextSpan<TextRun>> GetTextRunSpans() #else internal IList<TextSpan<TextRun>> GetTextRunSpans() #endif { if (_imp != null) { return _imp.GetTextRunSpans(); } // otherwise, return an empty collection return Array.Empty<TextSpan<TextRun>>(); } /// <summary> /// Get/set the actual cache instance /// </summary> internal TextRunCacheImp Imp { get { return _imp; } set { _imp = value; } } private TextRunCacheImp _imp; } }