Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / Shaping / GlyphingCache.cs / 1305600 / 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;
internal GlyphingCache(int capacity)
{
_sizeLimitedCache = new SizeLimitedCache(capacity);
}
internal void GetShapeableText(
Typeface typeface,
CharacterBufferReference characterBufferReference,
int stringLength,
TextRunProperties textRunProperties,
CultureInfo digitCulture,
bool isRightToLeftParagraph,
IList shapeableList,
IShapeableTextCollector collector,
TextFormattingMode textFormattingMode
)
{
if (!typeface.Symbol)
{
Lookup(typeface).GetShapeableText(
characterBufferReference,
stringLength,
textRunProperties,
digitCulture,
isRightToLeftParagraph,
shapeableList,
collector,
textFormattingMode
);
}
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(
typeface.TryGetGlyphTypeface(),
null // device font
);
collector.Add(
shapeableList,
new CharacterBufferRange(characterBufferReference, stringLength),
textRunProperties,
new MS.Internal.Text.TextInterface.ItemProps(),
shapeTypeface,
1.0, // scale in Em
false, // null shape
textFormattingMode
);
}
}
///
/// 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
);
_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;
internal GlyphingCache(int capacity)
{
_sizeLimitedCache = new SizeLimitedCache(capacity);
}
internal void GetShapeableText(
Typeface typeface,
CharacterBufferReference characterBufferReference,
int stringLength,
TextRunProperties textRunProperties,
CultureInfo digitCulture,
bool isRightToLeftParagraph,
IList shapeableList,
IShapeableTextCollector collector,
TextFormattingMode textFormattingMode
)
{
if (!typeface.Symbol)
{
Lookup(typeface).GetShapeableText(
characterBufferReference,
stringLength,
textRunProperties,
digitCulture,
isRightToLeftParagraph,
shapeableList,
collector,
textFormattingMode
);
}
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(
typeface.TryGetGlyphTypeface(),
null // device font
);
collector.Add(
shapeableList,
new CharacterBufferRange(characterBufferReference, stringLength),
textRunProperties,
new MS.Internal.Text.TextInterface.ItemProps(),
shapeTypeface,
1.0, // scale in Em
false, // null shape
textFormattingMode
);
}
}
///
/// 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
);
_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
- FieldToken.cs
- CompositeControl.cs
- NavigateEvent.cs
- BuildProvider.cs
- PageThemeBuildProvider.cs
- DataGrid.cs
- SharedPersonalizationStateInfo.cs
- AvtEvent.cs
- PeerNameResolver.cs
- DiscoveryDocumentLinksPattern.cs
- SqlInternalConnectionTds.cs
- RectIndependentAnimationStorage.cs
- RotateTransform3D.cs
- DtcInterfaces.cs
- GridViewCommandEventArgs.cs
- MappingItemCollection.cs
- SimplePropertyEntry.cs
- ServiceOperationViewControl.cs
- ToolStripSplitStackLayout.cs
- querybuilder.cs
- HandlerFactoryWrapper.cs
- RenderOptions.cs
- XPathDescendantIterator.cs
- SQLSingle.cs
- JsonMessageEncoderFactory.cs
- ReceiveReply.cs
- RichTextBoxDesigner.cs
- PerformanceCounterPermission.cs
- NotifyParentPropertyAttribute.cs
- ToolBarPanel.cs
- PrtCap_Public_Simple.cs
- AddressAlreadyInUseException.cs
- FactoryGenerator.cs
- SHA256Managed.cs
- XmlSiteMapProvider.cs
- ImageListImage.cs
- SoapFaultCodes.cs
- GPStream.cs
- XmlNodeComparer.cs
- MatcherBuilder.cs
- TableRowCollection.cs
- ListItemCollection.cs
- NonPrimarySelectionGlyph.cs
- EntityTypeBase.cs
- IPCCacheManager.cs
- HandlerElement.cs
- CodePageEncoding.cs
- Switch.cs
- MaterialGroup.cs
- HatchBrush.cs
- ServiceTimeoutsElement.cs
- BitmapEncoder.cs
- ControlAdapter.cs
- XPathMessageFilterElementCollection.cs
- XmlHierarchicalEnumerable.cs
- RoutingTable.cs
- XpsS0ValidatingLoader.cs
- CoreSwitches.cs
- ResourceProviderFactory.cs
- PartialArray.cs
- SqlDataSourceCache.cs
- XmlSchemaRedefine.cs
- ProjectionQueryOptionExpression.cs
- BoolLiteral.cs
- FormViewInsertEventArgs.cs
- CodeTypeDelegate.cs
- WsatProxy.cs
- PropertyNames.cs
- TextCharacters.cs
- CodeTypeParameter.cs
- RoleGroupCollection.cs
- ApplicationFileParser.cs
- TextEndOfParagraph.cs
- HorizontalAlignConverter.cs
- ConnectionPoolManager.cs
- XmlResolver.cs
- TableLayoutRowStyleCollection.cs
- TextInfo.cs
- XmlEntityReference.cs
- CatalogZoneDesigner.cs
- PeerApplicationLaunchInfo.cs
- DataError.cs
- SchemaImporter.cs
- NonSerializedAttribute.cs
- StrokeCollectionConverter.cs
- AlternateView.cs
- ContainerVisual.cs
- WeakReference.cs
- XmlCodeExporter.cs
- X509Utils.cs
- DataControlButton.cs
- SmiXetterAccessMap.cs
- TextEditorCharacters.cs
- TransactionChannelFactory.cs
- WhitespaceSignificantCollectionAttribute.cs
- TextBoxLine.cs
- TimeSpanParse.cs
- ProfessionalColorTable.cs
- IArgumentProvider.cs
- ExpandableObjectConverter.cs