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
- WorkflowQueue.cs
- ExecutorLocksHeldException.cs
- ClientTarget.cs
- CapacityStreamGeometryContext.cs
- RenderData.cs
- MatrixAnimationUsingKeyFrames.cs
- XmlText.cs
- CompareValidator.cs
- MemoryStream.cs
- Menu.cs
- WindowsFont.cs
- Grid.cs
- Expander.cs
- Focus.cs
- RegisteredExpandoAttribute.cs
- RouteItem.cs
- WeakReferenceList.cs
- MonitoringDescriptionAttribute.cs
- FileSystemWatcher.cs
- _BufferOffsetSize.cs
- AsyncDataRequest.cs
- ProcessStartInfo.cs
- InvalidateEvent.cs
- ResourceProviderFactory.cs
- EdmFunctions.cs
- EntryWrittenEventArgs.cs
- Scripts.cs
- ServiceDescriptionImporter.cs
- NativeWindow.cs
- StorageModelBuildProvider.cs
- QueryOutputWriterV1.cs
- VersionPair.cs
- DataGridItemEventArgs.cs
- AppDomainFactory.cs
- MethodSignatureGenerator.cs
- MenuItemCollection.cs
- ComponentGlyph.cs
- EnumMember.cs
- MarkerProperties.cs
- StreamReader.cs
- WorkflowInstanceRecord.cs
- ExpressionPrefixAttribute.cs
- AuthenticatingEventArgs.cs
- XmlNullResolver.cs
- TextSelectionHighlightLayer.cs
- ReadOnlyPropertyMetadata.cs
- TypeCacheManager.cs
- TextFormatterHost.cs
- HttpHandlerActionCollection.cs
- ReplacementText.cs
- WarningException.cs
- ConcurrencyBehavior.cs
- XmlSchemaAttributeGroup.cs
- ConnectionManagementElement.cs
- hebrewshape.cs
- PageAsyncTaskManager.cs
- HtmlWindow.cs
- InternalEnumValidator.cs
- DecimalKeyFrameCollection.cs
- NetWebProxyFinder.cs
- SerializationObjectManager.cs
- HostingPreferredMapPath.cs
- ResXResourceSet.cs
- EventHandlerService.cs
- AuthenticationServiceManager.cs
- EncoderNLS.cs
- ActivityXRefConverter.cs
- NativeMethods.cs
- DockAndAnchorLayout.cs
- RepeaterItemCollection.cs
- FrameSecurityDescriptor.cs
- EntityViewGenerator.cs
- FieldCollectionEditor.cs
- CheckoutException.cs
- VoiceChangeEventArgs.cs
- CodeTypeReference.cs
- DayRenderEvent.cs
- TempFiles.cs
- ADMembershipUser.cs
- DeviceContext.cs
- TdsParameterSetter.cs
- UIElementAutomationPeer.cs
- PasswordBox.cs
- XamlInt32CollectionSerializer.cs
- IOException.cs
- MobileTemplatedControlDesigner.cs
- RichTextBox.cs
- BinaryFormatterWriter.cs
- ClientSession.cs
- EventKeyword.cs
- MessageHeaderDescriptionCollection.cs
- DeclarativeCatalogPartDesigner.cs
- BlockCollection.cs
- DocumentSequence.cs
- ReadOnlyHierarchicalDataSourceView.cs
- FileDialog.cs
- SystemIPInterfaceProperties.cs
- _ConnectOverlappedAsyncResult.cs
- TextEffectCollection.cs
- QilStrConcat.cs