Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- MergeFilterQuery.cs
- LoadedOrUnloadedOperation.cs
- SHA512.cs
- XPathPatternParser.cs
- SecurityTokenException.cs
- CreateUserErrorEventArgs.cs
- ImageBrush.cs
- List.cs
- SchemaImporterExtensionElementCollection.cs
- SystemResourceKey.cs
- XomlDesignerLoader.cs
- Visual3D.cs
- ObjectDataSourceStatusEventArgs.cs
- FieldAccessException.cs
- ClientSettingsSection.cs
- BypassElementCollection.cs
- TimeSpanStorage.cs
- DataProtection.cs
- TemplateComponentConnector.cs
- TextSpan.cs
- FeatureManager.cs
- OptimisticConcurrencyException.cs
- TitleStyle.cs
- CheckBoxPopupAdapter.cs
- MemberInitExpression.cs
- PathSegmentCollection.cs
- SqlDataSourceStatusEventArgs.cs
- PerformanceCountersElement.cs
- DrawingState.cs
- SQLBytes.cs
- ToolboxComponentsCreatingEventArgs.cs
- XPathAncestorIterator.cs
- XsdDataContractExporter.cs
- BitmapData.cs
- ExpressionWriter.cs
- DateTimeOffsetStorage.cs
- AudioFormatConverter.cs
- TransactionChannel.cs
- MobileResource.cs
- FaultDesigner.cs
- Substitution.cs
- DrawListViewItemEventArgs.cs
- ServiceNameElement.cs
- Size.cs
- NGCUIElementCollectionSerializerAsync.cs
- TableParagraph.cs
- TextEditorMouse.cs
- ApplicationHost.cs
- MetadataArtifactLoaderCompositeFile.cs
- DesignerRegion.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- SQLDateTimeStorage.cs
- ExpressionLexer.cs
- ExtenderProvidedPropertyAttribute.cs
- ListViewGroup.cs
- LinkUtilities.cs
- BrowsableAttribute.cs
- IncrementalCompileAnalyzer.cs
- RuntimeEnvironment.cs
- HttpCacheVary.cs
- XmlDataSourceView.cs
- TrackingDataItem.cs
- MetaModel.cs
- TraceHandler.cs
- DataGridViewBand.cs
- WindowsGraphics.cs
- StylusPlugin.cs
- FunctionMappingTranslator.cs
- ToolZone.cs
- Int32RectValueSerializer.cs
- InstanceCollisionException.cs
- ValueTypeFixupInfo.cs
- filewebresponse.cs
- RightsManagementUser.cs
- WebAdminConfigurationHelper.cs
- CancellationTokenSource.cs
- SqlCharStream.cs
- GeometryDrawing.cs
- SoapMessage.cs
- RowBinding.cs
- BitConverter.cs
- LogFlushAsyncResult.cs
- formatstringdialog.cs
- SuppressMessageAttribute.cs
- WebConfigurationHost.cs
- CodeDOMUtility.cs
- HwndStylusInputProvider.cs
- SafeWaitHandle.cs
- InstanceValue.cs
- altserialization.cs
- RankException.cs
- XmlSchemaSimpleTypeUnion.cs
- Merger.cs
- SecurityElement.cs
- AffineTransform3D.cs
- SimpleExpression.cs
- DBCommand.cs
- RSAPKCS1SignatureDeformatter.cs
- VariableQuery.cs
- ConfigurationValue.cs