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
- ProxyManager.cs
- XmlProcessingInstruction.cs
- KeyInstance.cs
- HWStack.cs
- SiteMapPathDesigner.cs
- TypeSystemProvider.cs
- OpacityConverter.cs
- ContainerControl.cs
- ToolStripDropDownClosedEventArgs.cs
- AndCondition.cs
- PasswordRecoveryDesigner.cs
- NodeLabelEditEvent.cs
- IpcChannelHelper.cs
- HebrewCalendar.cs
- unsafenativemethodsother.cs
- TableChangeProcessor.cs
- AnnotationComponentChooser.cs
- DependencyObject.cs
- HttpCookiesSection.cs
- DateTimeConverter2.cs
- ContextMenu.cs
- Pair.cs
- QueryConverter.cs
- Image.cs
- ToolStripGrip.cs
- autovalidator.cs
- HierarchicalDataBoundControl.cs
- SelectionHighlightInfo.cs
- PropertyTab.cs
- Set.cs
- mongolianshape.cs
- ControlBindingsCollection.cs
- XamlRtfConverter.cs
- SkipStoryboardToFill.cs
- PropertyTabAttribute.cs
- PlatformCulture.cs
- ExceptionRoutedEventArgs.cs
- KeyGestureConverter.cs
- _WinHttpWebProxyDataBuilder.cs
- WorkflowTransactionOptions.cs
- Options.cs
- ExchangeUtilities.cs
- CustomAttribute.cs
- XMLSyntaxException.cs
- ErasingStroke.cs
- MenuItem.cs
- ImageList.cs
- ToolStripDropDownClosingEventArgs.cs
- CompoundFileStorageReference.cs
- StringAnimationUsingKeyFrames.cs
- bindurihelper.cs
- DateTimeFormatInfoScanner.cs
- NonceCache.cs
- ButtonChrome.cs
- GrammarBuilderBase.cs
- XNameConverter.cs
- SessionStateItemCollection.cs
- NativeCompoundFileAPIs.cs
- Facet.cs
- XmlSchemaSimpleContentRestriction.cs
- ContentPlaceHolder.cs
- UnsafeNativeMethods.cs
- WebPartConnectionsCloseVerb.cs
- ObjectParameterCollection.cs
- Utility.cs
- ZoneMembershipCondition.cs
- WindowsTooltip.cs
- GridViewUpdateEventArgs.cs
- ResourcesBuildProvider.cs
- oledbconnectionstring.cs
- CleanUpVirtualizedItemEventArgs.cs
- DataGridPagerStyle.cs
- FSWPathEditor.cs
- DataTableNewRowEvent.cs
- SchemaDeclBase.cs
- AtomServiceDocumentSerializer.cs
- Base64Stream.cs
- WebPartConnectionsEventArgs.cs
- EdmComplexPropertyAttribute.cs
- CollectionViewGroupRoot.cs
- BmpBitmapDecoder.cs
- CodeAccessPermission.cs
- ResolvedKeyFrameEntry.cs
- infer.cs
- LinqDataSourceInsertEventArgs.cs
- Unit.cs
- Hash.cs
- SerializationAttributes.cs
- __Filters.cs
- contentDescriptor.cs
- Color.cs
- CanExecuteRoutedEventArgs.cs
- RawKeyboardInputReport.cs
- HtmlDocument.cs
- SqlCharStream.cs
- FontNameEditor.cs
- RouteCollection.cs
- GeneralTransform3DGroup.cs
- XsltException.cs
- ZipIOExtraFieldPaddingElement.cs