Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SingleKeyFrameCollection.cs
- CompositeScriptReference.cs
- ColorConvertedBitmap.cs
- SvcMapFileSerializer.cs
- ObjectListCommandsPage.cs
- formatter.cs
- EmptyControlCollection.cs
- TypeFieldSchema.cs
- GridViewSortEventArgs.cs
- Rectangle.cs
- SelectionItemProviderWrapper.cs
- GenericTextProperties.cs
- WebFaultClientMessageInspector.cs
- ToolStripManager.cs
- SchemaImporter.cs
- ServiceControllerDesigner.cs
- MessageQueueException.cs
- TrackBar.cs
- SyndicationElementExtension.cs
- AlphabetConverter.cs
- OpenCollectionAsyncResult.cs
- BooleanProjectedSlot.cs
- DES.cs
- JobDuplex.cs
- OrderingInfo.cs
- FieldTemplateUserControl.cs
- SystemInformation.cs
- RoleBoolean.cs
- TypeGeneratedEventArgs.cs
- DispatcherHookEventArgs.cs
- SecurityRuntime.cs
- XmlElementElementCollection.cs
- CapiNative.cs
- DisplayMemberTemplateSelector.cs
- TypeGenericEnumerableViewSchema.cs
- MemberMemberBinding.cs
- BinaryFormatterWriter.cs
- DecoderFallback.cs
- PriorityQueue.cs
- AlphabetConverter.cs
- WindowsAuthenticationModule.cs
- CodeGen.cs
- MailAddressCollection.cs
- TextParagraphCache.cs
- DynamicValueConverter.cs
- LambdaCompiler.Address.cs
- LinqDataSourceContextEventArgs.cs
- NonBatchDirectoryCompiler.cs
- PkcsUtils.cs
- StrongNameKeyPair.cs
- QueryCursorEventArgs.cs
- HtmlTextBoxAdapter.cs
- ImageSourceValueSerializer.cs
- XamlTreeBuilderBamlRecordWriter.cs
- Dump.cs
- StringUtil.cs
- CodeNamespaceImportCollection.cs
- TypedAsyncResult.cs
- InstanceKeyView.cs
- PassportAuthenticationModule.cs
- XmlDataSourceNodeDescriptor.cs
- WindowsNonControl.cs
- ClientTarget.cs
- UpdateManifestForBrowserApplication.cs
- CompiledELinqQueryState.cs
- shaperfactory.cs
- PageWrapper.cs
- SqlDataSourceEnumerator.cs
- documentsequencetextcontainer.cs
- DisplayInformation.cs
- DataSetMappper.cs
- CngKey.cs
- DataGridViewTextBoxColumn.cs
- TextTreeTextElementNode.cs
- ColumnMap.cs
- XmlNamedNodeMap.cs
- WindowsListBox.cs
- WorkflowInstanceExtensionProvider.cs
- TagMapCollection.cs
- BadImageFormatException.cs
- EventlogProvider.cs
- RuleSettings.cs
- HttpWriter.cs
- CodeRegionDirective.cs
- FontNamesConverter.cs
- LineGeometry.cs
- TextCollapsingProperties.cs
- DesignerAttribute.cs
- WsatConfiguration.cs
- TemplateControl.cs
- WindowsFormsHostAutomationPeer.cs
- PaginationProgressEventArgs.cs
- NegatedCellConstant.cs
- PackageStore.cs
- EntityProviderFactory.cs
- DataObject.cs
- BaseResourcesBuildProvider.cs
- XmlNamespaceMapping.cs
- ListViewGroupItemCollection.cs
- AssertHelper.cs