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
- InternalCache.cs
- EventBuilder.cs
- PhoneCall.cs
- InfiniteTimeSpanConverter.cs
- StructuralObject.cs
- XmlParserContext.cs
- FunctionImportMapping.cs
- MetadataArtifactLoaderComposite.cs
- ApplicationProxyInternal.cs
- CqlErrorHelper.cs
- Point3DAnimationBase.cs
- SafeArchiveContext.cs
- NetworkAddressChange.cs
- SignatureDescription.cs
- CodeSnippetTypeMember.cs
- EventToken.cs
- EventLogEntryCollection.cs
- CommentEmitter.cs
- TemplateColumn.cs
- PageAction.cs
- CodeMethodInvokeExpression.cs
- ProxyAttribute.cs
- SchemaType.cs
- EncryptedPackageFilter.cs
- SendKeys.cs
- HiddenFieldPageStatePersister.cs
- CredentialCache.cs
- MiniMapControl.xaml.cs
- OuterGlowBitmapEffect.cs
- SessionStateSection.cs
- InternalBufferManager.cs
- MethodCallConverter.cs
- EventOpcode.cs
- BaseAddressPrefixFilterElementCollection.cs
- BasicDesignerLoader.cs
- XmlDocumentType.cs
- VersionPair.cs
- SafeSecurityHandles.cs
- ProtocolInformationReader.cs
- X509ChainElement.cs
- DesignerUtility.cs
- MissingSatelliteAssemblyException.cs
- DocumentEventArgs.cs
- QuaternionRotation3D.cs
- DataSourceCache.cs
- SafeSecurityHelper.cs
- AppDomainAttributes.cs
- OleDbRowUpdatingEvent.cs
- FormatterServices.cs
- SocketInformation.cs
- Maps.cs
- SqlDataSourceTableQuery.cs
- ArrayElementGridEntry.cs
- StylusPointCollection.cs
- EditorAttribute.cs
- TextRunProperties.cs
- RecognizerInfo.cs
- NullExtension.cs
- Compilation.cs
- MetafileEditor.cs
- TextEditorSelection.cs
- PathGeometry.cs
- SectionUpdates.cs
- SequentialOutput.cs
- BaseServiceProvider.cs
- DllNotFoundException.cs
- MailWriter.cs
- MetadataItem.cs
- XmlText.cs
- NetworkInformationException.cs
- InstanceHandleReference.cs
- ReplyChannelBinder.cs
- RC2CryptoServiceProvider.cs
- XmlNullResolver.cs
- UdpConstants.cs
- SignatureDescription.cs
- VectorAnimationBase.cs
- CheckPair.cs
- ViewBase.cs
- StringStorage.cs
- DiffuseMaterial.cs
- CurrentTimeZone.cs
- PlaceHolder.cs
- ManagedCodeMarkers.cs
- PeerEndPoint.cs
- SelectionRangeConverter.cs
- SelectManyQueryOperator.cs
- Models.cs
- ApplicationHost.cs
- Interop.cs
- FileLogRecordEnumerator.cs
- ResizeBehavior.cs
- SystemIPGlobalProperties.cs
- RadioButtonList.cs
- BitmapEffectDrawingContent.cs
- IISUnsafeMethods.cs
- ActivityBindForm.Designer.cs
- AppModelKnownContentFactory.cs
- ThicknessAnimationUsingKeyFrames.cs
- RadioButtonFlatAdapter.cs