Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- WorkerRequest.cs
- Debugger.cs
- SchemaConstraints.cs
- UnsafeNativeMethods.cs
- BlockCollection.cs
- WindowsIdentity.cs
- RequestCachePolicyConverter.cs
- _ListenerResponseStream.cs
- ThumbAutomationPeer.cs
- AsyncOperationManager.cs
- InputManager.cs
- PlainXmlDeserializer.cs
- SingleStorage.cs
- TextBounds.cs
- SharedStatics.cs
- XpsPackagingException.cs
- PersonalizableTypeEntry.cs
- SignedPkcs7.cs
- BlockExpression.cs
- MouseGestureValueSerializer.cs
- TextEncodedRawTextWriter.cs
- StrongNamePublicKeyBlob.cs
- TraceInternal.cs
- ClientBuildManager.cs
- PropertyConverter.cs
- TypeConverters.cs
- DataTableNewRowEvent.cs
- Html32TextWriter.cs
- ActivityDesignerResources.cs
- LinkLabelLinkClickedEvent.cs
- TextTreeRootNode.cs
- SortedDictionary.cs
- DataGridRelationshipRow.cs
- FilteredSchemaElementLookUpTable.cs
- ImpersonationContext.cs
- HeaderedContentControl.cs
- basecomparevalidator.cs
- URIFormatException.cs
- ProcessHostMapPath.cs
- DispatchChannelSink.cs
- AdornedElementPlaceholder.cs
- GeneralTransform3DCollection.cs
- CompiledAction.cs
- RelatedCurrencyManager.cs
- SerializationInfoEnumerator.cs
- OptimizedTemplateContent.cs
- ItemCollectionEditor.cs
- Brush.cs
- DataObjectSettingDataEventArgs.cs
- DocumentCollection.cs
- ViewRendering.cs
- GridToolTip.cs
- RequestCachingSection.cs
- TimeoutException.cs
- TypeConverterHelper.cs
- WinEventQueueItem.cs
- ActivityExecutorOperation.cs
- ValueSerializerAttribute.cs
- TrackingStringDictionary.cs
- Invariant.cs
- BufferedWebEventProvider.cs
- ProgressBarAutomationPeer.cs
- InvalidPipelineStoreException.cs
- FacetValues.cs
- ColumnTypeConverter.cs
- MasterPageBuildProvider.cs
- ListBoxChrome.cs
- PlatformCulture.cs
- FixedLineResult.cs
- PrimarySelectionAdorner.cs
- TextRangeSerialization.cs
- MenuAutomationPeer.cs
- FormsAuthenticationEventArgs.cs
- CachingHintValidation.cs
- NameSpaceEvent.cs
- Encoding.cs
- EventProvider.cs
- XmlToDatasetMap.cs
- PersonalizablePropertyEntry.cs
- WebPartDescription.cs
- StringComparer.cs
- EntityDataSourceQueryBuilder.cs
- TemplateColumn.cs
- GuidTagList.cs
- AvTraceDetails.cs
- CorePropertiesFilter.cs
- NamespaceInfo.cs
- DecimalAnimationBase.cs
- TemplateBindingExpression.cs
- DbResourceAllocator.cs
- XPathMultyIterator.cs
- BitmapEffect.cs
- MultipartContentParser.cs
- HttpWriter.cs
- LicenseManager.cs
- IpcClientManager.cs
- SymDocumentType.cs
- EntityDataSourceConfigureObjectContext.cs
- PenThreadWorker.cs
- XmlSortKey.cs