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
- ConditionalBranch.cs
- BuiltInExpr.cs
- NegatedConstant.cs
- PointConverter.cs
- Matrix.cs
- AutomationPatternInfo.cs
- SymbolResolver.cs
- Events.cs
- DefaultSettingsSection.cs
- TagMapCollection.cs
- ViewBase.cs
- Image.cs
- SizeChangedEventArgs.cs
- Partitioner.cs
- EventMappingSettings.cs
- UnsafeNativeMethodsPenimc.cs
- CompiledRegexRunner.cs
- SqlHelper.cs
- Constraint.cs
- NamedElement.cs
- InstancePersistenceContext.cs
- AuthenticationServiceManager.cs
- ZipPackagePart.cs
- InvokePattern.cs
- WizardPanel.cs
- BoundColumn.cs
- DataGridViewCellStateChangedEventArgs.cs
- SnapshotChangeTrackingStrategy.cs
- OneOfConst.cs
- SqlNotificationEventArgs.cs
- FixedSOMTable.cs
- UnknownBitmapDecoder.cs
- AppDomainUnloadedException.cs
- ValueSerializer.cs
- ResourceDisplayNameAttribute.cs
- SecurityTokenRequirement.cs
- GridViewItemAutomationPeer.cs
- FixedSOMTable.cs
- PropertyChangeTracker.cs
- PenLineCapValidation.cs
- MyContact.cs
- TreeViewEvent.cs
- DNS.cs
- ColorTransform.cs
- X500Name.cs
- UrlAuthorizationModule.cs
- Int16Storage.cs
- CreateUserWizard.cs
- EntityDataSourceWrapper.cs
- clipboard.cs
- DateTimeValueSerializerContext.cs
- BufferedGraphicsContext.cs
- PrimaryKeyTypeConverter.cs
- SqlFactory.cs
- WindowsComboBox.cs
- loginstatus.cs
- XPathSingletonIterator.cs
- ListSortDescriptionCollection.cs
- TraceSwitch.cs
- HwndSourceParameters.cs
- ThemeDictionaryExtension.cs
- NativeMethodsOther.cs
- Page.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- XmlObjectSerializerWriteContext.cs
- SendingRequestEventArgs.cs
- BoundColumn.cs
- XmlSchemaExternal.cs
- RSAPKCS1KeyExchangeFormatter.cs
- GB18030Encoding.cs
- XmlILOptimizerVisitor.cs
- OrderByBuilder.cs
- ResizeGrip.cs
- Atom10FormatterFactory.cs
- WebPartConnectionCollection.cs
- ButtonDesigner.cs
- SolidColorBrush.cs
- SqlProfileProvider.cs
- RowUpdatedEventArgs.cs
- Floater.cs
- SqlNodeAnnotation.cs
- CharEntityEncoderFallback.cs
- InternalsVisibleToAttribute.cs
- CompilationUnit.cs
- ZoneMembershipCondition.cs
- PriorityRange.cs
- RadioButtonList.cs
- GuidTagList.cs
- SvcMapFile.cs
- WebServiceReceive.cs
- CompilerGeneratedAttribute.cs
- DaylightTime.cs
- DragCompletedEventArgs.cs
- MembershipValidatePasswordEventArgs.cs
- DummyDataSource.cs
- OracleRowUpdatedEventArgs.cs
- Util.cs
- SinglePageViewer.cs
- ListViewHitTestInfo.cs
- ClientBuildManagerCallback.cs