Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / MS / Internal / Shaping / GlyphingCache.cs / 1 / 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; private ShapingEngineManager _shapeManager; internal GlyphingCache(int capacity) { _sizeLimitedCache = new SizeLimitedCache (capacity); _shapeManager = new ShapingEngineManager(); } internal void GetShapeableText( Typeface typeface, CharacterBufferReference characterBufferReference, int stringLength, TextRunProperties textRunProperties, CultureInfo digitCulture, bool rightToLeft, IList shapeableList, IShapeableTextCollector collector ) { if (!typeface.Symbol) { Lookup(typeface).GetShapeableText( characterBufferReference, stringLength, textRunProperties, digitCulture, rightToLeft, shapeableList, collector ); } 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( _shapeManager, typeface.TryGetGlyphTypeface(), null // device font ); collector.Add( shapeableList, new CharacterBufferRange(characterBufferReference, stringLength), textRunProperties, new Item(ScriptID.Default, ItemFlags.Default), shapeTypeface, 1.0, // scale in Em false // null shape ); } } /// /// 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, _shapeManager ); _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; private ShapingEngineManager _shapeManager; internal GlyphingCache(int capacity) { _sizeLimitedCache = new SizeLimitedCache (capacity); _shapeManager = new ShapingEngineManager(); } internal void GetShapeableText( Typeface typeface, CharacterBufferReference characterBufferReference, int stringLength, TextRunProperties textRunProperties, CultureInfo digitCulture, bool rightToLeft, IList shapeableList, IShapeableTextCollector collector ) { if (!typeface.Symbol) { Lookup(typeface).GetShapeableText( characterBufferReference, stringLength, textRunProperties, digitCulture, rightToLeft, shapeableList, collector ); } 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( _shapeManager, typeface.TryGetGlyphTypeface(), null // device font ); collector.Add( shapeableList, new CharacterBufferRange(characterBufferReference, stringLength), textRunProperties, new Item(ScriptID.Default, ItemFlags.Default), shapeTypeface, 1.0, // scale in Em false // null shape ); } } /// /// 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, _shapeManager ); _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
- HebrewNumber.cs
- WindowPattern.cs
- FigureHelper.cs
- ContractSearchPattern.cs
- ProgramNode.cs
- pingexception.cs
- DropDownList.cs
- RC2.cs
- InvalidPipelineStoreException.cs
- ParseNumbers.cs
- UpdateExpressionVisitor.cs
- ExpressionTextBox.xaml.cs
- SymbolMethod.cs
- IndentedTextWriter.cs
- MailMessage.cs
- DbDataSourceEnumerator.cs
- DrawListViewColumnHeaderEventArgs.cs
- RectKeyFrameCollection.cs
- FrugalMap.cs
- WindowsFont.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- AssociatedControlConverter.cs
- TaskFileService.cs
- HotSpotCollection.cs
- ModifierKeysConverter.cs
- CachedTypeface.cs
- TrackingMemoryStreamFactory.cs
- PermissionRequestEvidence.cs
- MaskedTextBoxDesigner.cs
- MinMaxParagraphWidth.cs
- UrlPropertyAttribute.cs
- DocumentScope.cs
- OpenTypeLayoutCache.cs
- AutomationPropertyChangedEventArgs.cs
- PairComparer.cs
- ExpanderAutomationPeer.cs
- CatalogPartCollection.cs
- ConnectionStringsExpressionBuilder.cs
- CodeEntryPointMethod.cs
- CommonRemoteMemoryBlock.cs
- FormatSettings.cs
- RowToFieldTransformer.cs
- BaseTemplateBuildProvider.cs
- ToolStripRenderer.cs
- AnnotationHelper.cs
- DataGridViewColumnCollection.cs
- DynamicRenderer.cs
- PolicyException.cs
- PageCatalogPart.cs
- SqlParameter.cs
- ListViewItemEventArgs.cs
- DataMember.cs
- TrackBarRenderer.cs
- ComponentSerializationService.cs
- CssStyleCollection.cs
- ExclusiveCanonicalizationTransform.cs
- Socket.cs
- HttpHeaderCollection.cs
- CheckBoxRenderer.cs
- Rectangle.cs
- X509Utils.cs
- RegisteredDisposeScript.cs
- RuntimeConfigLKG.cs
- CatalogZoneBase.cs
- HtmlTextArea.cs
- ResourcePermissionBaseEntry.cs
- MenuItemBinding.cs
- HttpConfigurationSystem.cs
- ClientCredentials.cs
- XmlAttributeOverrides.cs
- MDIClient.cs
- Model3DCollection.cs
- SafeHandles.cs
- UnhandledExceptionEventArgs.cs
- OutputBuffer.cs
- DeadCharTextComposition.cs
- JsonReaderDelegator.cs
- XmlReader.cs
- DefaultValueAttribute.cs
- KeyManager.cs
- CacheEntry.cs
- SwitchLevelAttribute.cs
- SchemaCollectionPreprocessor.cs
- DataRowChangeEvent.cs
- SizeF.cs
- Command.cs
- RightsManagementInformation.cs
- PathGradientBrush.cs
- InnerItemCollectionView.cs
- DataContract.cs
- AttachedPropertyMethodSelector.cs
- RegexGroup.cs
- PropertyMetadata.cs
- Material.cs
- ProfilePropertySettings.cs
- MsmqIntegrationBinding.cs
- NotifyIcon.cs
- shaper.cs
- RemotingAttributes.cs
- InternalResources.cs