Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- PasswordBoxAutomationPeer.cs
- RegexRunnerFactory.cs
- CriticalHandle.cs
- AttachInfo.cs
- Typography.cs
- ConstNode.cs
- WebBrowserEvent.cs
- RawStylusInputCustomData.cs
- FullTrustAssembliesSection.cs
- Vector3DAnimationBase.cs
- ObjectHelper.cs
- ConnectionManagementElement.cs
- WorkflowTimerService.cs
- CellPartitioner.cs
- HotCommands.cs
- Simplifier.cs
- ObjectHandle.cs
- XmlSchemaSet.cs
- ScrollProviderWrapper.cs
- MobileControlsSectionHandler.cs
- MappingMetadataHelper.cs
- ServiceHttpModule.cs
- GridViewSelectEventArgs.cs
- ExpressionBuilder.cs
- Token.cs
- XDRSchema.cs
- MemoryFailPoint.cs
- KerberosSecurityTokenParameters.cs
- RotateTransform.cs
- NullReferenceException.cs
- XmlDocument.cs
- DataSourceXmlSerializer.cs
- StyleXamlParser.cs
- XmlILOptimizerVisitor.cs
- Cursor.cs
- Stylesheet.cs
- ProfileInfo.cs
- XPathDocumentIterator.cs
- ComContractElementCollection.cs
- XmlNodeChangedEventArgs.cs
- SimplePropertyEntry.cs
- Identity.cs
- TdsParserStaticMethods.cs
- ExcCanonicalXml.cs
- FlowDocumentPaginator.cs
- RadioButton.cs
- SafeWaitHandle.cs
- InfiniteIntConverter.cs
- SystemWebSectionGroup.cs
- PackageDigitalSignatureManager.cs
- CacheForPrimitiveTypes.cs
- ToolStripDropTargetManager.cs
- SerializationSectionGroup.cs
- Label.cs
- ServiceInstallComponent.cs
- OutputCacheSection.cs
- QuotedPrintableStream.cs
- ReliableMessagingVersionConverter.cs
- Label.cs
- KeyboardEventArgs.cs
- DataObjectCopyingEventArgs.cs
- EDesignUtil.cs
- LocalizableResourceBuilder.cs
- RtType.cs
- Label.cs
- SamlSecurityToken.cs
- SessionStateItemCollection.cs
- FloaterBaseParaClient.cs
- WindowsAuthenticationEventArgs.cs
- InputMethod.cs
- PeerNeighborManager.cs
- SchemaObjectWriter.cs
- SiteMapHierarchicalDataSourceView.cs
- Messages.cs
- ProtocolElement.cs
- SqlGatherProducedAliases.cs
- NavigatorInput.cs
- ThrowHelper.cs
- VirtualPathUtility.cs
- AutomationProperty.cs
- PrimaryKeyTypeConverter.cs
- CompareValidator.cs
- DesignerLinkAdapter.cs
- SecurityChannelListener.cs
- Ops.cs
- Claim.cs
- PropertyPushdownHelper.cs
- TextEffect.cs
- EntityDataSourceConfigureObjectContextPanel.cs
- DrawingBrush.cs
- XmlEntity.cs
- IOException.cs
- ButtonRenderer.cs
- ContentFilePart.cs
- Rect3DValueSerializer.cs
- TimelineGroup.cs
- WindowsPrincipal.cs
- ApplicationFileParser.cs
- SetterBaseCollection.cs
- CrossSiteScriptingValidation.cs