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
- VisualBrush.cs
- DataGridViewColumnHeaderCell.cs
- FixedFindEngine.cs
- LocalizedNameDescriptionPair.cs
- DBProviderConfigurationHandler.cs
- DescendentsWalker.cs
- FrameworkName.cs
- WebReferenceOptions.cs
- VariableModifiersHelper.cs
- StatusBar.cs
- EntityDesignerBuildProvider.cs
- SoapBinding.cs
- OperationFormatStyle.cs
- RegexCode.cs
- Matrix.cs
- WebPageTraceListener.cs
- AsyncCompletedEventArgs.cs
- Publisher.cs
- UserInitiatedNavigationPermission.cs
- CodeGenerator.cs
- CompositionAdorner.cs
- HttpCacheVaryByContentEncodings.cs
- CommandExpr.cs
- PerformanceCounterPermissionAttribute.cs
- LogExtentCollection.cs
- DataRecordInfo.cs
- EventSetter.cs
- Column.cs
- TextServicesCompartmentEventSink.cs
- HostedHttpContext.cs
- DbConnectionFactory.cs
- cookiecollection.cs
- XmlQueryStaticData.cs
- SqlBooleanizer.cs
- DataTemplateSelector.cs
- RegionData.cs
- ContextBase.cs
- PrimaryKeyTypeConverter.cs
- ListViewPagedDataSource.cs
- StylusEventArgs.cs
- GCHandleCookieTable.cs
- SafeMemoryMappedFileHandle.cs
- BamlBinaryReader.cs
- DataGridViewElement.cs
- Facet.cs
- DrawingVisual.cs
- AdornedElementPlaceholder.cs
- SystemColorTracker.cs
- DirectoryRootQuery.cs
- HtmlImage.cs
- Blend.cs
- EventProxy.cs
- RuntimeTrackingProfile.cs
- InvalidPrinterException.cs
- ReadOnlyPropertyMetadata.cs
- _SafeNetHandles.cs
- nulltextnavigator.cs
- Converter.cs
- ResourceFallbackManager.cs
- OutputCacheProfile.cs
- LightweightCodeGenerator.cs
- codemethodreferenceexpression.cs
- CodePageEncoding.cs
- newinstructionaction.cs
- SmtpNtlmAuthenticationModule.cs
- MultiBindingExpression.cs
- DataGridViewToolTip.cs
- BindingGroup.cs
- WsatServiceAddress.cs
- GridViewRowPresenter.cs
- _FtpControlStream.cs
- Identity.cs
- TextProperties.cs
- QilInvokeEarlyBound.cs
- JournalEntry.cs
- UnsafeNetInfoNativeMethods.cs
- DocumentGrid.cs
- ConfigurationStrings.cs
- initElementDictionary.cs
- ColumnCollection.cs
- CreateUserWizardAutoFormat.cs
- ScrollChangedEventArgs.cs
- Token.cs
- TransformerConfigurationWizardBase.cs
- InputMethodStateChangeEventArgs.cs
- QueueSurrogate.cs
- GrammarBuilderDictation.cs
- AssemblyInfo.cs
- ArrayWithOffset.cs
- mansign.cs
- DataGridViewElement.cs
- HttpHandlerAction.cs
- TextServicesCompartmentContext.cs
- BuildProviderUtils.cs
- CharAnimationBase.cs
- ContextMenu.cs
- ClientEventManager.cs
- ServerIdentity.cs
- AssociationEndMember.cs
- SqlError.cs