Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / Shaping / GlyphingCache.cs / 1 / GlyphingCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: High level glyphing cache // // History: 5-19-2005 [....] 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- KeyValueSerializer.cs
- CreateUserWizard.cs
- SmtpSection.cs
- RemoteWebConfigurationHost.cs
- CapabilitiesAssignment.cs
- JsonFormatWriterGenerator.cs
- ExpressionEditorAttribute.cs
- FontStretches.cs
- RetrieveVirtualItemEventArgs.cs
- TableColumn.cs
- DataGridPageChangedEventArgs.cs
- HatchBrush.cs
- QueueProcessor.cs
- SchemaMapping.cs
- Byte.cs
- XmlAnyElementAttributes.cs
- NativeMethods.cs
- DataGridViewRowStateChangedEventArgs.cs
- XamlPoint3DCollectionSerializer.cs
- ButtonBase.cs
- RijndaelCryptoServiceProvider.cs
- EncryptedType.cs
- Rules.cs
- ContentType.cs
- OutputCacheProfileCollection.cs
- DataContractSerializer.cs
- AssemblyBuilder.cs
- WebServiceErrorEvent.cs
- HtmlWindowCollection.cs
- UserPreferenceChangingEventArgs.cs
- QilPatternFactory.cs
- RefreshEventArgs.cs
- InstanceKeyView.cs
- SharedConnectionListener.cs
- TreeViewItem.cs
- QueryCacheManager.cs
- Grant.cs
- TreeBuilderBamlTranslator.cs
- MultiView.cs
- TransformerConfigurationWizardBase.cs
- UndirectedGraph.cs
- Version.cs
- TreeNodeCollectionEditorDialog.cs
- LinkButton.cs
- ResourceContainer.cs
- KeyValueSerializer.cs
- DataGridViewRow.cs
- EventLogEntry.cs
- ToolStripSystemRenderer.cs
- SqlCommandSet.cs
- ConnectivityStatus.cs
- ObjectHandle.cs
- Enum.cs
- TreeChangeInfo.cs
- ListViewItem.cs
- Trigger.cs
- ErrorWrapper.cs
- Debug.cs
- SystemInfo.cs
- HtmlAnchor.cs
- EncodingNLS.cs
- StandardToolWindows.cs
- SQLDateTimeStorage.cs
- EntityDataSourceChangingEventArgs.cs
- DrawingBrush.cs
- LoginDesigner.cs
- WsatRegistrationHeader.cs
- ListItemParagraph.cs
- WebControl.cs
- ConfigXmlSignificantWhitespace.cs
- Constraint.cs
- BaseCodeDomTreeGenerator.cs
- CommentAction.cs
- CallbackException.cs
- StructureChangedEventArgs.cs
- NameTable.cs
- MappingModelBuildProvider.cs
- TaskFileService.cs
- CodeDomDesignerLoader.cs
- Wizard.cs
- PageBuildProvider.cs
- ModelFunction.cs
- odbcmetadatacollectionnames.cs
- GeneralTransform3DTo2DTo3D.cs
- XsltSettings.cs
- UIntPtr.cs
- MouseButtonEventArgs.cs
- GeometryModel3D.cs
- GridSplitter.cs
- Drawing.cs
- MessagePropertyFilter.cs
- MSG.cs
- ScriptReferenceEventArgs.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- WriteLineDesigner.xaml.cs
- BamlRecordReader.cs
- BehaviorEditorPart.cs
- XmlSchemaObjectCollection.cs
- OrderByBuilder.cs
- ThreadStaticAttribute.cs