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
- _ListenerRequestStream.cs
- RequestQueryParser.cs
- ClientSideQueueItem.cs
- ErrorTableItemStyle.cs
- PropertyPushdownHelper.cs
- PrimitiveDataContract.cs
- WS2007FederationHttpBindingCollectionElement.cs
- ReadOnlyCollection.cs
- Int32AnimationUsingKeyFrames.cs
- ToolStripScrollButton.cs
- SmiXetterAccessMap.cs
- ToolStripItem.cs
- _SslSessionsCache.cs
- Int64AnimationBase.cs
- ColorConvertedBitmap.cs
- Enlistment.cs
- AlphabeticalEnumConverter.cs
- TextChangedEventArgs.cs
- OleDbConnection.cs
- ClosableStream.cs
- COAUTHINFO.cs
- XmlAnyAttributeAttribute.cs
- xamlnodes.cs
- ClipboardData.cs
- PackageProperties.cs
- GridItemPatternIdentifiers.cs
- TextBoxView.cs
- CodeSnippetExpression.cs
- AddInDeploymentState.cs
- DataGridViewTopLeftHeaderCell.cs
- SiteMapNode.cs
- Dictionary.cs
- sapiproxy.cs
- SchemaTableOptionalColumn.cs
- PropertyKey.cs
- ForwardPositionQuery.cs
- LineBreak.cs
- MouseDevice.cs
- DataGridItem.cs
- DependencyPropertyAttribute.cs
- RenderCapability.cs
- FaultHandlingFilter.cs
- DataGridViewRowPostPaintEventArgs.cs
- MasterPageBuildProvider.cs
- EntityProviderServices.cs
- CalendarTable.cs
- ZipIOLocalFileBlock.cs
- DeflateStream.cs
- LayeredChannelListener.cs
- WebConfigurationFileMap.cs
- WebPartZoneAutoFormat.cs
- MeasurementDCInfo.cs
- SourceSwitch.cs
- BindToObject.cs
- ErrorFormatterPage.cs
- AffineTransform3D.cs
- DataPointer.cs
- OracleTransaction.cs
- XmlFormatWriterGenerator.cs
- DataGridRow.cs
- CalloutQueueItem.cs
- Button.cs
- ProcessModelSection.cs
- HtmlShim.cs
- Window.cs
- PageRouteHandler.cs
- ThreadExceptionDialog.cs
- WindowsGrip.cs
- InternalConfigHost.cs
- ScrollEvent.cs
- EllipseGeometry.cs
- ManagementInstaller.cs
- JournalEntry.cs
- SqlMultiplexer.cs
- EnumType.cs
- DataGridViewCellParsingEventArgs.cs
- X509ChainElement.cs
- TableLayoutColumnStyleCollection.cs
- ListChangedEventArgs.cs
- BamlMapTable.cs
- PackageRelationship.cs
- CompilerResults.cs
- isolationinterop.cs
- MonthChangedEventArgs.cs
- AffineTransform3D.cs
- BrushValueSerializer.cs
- InputReportEventArgs.cs
- SessionPageStateSection.cs
- EventDescriptorCollection.cs
- TextProperties.cs
- SmiEventStream.cs
- GlyphCache.cs
- CreateParams.cs
- MetafileHeader.cs
- loginstatus.cs
- XPathAncestorQuery.cs
- IdentityReference.cs
- DataGridPagingPage.cs
- ListViewEditEventArgs.cs
- PermissionSetTriple.cs