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
- TextUtf8RawTextWriter.cs
- ScriptReferenceEventArgs.cs
- TdsParserHelperClasses.cs
- Operators.cs
- MultipartContentParser.cs
- CustomWebEventKey.cs
- ContainerFilterService.cs
- ClientTargetCollection.cs
- Overlapped.cs
- TreeNodeMouseHoverEvent.cs
- Light.cs
- ClientOptions.cs
- ObjectAnimationBase.cs
- TextDpi.cs
- OdbcTransaction.cs
- HtmlHead.cs
- StylusButton.cs
- Stream.cs
- TreeViewEvent.cs
- XmlSchemaInfo.cs
- RuntimeConfigLKG.cs
- ViewCellSlot.cs
- XmlMemberMapping.cs
- ApplicationManager.cs
- CompModSwitches.cs
- XmlNamedNodeMap.cs
- ContentValidator.cs
- PermissionSetTriple.cs
- ManipulationLogic.cs
- XPathPatternParser.cs
- StoragePropertyMapping.cs
- UnsafeNativeMethods.cs
- Imaging.cs
- URIFormatException.cs
- SiteMapNodeItem.cs
- relpropertyhelper.cs
- InputGestureCollection.cs
- FormatSettings.cs
- ListInitExpression.cs
- ServiceDescriptions.cs
- RtfToXamlReader.cs
- SqlDataSourceStatusEventArgs.cs
- RoleManagerSection.cs
- FileIOPermission.cs
- HiddenField.cs
- RestClientProxyHandler.cs
- SoapExtensionTypeElement.cs
- PagedDataSource.cs
- GeometryCollection.cs
- PathFigureCollectionConverter.cs
- OpenFileDialog.cs
- XmlSchemaImport.cs
- SaveRecipientRequest.cs
- LinqMaximalSubtreeNominator.cs
- StrokeNodeData.cs
- XamlTypeMapper.cs
- Size3D.cs
- EntityCommand.cs
- URIFormatException.cs
- Stream.cs
- StructuredTypeInfo.cs
- TokenFactoryBase.cs
- MediaContext.cs
- WebConfigManager.cs
- CheckedListBox.cs
- ComponentDispatcherThread.cs
- InheritanceUI.cs
- BinaryMethodMessage.cs
- Renderer.cs
- CodeStatement.cs
- TypographyProperties.cs
- Reference.cs
- RadioButtonPopupAdapter.cs
- BaseTemplateCodeDomTreeGenerator.cs
- TargetConverter.cs
- DecoderNLS.cs
- ServiceModelEnumValidator.cs
- ExpressionContext.cs
- ManagementEventWatcher.cs
- Sentence.cs
- ItemCollection.cs
- ContextProperty.cs
- CustomLineCap.cs
- DataGridItemCollection.cs
- DataSysAttribute.cs
- SimpleBitVector32.cs
- Properties.cs
- TextServicesCompartment.cs
- PackagingUtilities.cs
- QueryContext.cs
- ListBindingHelper.cs
- ArgumentValidation.cs
- autovalidator.cs
- LinqDataSourceDeleteEventArgs.cs
- RsaElement.cs
- EncryptedPackageFilter.cs
- CodeAccessPermission.cs
- StringUtil.cs
- SplitterCancelEvent.cs
- XmlSchemaException.cs