Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- XmlSchemaSimpleContentRestriction.cs
- MultiDataTrigger.cs
- AvtEvent.cs
- StyleXamlTreeBuilder.cs
- CodeCatchClauseCollection.cs
- HighContrastHelper.cs
- ColorContextHelper.cs
- WpfKnownTypeInvoker.cs
- TypeUnloadedException.cs
- FusionWrap.cs
- BulletedListEventArgs.cs
- ConfigXmlReader.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- TreePrinter.cs
- EntityProviderServices.cs
- ImageInfo.cs
- ProcessHostConfigUtils.cs
- IsolatedStorageFileStream.cs
- ListViewGroupItemCollection.cs
- HttpProfileGroupBase.cs
- TextBoxRenderer.cs
- TypeConverter.cs
- GridViewSortEventArgs.cs
- Color.cs
- Page.cs
- SerialPort.cs
- ConvertBinder.cs
- HttpAsyncResult.cs
- ContentValidator.cs
- DispatcherTimer.cs
- ToolStripGrip.cs
- String.cs
- Lock.cs
- ParallelSeparator.xaml.cs
- TypeValidationEventArgs.cs
- PaintEvent.cs
- RootBrowserWindowProxy.cs
- PageTheme.cs
- OrderByLifter.cs
- StringSorter.cs
- XslNumber.cs
- ImageButton.cs
- EdgeModeValidation.cs
- Stroke.cs
- _CookieModule.cs
- ImageCodecInfoPrivate.cs
- TableHeaderCell.cs
- Pair.cs
- Thread.cs
- XsltCompileContext.cs
- StorageEntitySetMapping.cs
- SessionStateModule.cs
- IImplicitResourceProvider.cs
- BitmapEffectInputConnector.cs
- RemotingSurrogateSelector.cs
- LoadWorkflowCommand.cs
- BindingWorker.cs
- TranslateTransform3D.cs
- DelayedRegex.cs
- ListBindingHelper.cs
- WebRequest.cs
- RowVisual.cs
- ColumnMapCopier.cs
- MaskPropertyEditor.cs
- HtmlInputSubmit.cs
- BaseCollection.cs
- WpfWebRequestHelper.cs
- CqlQuery.cs
- RawMouseInputReport.cs
- MimeParameterWriter.cs
- RemoteHelper.cs
- DataBindingExpressionBuilder.cs
- BitmapSizeOptions.cs
- DataBoundControlDesigner.cs
- CommentEmitter.cs
- ItemsChangedEventArgs.cs
- FakeModelPropertyImpl.cs
- ScrollProperties.cs
- Assert.cs
- SemaphoreSlim.cs
- VBIdentifierDesigner.xaml.cs
- AdditionalEntityFunctions.cs
- ToolConsole.cs
- BoundField.cs
- RepeaterItem.cs
- RegexWorker.cs
- SessionPageStatePersister.cs
- LinqDataSourceUpdateEventArgs.cs
- GridViewRow.cs
- CodeTypeDeclaration.cs
- DockingAttribute.cs
- ThreadSafeList.cs
- FileNotFoundException.cs
- VisualTarget.cs
- BigInt.cs
- ImageClickEventArgs.cs
- SoapMessage.cs
- IDQuery.cs
- ContainerUIElement3D.cs
- WebControl.cs