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
- WrappedOptions.cs
- TemplateField.cs
- mediapermission.cs
- CounterSampleCalculator.cs
- TTSVoice.cs
- PrimitiveCodeDomSerializer.cs
- CapabilitiesSection.cs
- ContentDesigner.cs
- HtmlInputPassword.cs
- DocumentApplication.cs
- XComponentModel.cs
- XmlWellformedWriter.cs
- CompilerScope.Storage.cs
- HostingEnvironment.cs
- ComUdtElementCollection.cs
- PropertyNames.cs
- SafeUserTokenHandle.cs
- XmlSchemaProviderAttribute.cs
- DeadCharTextComposition.cs
- XmlSerializationReader.cs
- ImageMap.cs
- XmlSchemas.cs
- DataGridViewRowStateChangedEventArgs.cs
- XPathPatternBuilder.cs
- TemplateAction.cs
- SemaphoreSecurity.cs
- RouteParser.cs
- Touch.cs
- BigInt.cs
- NullableDoubleAverageAggregationOperator.cs
- FormClosingEvent.cs
- SqlSelectStatement.cs
- Cursor.cs
- SHA384.cs
- ReachFixedDocumentSerializerAsync.cs
- SamlAssertionKeyIdentifierClause.cs
- RefreshPropertiesAttribute.cs
- DropTarget.cs
- FastEncoder.cs
- ListItemConverter.cs
- DateTimeFormatInfo.cs
- ConnectionModeReader.cs
- DetailsViewAutoFormat.cs
- WmiEventSink.cs
- serverconfig.cs
- GeneralTransform3DGroup.cs
- WebBrowser.cs
- ArraySegment.cs
- OracleConnection.cs
- DrawingContextWalker.cs
- WebUtil.cs
- HttpSessionStateWrapper.cs
- CssStyleCollection.cs
- PlanCompilerUtil.cs
- CloudCollection.cs
- CodeTypeParameterCollection.cs
- WebPartAddingEventArgs.cs
- HitTestParameters3D.cs
- AssemblyCollection.cs
- PixelShader.cs
- PartitionedStream.cs
- ToolStripPanelCell.cs
- SettingsAttributes.cs
- SchemaCollectionCompiler.cs
- SiteMapDesignerDataSourceView.cs
- ControllableStoryboardAction.cs
- DictionaryBase.cs
- SqlInfoMessageEvent.cs
- HMACSHA512.cs
- PeerService.cs
- View.cs
- BufferedGraphics.cs
- OutKeywords.cs
- ComponentChangingEvent.cs
- Set.cs
- XmlUrlResolver.cs
- Rotation3DKeyFrameCollection.cs
- DataGridItem.cs
- MouseButton.cs
- SqlError.cs
- IPAddressCollection.cs
- XmlCompatibilityReader.cs
- UrlPath.cs
- ReflectionPermission.cs
- FrameworkPropertyMetadata.cs
- XslCompiledTransform.cs
- PermissionAttributes.cs
- CodeMethodReturnStatement.cs
- DtdParser.cs
- AmbientProperties.cs
- XmlAutoDetectWriter.cs
- MimePart.cs
- Rect3DValueSerializer.cs
- __TransparentProxy.cs
- FormsIdentity.cs
- ExceptQueryOperator.cs
- PartManifestEntry.cs
- PointLightBase.cs
- DeviceContexts.cs
- ToolStripProfessionalLowResolutionRenderer.cs