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
- IssuedTokenParametersEndpointAddressElement.cs
- FormClosingEvent.cs
- EnumerableRowCollection.cs
- HeaderUtility.cs
- SnapLine.cs
- AgileSafeNativeMemoryHandle.cs
- _AuthenticationState.cs
- ExternalFile.cs
- ComponentResourceManager.cs
- DSASignatureDeformatter.cs
- CollectionView.cs
- Misc.cs
- TextFindEngine.cs
- StringArrayConverter.cs
- UpdateProgress.cs
- XmlSchemaFacet.cs
- SchemaElementDecl.cs
- CallTemplateAction.cs
- AsynchronousChannel.cs
- MatchingStyle.cs
- CustomAttributeFormatException.cs
- SafePEFileHandle.cs
- DesignerListAdapter.cs
- _ProxyRegBlob.cs
- MultipleViewPattern.cs
- WbemProvider.cs
- ExpressionValueEditor.cs
- X509Extension.cs
- Gdiplus.cs
- TreeNodeEventArgs.cs
- FormattedText.cs
- DataListItem.cs
- ControlUtil.cs
- StringAnimationUsingKeyFrames.cs
- DependencyObject.cs
- UnsafeNativeMethods.cs
- SetMemberBinder.cs
- PauseStoryboard.cs
- Source.cs
- XmlSchemaParticle.cs
- UIElement3DAutomationPeer.cs
- ScrollData.cs
- DocumentPageViewAutomationPeer.cs
- NavigatorOutput.cs
- WindowsFormsHelpers.cs
- propertyentry.cs
- WebPartDisplayMode.cs
- SingleKeyFrameCollection.cs
- TextRangeEditTables.cs
- ZoneIdentityPermission.cs
- FlowDocumentView.cs
- PageRequestManager.cs
- OperandQuery.cs
- SizeChangedEventArgs.cs
- SignatureHelper.cs
- FilteredAttributeCollection.cs
- HttpCachePolicyBase.cs
- columnmapkeybuilder.cs
- TriggerCollection.cs
- UnaryNode.cs
- TransformDescriptor.cs
- LocalFileSettingsProvider.cs
- XmlTypeMapping.cs
- ProjectedSlot.cs
- DelegatingConfigHost.cs
- X509Utils.cs
- ControlPropertyNameConverter.cs
- ServiceModelExtensionElement.cs
- ShapeTypeface.cs
- OracleBinary.cs
- DataObjectPastingEventArgs.cs
- WsiProfilesElement.cs
- WindowsScrollBar.cs
- CodeFieldReferenceExpression.cs
- ImageSource.cs
- AspProxy.cs
- HwndSubclass.cs
- DataGridViewCellStyleConverter.cs
- PagerStyle.cs
- ACE.cs
- GridViewItemAutomationPeer.cs
- MissingManifestResourceException.cs
- ToolStripLocationCancelEventArgs.cs
- FileAccessException.cs
- PropertyCondition.cs
- EnumValAlphaComparer.cs
- NativeObjectSecurity.cs
- BrowserCapabilitiesFactory.cs
- SchemaConstraints.cs
- BufferedOutputAsyncStream.cs
- XmlILConstructAnalyzer.cs
- TransformerInfoCollection.cs
- SqlDependencyUtils.cs
- ImportStoreException.cs
- MenuDesigner.cs
- BamlLocalizableResourceKey.cs
- AutomationProperties.cs
- MdiWindowListItemConverter.cs
- ObjectParameterCollection.cs
- _AutoWebProxyScriptWrapper.cs