Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------------- // // 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
- DataGridAutoFormatDialog.cs
- NullRuntimeConfig.cs
- RuntimeConfigurationRecord.cs
- ConfigXmlAttribute.cs
- LabelEditEvent.cs
- X509Extension.cs
- PeerInvitationResponse.cs
- HandleExceptionArgs.cs
- nulltextnavigator.cs
- ComplexLine.cs
- ADRoleFactoryConfiguration.cs
- LoginUtil.cs
- UnsafeNativeMethods.cs
- OutputCacheSection.cs
- Variable.cs
- WebPartTransformerAttribute.cs
- DateTimeHelper.cs
- AppAction.cs
- AttachmentService.cs
- XmlElementCollection.cs
- PointLight.cs
- ApplyImportsAction.cs
- DefaultAsyncDataDispatcher.cs
- MessageBox.cs
- CompilationPass2Task.cs
- LinkLabelLinkClickedEvent.cs
- UriTemplate.cs
- ThrowHelper.cs
- DataGridViewDataConnection.cs
- LiteralSubsegment.cs
- HebrewCalendar.cs
- EngineSite.cs
- MsmqReceiveParameters.cs
- AffineTransform3D.cs
- URLMembershipCondition.cs
- OpenFileDialog.cs
- SizeConverter.cs
- GridViewUpdateEventArgs.cs
- LineServicesRun.cs
- control.ime.cs
- ComponentEditorForm.cs
- RadioButtonBaseAdapter.cs
- TreeViewImageKeyConverter.cs
- MailWebEventProvider.cs
- CalloutQueueItem.cs
- _OSSOCK.cs
- PartialCachingAttribute.cs
- RoutingExtension.cs
- ChildDocumentBlock.cs
- IsolatedStoragePermission.cs
- EventDriven.cs
- XamlStyleSerializer.cs
- ImplicitInputBrush.cs
- DesignUtil.cs
- LogAppendAsyncResult.cs
- TablePattern.cs
- EntitySqlQueryCacheKey.cs
- Overlapped.cs
- ListBoxItemWrapperAutomationPeer.cs
- DataColumn.cs
- SocketPermission.cs
- COMException.cs
- VisualState.cs
- JsonQNameDataContract.cs
- PageSettings.cs
- SystemIPInterfaceProperties.cs
- QilFunction.cs
- SingleConverter.cs
- Context.cs
- Mapping.cs
- XsdDataContractImporter.cs
- RelativeSource.cs
- SetterBase.cs
- ElementProxy.cs
- PolyBezierSegment.cs
- KeyValuePair.cs
- _CommandStream.cs
- UnknownWrapper.cs
- WebControl.cs
- _BasicClient.cs
- AppLevelCompilationSectionCache.cs
- DataGridAutoFormatDialog.cs
- TextBoxAutoCompleteSourceConverter.cs
- NonValidatingSecurityTokenAuthenticator.cs
- TextSerializer.cs
- Schema.cs
- Blend.cs
- SynchronizationHandlesCodeDomSerializer.cs
- CursorInteropHelper.cs
- BasicHttpSecurityMode.cs
- AnimationClock.cs
- RegexParser.cs
- CircleHotSpot.cs
- SafeFileMapViewHandle.cs
- WebPartDisplayModeEventArgs.cs
- TypedTableBase.cs
- TextEditorSpelling.cs
- OleDbEnumerator.cs
- FontClient.cs
- TextElementEnumerator.cs