Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- CodeStatement.cs
- CriticalFinalizerObject.cs
- QilReference.cs
- ContractMapping.cs
- ForwardPositionQuery.cs
- Misc.cs
- ControlHelper.cs
- FixUp.cs
- TextContainerChangedEventArgs.cs
- ServicesExceptionNotHandledEventArgs.cs
- WSDualHttpSecurityElement.cs
- IISMapPath.cs
- OutputCacheSection.cs
- recordstate.cs
- ListViewItemEventArgs.cs
- StorageAssociationTypeMapping.cs
- GridViewUpdateEventArgs.cs
- sqlmetadatafactory.cs
- QuadraticBezierSegment.cs
- ArrayEditor.cs
- DesignBindingValueUIHandler.cs
- DbDeleteCommandTree.cs
- DiscoveryEndpointValidator.cs
- ResourceAssociationSet.cs
- SmiXetterAccessMap.cs
- DataGridViewImageCell.cs
- ElementProxy.cs
- SequenceQuery.cs
- StringCollection.cs
- Attachment.cs
- RuleProcessor.cs
- HttpProcessUtility.cs
- CodeTypeConstructor.cs
- KerberosSecurityTokenProvider.cs
- OracleEncoding.cs
- OperationInfoBase.cs
- ValueExpressions.cs
- BigInt.cs
- RightsManagementInformation.cs
- ChooseAction.cs
- AnnotationResourceChangedEventArgs.cs
- FieldReference.cs
- UniqueTransportManagerRegistration.cs
- Currency.cs
- PathSegment.cs
- SqlConnectionStringBuilder.cs
- ImmutableCollection.cs
- SessionParameter.cs
- WebPartAuthorizationEventArgs.cs
- invalidudtexception.cs
- SettingsPropertyWrongTypeException.cs
- WCFServiceClientProxyGenerator.cs
- CacheAxisQuery.cs
- Effect.cs
- CodeAttachEventStatement.cs
- FrugalList.cs
- SendSecurityHeaderElementContainer.cs
- ThemeableAttribute.cs
- ParseNumbers.cs
- EventLogEntry.cs
- CallbackException.cs
- CodeDefaultValueExpression.cs
- MetadataArtifactLoaderFile.cs
- CodeIndexerExpression.cs
- EventsTab.cs
- BuildProvider.cs
- InstancePersistenceEvent.cs
- TemplateBaseAction.cs
- DataContractSerializerSection.cs
- SubtreeProcessor.cs
- BackoffTimeoutHelper.cs
- StringValidator.cs
- Html32TextWriter.cs
- LayoutTableCell.cs
- HTMLTextWriter.cs
- bidPrivateBase.cs
- DesignerOptionService.cs
- DoubleLink.cs
- MenuEventArgs.cs
- DragEvent.cs
- DateTimeConstantAttribute.cs
- KeyValuePair.cs
- FormsIdentity.cs
- ClientTargetSection.cs
- WebPartChrome.cs
- PropertyNames.cs
- Table.cs
- PackWebResponse.cs
- RadioButtonPopupAdapter.cs
- TdsParameterSetter.cs
- TransformedBitmap.cs
- SystemNetworkInterface.cs
- LocalBuilder.cs
- DesignerProperties.cs
- SystemNetHelpers.cs
- DirectoryInfo.cs
- PageBuildProvider.cs
- AttributeQuery.cs
- Ppl.cs
- BamlRecords.cs