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
- DataSourceCache.cs
- SafeRightsManagementSessionHandle.cs
- DefaultBinder.cs
- PackWebRequestFactory.cs
- ContentPropertyAttribute.cs
- StopStoryboard.cs
- MatchingStyle.cs
- PersistencePipeline.cs
- FontEmbeddingManager.cs
- ProfileGroupSettings.cs
- Win32.cs
- ProtocolsConfigurationEntry.cs
- XmlAttributeCollection.cs
- OneToOneMappingSerializer.cs
- ListViewTableRow.cs
- coordinatorfactory.cs
- UseAttributeSetsAction.cs
- DifferencingCollection.cs
- IconConverter.cs
- AssemblyNameUtility.cs
- ExecutedRoutedEventArgs.cs
- RelationshipFixer.cs
- EntitySetBase.cs
- Style.cs
- GridViewColumnHeaderAutomationPeer.cs
- EntityTypeEmitter.cs
- MaskedTextProvider.cs
- GroupedContextMenuStrip.cs
- cryptoapiTransform.cs
- WebFaultClientMessageInspector.cs
- EntityAdapter.cs
- CurrentChangingEventManager.cs
- Psha1DerivedKeyGeneratorHelper.cs
- TextEditorSpelling.cs
- CrossSiteScriptingValidation.cs
- BufferedMessageWriter.cs
- InputProcessorProfilesLoader.cs
- XmlCharType.cs
- WebSysDisplayNameAttribute.cs
- FontFamily.cs
- CustomAttributeBuilder.cs
- WorkflowMarkupSerializationManager.cs
- CompiledRegexRunnerFactory.cs
- HtmlTextArea.cs
- FreezableOperations.cs
- SubclassTypeValidatorAttribute.cs
- MenuItem.cs
- GeometryCollection.cs
- StrongTypingException.cs
- HtmlGenericControl.cs
- SynchronizedPool.cs
- OracleParameterCollection.cs
- LabelDesigner.cs
- LinqDataSourceHelper.cs
- PageBuildProvider.cs
- SafeCryptoHandles.cs
- DataGridViewImageCell.cs
- WmlFormAdapter.cs
- QilChoice.cs
- XPathEmptyIterator.cs
- CacheAxisQuery.cs
- BaseResourcesBuildProvider.cs
- ConfigXmlText.cs
- StaticContext.cs
- HttpListenerContext.cs
- Bold.cs
- SerialErrors.cs
- PerspectiveCamera.cs
- FontConverter.cs
- MemberCollection.cs
- InkPresenter.cs
- GeometryCollection.cs
- ServiceBusyException.cs
- StringCollection.cs
- BooleanConverter.cs
- ToolStripPanelDesigner.cs
- DependencyPropertyChangedEventArgs.cs
- ListViewCancelEventArgs.cs
- DiagnosticsConfiguration.cs
- ObjectDataSourceMethodEventArgs.cs
- ParameterDataSourceExpression.cs
- ControlValuePropertyAttribute.cs
- WindowsHyperlink.cs
- TextEmbeddedObject.cs
- KeyMatchBuilder.cs
- NativeMethods.cs
- BrowserCapabilitiesCompiler.cs
- EdmConstants.cs
- TypeGeneratedEventArgs.cs
- TaskScheduler.cs
- AnnouncementEventArgs.cs
- X509Extension.cs
- BrowserCapabilitiesFactoryBase.cs
- FixedLineResult.cs
- ItemType.cs
- MetaTable.cs
- WebBrowserSiteBase.cs
- HttpHeaderCollection.cs
- XmlNavigatorFilter.cs
- MetadataArtifactLoaderCompositeFile.cs