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
- CapiHashAlgorithm.cs
- CollaborationHelperFunctions.cs
- ProgressBar.cs
- ColumnCollection.cs
- ControlCollection.cs
- TextRunTypographyProperties.cs
- CustomAttributeSerializer.cs
- WebEvents.cs
- Crc32Helper.cs
- AuthenticationSection.cs
- DataSourceExpression.cs
- ReliableSessionBindingElementImporter.cs
- ModuleBuilder.cs
- Schema.cs
- InkCollectionBehavior.cs
- Underline.cs
- ThreadExceptionEvent.cs
- RowCache.cs
- Fx.cs
- Application.cs
- WizardSideBarListControlItem.cs
- HttpStreamMessageEncoderFactory.cs
- BaseCollection.cs
- TextTrailingCharacterEllipsis.cs
- HttpDebugHandler.cs
- GridItemProviderWrapper.cs
- ConvertTextFrag.cs
- UniqueConstraint.cs
- MediaPlayerState.cs
- CommandHelpers.cs
- CompilerWrapper.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- ping.cs
- ObjectStateManagerMetadata.cs
- ListMarkerSourceInfo.cs
- OutOfProcStateClientManager.cs
- LoginCancelEventArgs.cs
- XmlSchemaObjectTable.cs
- QueryOperator.cs
- StringUtil.cs
- ProgressBar.cs
- OdbcRowUpdatingEvent.cs
- AsymmetricSecurityProtocol.cs
- AsyncOperationContext.cs
- Emitter.cs
- InstanceDataCollectionCollection.cs
- ClientUtils.cs
- XmlQueryOutput.cs
- BrowserCapabilitiesFactory.cs
- WebScriptServiceHost.cs
- TimelineGroup.cs
- MembershipAdapter.cs
- EnumerableRowCollectionExtensions.cs
- storepermissionattribute.cs
- UserPersonalizationStateInfo.cs
- ExceptionAggregator.cs
- DataAdapter.cs
- NameScope.cs
- ObjectComplexPropertyMapping.cs
- StatusBarItemAutomationPeer.cs
- NamespaceList.cs
- CalculatedColumn.cs
- WebPartRestoreVerb.cs
- HtmlInputText.cs
- SegmentInfo.cs
- DataGridViewRow.cs
- DiscoveryClientDocuments.cs
- ping.cs
- TcpTransportManager.cs
- HtmlButton.cs
- MimeTypeMapper.cs
- AssemblyNameProxy.cs
- CriticalExceptions.cs
- RowSpanVector.cs
- ImageCodecInfo.cs
- TempFiles.cs
- TableLayoutCellPaintEventArgs.cs
- EastAsianLunisolarCalendar.cs
- AsyncDataRequest.cs
- Table.cs
- DefaultObjectMappingItemCollection.cs
- AuthenticationService.cs
- DESCryptoServiceProvider.cs
- GridViewRowEventArgs.cs
- Properties.cs
- PeerUnsafeNativeCryptMethods.cs
- TransformPatternIdentifiers.cs
- ToolStripItemTextRenderEventArgs.cs
- Stroke.cs
- AdornerLayer.cs
- BrowserCapabilitiesCodeGenerator.cs
- SpeakInfo.cs
- TableLayoutStyle.cs
- CheckBox.cs
- MeshGeometry3D.cs
- SubtreeProcessor.cs
- XslCompiledTransform.cs
- ViewManagerAttribute.cs
- BinaryFormatterWriter.cs
- XmlToDatasetMap.cs