Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / Shaping / GlyphingCache.cs / 1305600 / 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; internal GlyphingCache(int capacity) { _sizeLimitedCache = new SizeLimitedCache (capacity); } internal void GetShapeableText( Typeface typeface, CharacterBufferReference characterBufferReference, int stringLength, TextRunProperties textRunProperties, CultureInfo digitCulture, bool isRightToLeftParagraph, IList shapeableList, IShapeableTextCollector collector, TextFormattingMode textFormattingMode ) { if (!typeface.Symbol) { Lookup(typeface).GetShapeableText( characterBufferReference, stringLength, textRunProperties, digitCulture, isRightToLeftParagraph, shapeableList, collector, textFormattingMode ); } 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( typeface.TryGetGlyphTypeface(), null // device font ); collector.Add( shapeableList, new CharacterBufferRange(characterBufferReference, stringLength), textRunProperties, new MS.Internal.Text.TextInterface.ItemProps(), shapeTypeface, 1.0, // scale in Em false, // null shape textFormattingMode ); } } /// /// 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 ); _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
- RequestCacheEntry.cs
- TableColumn.cs
- TextPointerBase.cs
- COSERVERINFO.cs
- PreviousTrackingServiceAttribute.cs
- MissingFieldException.cs
- keycontainerpermission.cs
- DbDataRecord.cs
- TdsValueSetter.cs
- SEHException.cs
- NavigationEventArgs.cs
- WmlValidatorAdapter.cs
- DbCommandDefinition.cs
- WrappedIUnknown.cs
- XPathNode.cs
- FloaterParaClient.cs
- PropertyEmitter.cs
- ProfilePropertySettings.cs
- ExpressionEditorAttribute.cs
- DetailsView.cs
- Int16Converter.cs
- _LoggingObject.cs
- PeerApplication.cs
- GroupBox.cs
- ProcessModuleCollection.cs
- CompositeFontParser.cs
- LabelLiteral.cs
- Aggregates.cs
- ResXResourceReader.cs
- WebProxyScriptElement.cs
- WebPartConnectionsEventArgs.cs
- RealProxy.cs
- DBCommandBuilder.cs
- XmlSchemaSimpleTypeList.cs
- pingexception.cs
- NameValuePermission.cs
- Converter.cs
- InplaceBitmapMetadataWriter.cs
- ResourceDescriptionAttribute.cs
- SplashScreen.cs
- FontConverter.cs
- ClientBuildManager.cs
- ServiceDeploymentInfo.cs
- MsmqSecureHashAlgorithm.cs
- FileNotFoundException.cs
- KerberosTicketHashIdentifierClause.cs
- Margins.cs
- EditorPartChrome.cs
- Matrix3DConverter.cs
- WindowsNonControl.cs
- ObfuscateAssemblyAttribute.cs
- DbConnectionPoolCounters.cs
- StrongName.cs
- AlignmentXValidation.cs
- XmlStreamStore.cs
- RegularExpressionValidator.cs
- ModelMemberCollection.cs
- SizeFConverter.cs
- ComPlusTypeLoader.cs
- GridViewCancelEditEventArgs.cs
- ToolStripKeyboardHandlingService.cs
- ChangePassword.cs
- SqlParameterizer.cs
- CounterSampleCalculator.cs
- AllMembershipCondition.cs
- StaticDataManager.cs
- InstanceContextManager.cs
- Encoder.cs
- WebConfigurationFileMap.cs
- XmlSchemaInferenceException.cs
- HorizontalAlignConverter.cs
- DocumentXmlWriter.cs
- DiscreteKeyFrames.cs
- DataGridViewHitTestInfo.cs
- XamlRtfConverter.cs
- PersonalizationEntry.cs
- SystemColorTracker.cs
- HttpException.cs
- PageThemeParser.cs
- CollectionBase.cs
- SchemaMapping.cs
- ObjectQueryProvider.cs
- WebConvert.cs
- BitArray.cs
- TextTreeObjectNode.cs
- assertwrapper.cs
- AssociatedControlConverter.cs
- ImageFormatConverter.cs
- OrderPreservingSpoolingTask.cs
- SettingsPropertyValueCollection.cs
- PasswordBox.cs
- ServiceTimeoutsBehavior.cs
- WindowsRichEdit.cs
- EmptyEnumerator.cs
- TextTreeFixupNode.cs
- FontCollection.cs
- TableChangeProcessor.cs
- PathData.cs
- FamilyTypefaceCollection.cs
- DateTimeOffsetStorage.cs