Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / Shaping / GlyphingCache.cs / 1 / GlyphingCache.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: High level glyphing cache // // History: 5-19-2005 [....] 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Helpers.cs
- TempFiles.cs
- DataTemplateKey.cs
- ActivityCodeDomSerializationManager.cs
- DescriptionAttribute.cs
- ScriptingRoleServiceSection.cs
- KnownTypesHelper.cs
- HashStream.cs
- NullEntityWrapper.cs
- Panel.cs
- ToolStripCollectionEditor.cs
- Helpers.cs
- ConnectionsZone.cs
- AppDomainAttributes.cs
- DefaultAssemblyResolver.cs
- AppDomainManager.cs
- Policy.cs
- TargetConverter.cs
- SafeFileMapViewHandle.cs
- MimeParameters.cs
- Flowchart.cs
- PageBuildProvider.cs
- _Rfc2616CacheValidators.cs
- DbMetaDataColumnNames.cs
- WpfPayload.cs
- DataGridCellItemAutomationPeer.cs
- DataGridViewButtonCell.cs
- BindingSource.cs
- EntityViewContainer.cs
- TCPListener.cs
- Pair.cs
- MasterPage.cs
- LoadWorkflowByInstanceKeyCommand.cs
- UiaCoreApi.cs
- SqlConnectionString.cs
- Converter.cs
- StorageComplexTypeMapping.cs
- WebPartMenuStyle.cs
- SmiEventSink.cs
- CustomErrorCollection.cs
- RelatedCurrencyManager.cs
- MetafileHeader.cs
- PathSegment.cs
- AssemblyNameProxy.cs
- StyleXamlParser.cs
- ExpressionBuilder.cs
- ParameterToken.cs
- TargetControlTypeAttribute.cs
- ConfigurationSchemaErrors.cs
- MsmqTransportBindingElement.cs
- Sequence.cs
- _AutoWebProxyScriptWrapper.cs
- PerfCounters.cs
- XPathConvert.cs
- SqlClientFactory.cs
- SqlDataSourceCustomCommandEditor.cs
- NumberFormatInfo.cs
- DbTypeMap.cs
- MainMenu.cs
- ResourceDescriptionAttribute.cs
- SmiMetaDataProperty.cs
- FullTextBreakpoint.cs
- DataGridViewCellStyleChangedEventArgs.cs
- TableItemProviderWrapper.cs
- XmlDataCollection.cs
- ServiceBuildProvider.cs
- DataServiceRequest.cs
- TableItemProviderWrapper.cs
- OutputWindow.cs
- ToolTipService.cs
- SQLInt64.cs
- BinaryExpressionHelper.cs
- WorkItem.cs
- CoreSwitches.cs
- RequestQueue.cs
- AesCryptoServiceProvider.cs
- DrawingCollection.cs
- QuadraticBezierSegment.cs
- WasAdminWrapper.cs
- TokenBasedSetEnumerator.cs
- FrameworkTemplate.cs
- XhtmlBasicTextBoxAdapter.cs
- ProfilePropertyMetadata.cs
- DataBinder.cs
- MetadataItemEmitter.cs
- OutputWindow.cs
- AttachedAnnotationChangedEventArgs.cs
- SqlServer2KCompatibilityCheck.cs
- DragDeltaEventArgs.cs
- ArcSegment.cs
- DataListItemEventArgs.cs
- X509ThumbprintKeyIdentifierClause.cs
- SmtpNetworkElement.cs
- ExtenderControl.cs
- BuildProviderInstallComponent.cs
- BitmapFrameEncode.cs
- LoginUtil.cs
- PrintDialog.cs
- CanonicalXml.cs
- EdmType.cs