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
- DataGridViewSelectedCellCollection.cs
- SoapObjectWriter.cs
- TypeSystem.cs
- XmlAttributeAttribute.cs
- MenuItemAutomationPeer.cs
- WindowsListViewGroup.cs
- Material.cs
- Vector.cs
- ContentFilePart.cs
- MergeExecutor.cs
- TypedRowHandler.cs
- CannotUnloadAppDomainException.cs
- XPathMessageFilterElementComparer.cs
- ClientTarget.cs
- SpotLight.cs
- ExpressionDumper.cs
- RankException.cs
- RTTypeWrapper.cs
- InheritanceAttribute.cs
- OleDbWrapper.cs
- KnownBoxes.cs
- Propagator.Evaluator.cs
- DateTimeConstantAttribute.cs
- CompressEmulationStream.cs
- GradientBrush.cs
- TTSVoice.cs
- PictureBox.cs
- DataGridViewRowPrePaintEventArgs.cs
- SendActivityDesignerTheme.cs
- ParameterRetriever.cs
- EntityCommandCompilationException.cs
- OrderByQueryOptionExpression.cs
- ExtendedProtectionPolicy.cs
- Delegate.cs
- FileCodeGroup.cs
- PeerApplicationLaunchInfo.cs
- MailWebEventProvider.cs
- FixedTextContainer.cs
- TargetParameterCountException.cs
- XhtmlBasicCommandAdapter.cs
- Missing.cs
- SynchronizedReadOnlyCollection.cs
- ListViewDataItem.cs
- Int32Rect.cs
- PropertyCollection.cs
- Win32.cs
- ToolStripContentPanelDesigner.cs
- PassportIdentity.cs
- SQLDateTime.cs
- UIElementIsland.cs
- UInt16Converter.cs
- IRCollection.cs
- ToolStripLocationCancelEventArgs.cs
- DebugHandleTracker.cs
- MutexSecurity.cs
- StoryFragments.cs
- RpcCryptoRequest.cs
- OleDbException.cs
- MultiDataTrigger.cs
- TraceXPathNavigator.cs
- SqlInternalConnectionSmi.cs
- CommentEmitter.cs
- Converter.cs
- ClientOptions.cs
- TouchesOverProperty.cs
- XmlSchemaAppInfo.cs
- TablePatternIdentifiers.cs
- EventLogTraceListener.cs
- VerificationException.cs
- BindingValueChangedEventArgs.cs
- StringKeyFrameCollection.cs
- MsmqMessageProperty.cs
- WeakRefEnumerator.cs
- Point4DConverter.cs
- SpellerError.cs
- QilTypeChecker.cs
- TransformedBitmap.cs
- WpfWebRequestHelper.cs
- XPathAncestorQuery.cs
- GZipStream.cs
- SqlErrorCollection.cs
- SiteMapNodeItem.cs
- login.cs
- WebPartConnectionsConnectVerb.cs
- TreeBuilder.cs
- LocalizedNameDescriptionPair.cs
- Object.cs
- DataRowView.cs
- ConfigUtil.cs
- WorkerRequest.cs
- WebPermission.cs
- EventProviderWriter.cs
- GridErrorDlg.cs
- FamilyCollection.cs
- DefaultHttpHandler.cs
- SpeechAudioFormatInfo.cs
- ClientRoleProvider.cs
- EntityContainerEntitySet.cs
- ValidatorCollection.cs
- UInt16Converter.cs