Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / Shaping / GlyphingCache.cs / 1305600 / GlyphingCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: High level glyphing cache // // History: 5-19-2005 garyyang created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Windows.Media; using System.Windows.Media.TextFormatting; using MS.Internal; using MS.Internal.TextFormatting; namespace MS.Internal.Shaping { ////// GlyphingCache stores the runtime state of shaping engines and the mapping between Unicode scalar /// value and the physical font being used to display it. This class is not thread-safe. The client is /// responsible for synchronizing access from multiple threads. It is generally recommended that the client /// manages a single instance of this class per text formatting session. /// /// It currently only caches one key-value pair: /// o Typeface - TypefaceMap /// /// This pair is cached in SizeLimitedCache which implement LRU algorithm through /// a linked list. When cache is full, the least used entry in the cache will be replaced /// by the latest entry. /// internal class GlyphingCache { private SizeLimitedCache_sizeLimitedCache; internal GlyphingCache(int capacity) { _sizeLimitedCache = new SizeLimitedCache (capacity); } internal void GetShapeableText( Typeface typeface, CharacterBufferReference characterBufferReference, int stringLength, TextRunProperties textRunProperties, CultureInfo digitCulture, bool isRightToLeftParagraph, IList shapeableList, IShapeableTextCollector collector, TextFormattingMode textFormattingMode ) { if (!typeface.Symbol) { Lookup(typeface).GetShapeableText( characterBufferReference, stringLength, textRunProperties, digitCulture, isRightToLeftParagraph, shapeableList, collector, textFormattingMode ); } else { // It's a non-Unicode ("symbol") font, where code points have non-standard meanings. We // therefore want to bypass the usual itemization and font linking. Instead, just map // everything to the default script and first GlyphTypeface. ShapeTypeface shapeTypeface = new ShapeTypeface( typeface.TryGetGlyphTypeface(), null // device font ); collector.Add( shapeableList, new CharacterBufferRange(characterBufferReference, stringLength), textRunProperties, new MS.Internal.Text.TextInterface.ItemProps(), shapeTypeface, 1.0, // scale in Em false, // null shape textFormattingMode ); } } /// /// Look up the font mapping data for a typeface. /// private TypefaceMap Lookup(Typeface key) { TypefaceMap typefaceMap = _sizeLimitedCache.Get(key); if (typefaceMap == null) { typefaceMap = new TypefaceMap( key.FontFamily, key.FallbackFontFamily, key.CanonicalStyle, key.CanonicalWeight, key.CanonicalStretch, key.NullFont ); _sizeLimitedCache.Add( key, typefaceMap, false // is not permanent in the cache. ); } return typefaceMap; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: High level glyphing cache // // History: 5-19-2005 garyyang created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Windows.Media; using System.Windows.Media.TextFormatting; using MS.Internal; using MS.Internal.TextFormatting; namespace MS.Internal.Shaping { ////// GlyphingCache stores the runtime state of shaping engines and the mapping between Unicode scalar /// value and the physical font being used to display it. This class is not thread-safe. The client is /// responsible for synchronizing access from multiple threads. It is generally recommended that the client /// manages a single instance of this class per text formatting session. /// /// It currently only caches one key-value pair: /// o Typeface - TypefaceMap /// /// This pair is cached in SizeLimitedCache which implement LRU algorithm through /// a linked list. When cache is full, the least used entry in the cache will be replaced /// by the latest entry. /// internal class GlyphingCache { private SizeLimitedCache_sizeLimitedCache; internal GlyphingCache(int capacity) { _sizeLimitedCache = new SizeLimitedCache (capacity); } internal void GetShapeableText( Typeface typeface, CharacterBufferReference characterBufferReference, int stringLength, TextRunProperties textRunProperties, CultureInfo digitCulture, bool isRightToLeftParagraph, IList shapeableList, IShapeableTextCollector collector, TextFormattingMode textFormattingMode ) { if (!typeface.Symbol) { Lookup(typeface).GetShapeableText( characterBufferReference, stringLength, textRunProperties, digitCulture, isRightToLeftParagraph, shapeableList, collector, textFormattingMode ); } else { // It's a non-Unicode ("symbol") font, where code points have non-standard meanings. We // therefore want to bypass the usual itemization and font linking. Instead, just map // everything to the default script and first GlyphTypeface. ShapeTypeface shapeTypeface = new ShapeTypeface( typeface.TryGetGlyphTypeface(), null // device font ); collector.Add( shapeableList, new CharacterBufferRange(characterBufferReference, stringLength), textRunProperties, new MS.Internal.Text.TextInterface.ItemProps(), shapeTypeface, 1.0, // scale in Em false, // null shape textFormattingMode ); } } /// /// Look up the font mapping data for a typeface. /// private TypefaceMap Lookup(Typeface key) { TypefaceMap typefaceMap = _sizeLimitedCache.Get(key); if (typefaceMap == null) { typefaceMap = new TypefaceMap( key.FontFamily, key.FallbackFontFamily, key.CanonicalStyle, key.CanonicalWeight, key.CanonicalStretch, key.NullFont ); _sizeLimitedCache.Add( key, typefaceMap, false // is not permanent in the cache. ); } return typefaceMap; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TimeSpan.cs
- RadioButton.cs
- DispatcherProcessingDisabled.cs
- NameValueFileSectionHandler.cs
- FileUtil.cs
- ExtensibleClassFactory.cs
- WebPartTransformerCollection.cs
- SqlColumnizer.cs
- TextPointer.cs
- PriorityBindingExpression.cs
- XmlWhitespace.cs
- ProfileEventArgs.cs
- SelectiveScrollingGrid.cs
- SqlMethods.cs
- CircleHotSpot.cs
- ParenExpr.cs
- _ShellExpression.cs
- ColorPalette.cs
- ChooseAction.cs
- Int64.cs
- PathFigureCollectionConverter.cs
- TableItemStyle.cs
- LocalFileSettingsProvider.cs
- AnyReturnReader.cs
- WindowsProgressbar.cs
- ArraySegment.cs
- ErrorWebPart.cs
- WindowsSpinner.cs
- _emptywebproxy.cs
- RotateTransform3D.cs
- TextFormatter.cs
- BaseCodeDomTreeGenerator.cs
- ResourcePart.cs
- QuaternionAnimation.cs
- RangeValidator.cs
- SchemaDeclBase.cs
- DSASignatureFormatter.cs
- SqlStatistics.cs
- AssemblyBuilder.cs
- MD5CryptoServiceProvider.cs
- GlyphTypeface.cs
- ObjectPersistData.cs
- DataGridViewButtonCell.cs
- ClientUtils.cs
- ProxyHelper.cs
- ClassHandlersStore.cs
- Point.cs
- ExpandCollapsePattern.cs
- CodeTypeReferenceExpression.cs
- XsdBuildProvider.cs
- SymDocumentType.cs
- CompilerScopeManager.cs
- UnrecognizedAssertionsBindingElement.cs
- VisualTreeUtils.cs
- XsltLibrary.cs
- Compilation.cs
- TextTreeExtractElementUndoUnit.cs
- JsonObjectDataContract.cs
- WebPartExportVerb.cs
- InvokeProviderWrapper.cs
- RtfNavigator.cs
- Substitution.cs
- TextEditorCharacters.cs
- DataServiceStreamResponse.cs
- CollectionBuilder.cs
- safex509handles.cs
- NotifyIcon.cs
- BitmapEffectDrawing.cs
- DnsElement.cs
- ApplyTemplatesAction.cs
- RequestTimeoutManager.cs
- SwitchElementsCollection.cs
- FixedDSBuilder.cs
- CommandManager.cs
- EntityType.cs
- Quaternion.cs
- CodeSnippetExpression.cs
- ClientType.cs
- TdsParser.cs
- XmlSchemaComplexContentExtension.cs
- webeventbuffer.cs
- MultipleViewProviderWrapper.cs
- TypeForwardedFromAttribute.cs
- SchemaImporterExtensionElement.cs
- XmlSchemaProviderAttribute.cs
- CardSpacePolicyElement.cs
- CheckBoxBaseAdapter.cs
- TcpConnectionPoolSettings.cs
- SettingsPropertyIsReadOnlyException.cs
- peernodestatemanager.cs
- UnknownBitmapDecoder.cs
- SmtpNtlmAuthenticationModule.cs
- XMLSyntaxException.cs
- BlurBitmapEffect.cs
- DataGridViewColumnCollection.cs
- Model3DCollection.cs
- RectValueSerializer.cs
- XmlSchemaExternal.cs
- WebServiceResponseDesigner.cs
- XamlTreeBuilderBamlRecordWriter.cs