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
- BaseDataBoundControl.cs
- GeneralTransform3D.cs
- ClaimSet.cs
- Span.cs
- ExpressionConverter.cs
- XmlWriterSettings.cs
- TextLine.cs
- NativeMethods.cs
- StylusPointProperties.cs
- DrawingContextDrawingContextWalker.cs
- HtmlElementEventArgs.cs
- ReadOnlyPropertyMetadata.cs
- ToolStripButton.cs
- MenuBindingsEditor.cs
- WebPartVerbCollection.cs
- BoundingRectTracker.cs
- DesignerValidationSummaryAdapter.cs
- XmlnsPrefixAttribute.cs
- SecurityAlgorithmSuite.cs
- TableItemPattern.cs
- TypeSystemHelpers.cs
- TextRunCache.cs
- FixUp.cs
- MenuCommandsChangedEventArgs.cs
- DescendantBaseQuery.cs
- NativeObjectSecurity.cs
- ModuleConfigurationInfo.cs
- DivideByZeroException.cs
- FieldCollectionEditor.cs
- PointCollection.cs
- StandardMenuStripVerb.cs
- SapiRecoContext.cs
- TypeBuilderInstantiation.cs
- DateTimeSerializationSection.cs
- ThemeDirectoryCompiler.cs
- TTSEvent.cs
- TriState.cs
- WebServiceHandler.cs
- XmlDeclaration.cs
- ContextStaticAttribute.cs
- Brush.cs
- ISAPIRuntime.cs
- XmlEntity.cs
- ObjectPropertyMapping.cs
- DataGridSortCommandEventArgs.cs
- Application.cs
- Region.cs
- VisualProxy.cs
- AutomationPatternInfo.cs
- XmlHelper.cs
- XmlText.cs
- DrawingBrush.cs
- SafeRegistryHandle.cs
- PrivacyNoticeElement.cs
- Span.cs
- ProjectionPathSegment.cs
- PeerCredential.cs
- SrgsSemanticInterpretationTag.cs
- XPathMessageFilter.cs
- RouteParameter.cs
- PhotoPrintingIntent.cs
- HostProtectionException.cs
- ToolTip.cs
- AssemblyHash.cs
- ListViewEditEventArgs.cs
- SequentialUshortCollection.cs
- PtsCache.cs
- ListenerElementsCollection.cs
- ByteStreamGeometryContext.cs
- LayoutEditorPart.cs
- DocumentScope.cs
- PenThread.cs
- MetabaseServerConfig.cs
- iisPickupDirectory.cs
- ProtocolException.cs
- Int32KeyFrameCollection.cs
- AutomationElementCollection.cs
- KeyboardNavigation.cs
- ConfigurationValues.cs
- FixedSOMSemanticBox.cs
- MenuItemStyle.cs
- LoginName.cs
- DataGridViewUtilities.cs
- Point3DCollectionValueSerializer.cs
- ShutDownListener.cs
- PrintControllerWithStatusDialog.cs
- RtType.cs
- FrameworkContentElementAutomationPeer.cs
- FixedBufferAttribute.cs
- EtwTrace.cs
- TableLayoutSettingsTypeConverter.cs
- Bitmap.cs
- EdmMember.cs
- ISAPIRuntime.cs
- HttpCapabilitiesEvaluator.cs
- QueryCreatedEventArgs.cs
- Errors.cs
- DrawToolTipEventArgs.cs
- AccessibleObject.cs
- GridViewCancelEditEventArgs.cs