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
- ExternalCalls.cs
- PopupControlService.cs
- XmlEncoding.cs
- FontFamilyValueSerializer.cs
- CTreeGenerator.cs
- FontStyleConverter.cs
- SspiSecurityTokenProvider.cs
- ConfigurationConverterBase.cs
- VirtualDirectoryMappingCollection.cs
- SmtpAuthenticationManager.cs
- RoleGroupCollection.cs
- DataGridViewCheckBoxColumn.cs
- NestPullup.cs
- _UriSyntax.cs
- ListSortDescriptionCollection.cs
- Scene3D.cs
- RowToFieldTransformer.cs
- TableRow.cs
- SourceFileBuildProvider.cs
- AssemblyCache.cs
- RegistryKey.cs
- HyperlinkAutomationPeer.cs
- StrongNameKeyPair.cs
- CreateDataSourceDialog.cs
- SettingsPropertyValue.cs
- FixedSOMLineRanges.cs
- ScalarConstant.cs
- OdbcEnvironmentHandle.cs
- Privilege.cs
- ContextProperty.cs
- HeaderedContentControl.cs
- CompoundFileStorageReference.cs
- Bezier.cs
- TransactionFlowBindingElement.cs
- CustomAttributeSerializer.cs
- FilterEventArgs.cs
- ProgressPage.cs
- ProjectionRewriter.cs
- MasterPageBuildProvider.cs
- ExpressionEditorSheet.cs
- XmlDataLoader.cs
- DecoderExceptionFallback.cs
- ValidatingPropertiesEventArgs.cs
- ProcessHostFactoryHelper.cs
- XmlLinkedNode.cs
- LogConverter.cs
- LinkArea.cs
- SoapInteropTypes.cs
- SmiContext.cs
- CollectionViewGroup.cs
- shaperfactory.cs
- SparseMemoryStream.cs
- IntegerCollectionEditor.cs
- WindowsButton.cs
- DbConnectionPoolGroup.cs
- XmlILConstructAnalyzer.cs
- TextChange.cs
- GestureRecognitionResult.cs
- ColumnMapTranslator.cs
- WindowsGraphics2.cs
- BinaryCommonClasses.cs
- CodeObject.cs
- FontUnitConverter.cs
- SoapHeaderException.cs
- TraceHwndHost.cs
- CodeIdentifier.cs
- DataGridViewCellMouseEventArgs.cs
- Wrapper.cs
- CodeEntryPointMethod.cs
- EnumMember.cs
- OutputCacheProfile.cs
- BitmapCacheBrush.cs
- BufferedMessageData.cs
- ImpersonateTokenRef.cs
- wgx_sdk_version.cs
- HitTestParameters3D.cs
- CustomCredentialPolicy.cs
- TextBreakpoint.cs
- BitArray.cs
- MDIClient.cs
- WebPageTraceListener.cs
- PermissionListSet.cs
- Parameter.cs
- ObjectDataSourceFilteringEventArgs.cs
- WindowExtensionMethods.cs
- MissingFieldException.cs
- TimelineGroup.cs
- TemplateGroupCollection.cs
- XPathException.cs
- XPathException.cs
- TraceHwndHost.cs
- EncoderParameter.cs
- LinqDataSourceView.cs
- AsyncDataRequest.cs
- Path.cs
- StateItem.cs
- KeyedPriorityQueue.cs
- PolicyConversionContext.cs
- TextSpan.cs
- WebPartUtil.cs