Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / System / Windows / Media / FontEmbeddingManager.cs / 1 / FontEmbeddingManager.cs
//----------------------------------------------------------------------------
//
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
//
// Description: The FontEmbeddingManager class handles physical and composite font embedding.
//
// See spec at [....]/text/DesignDocsAndSpecs/Font%20embedding%20APIs.htm
//
//
// History:
// 01/27/2004 : [....] - Created
//
//---------------------------------------------------------------------------
using System;
using System.Text;
using System.IO;
using System.Globalization;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;
using MS.Internal.FontCache;
using MS.Internal.FontFace;
using MS.Internal.Shaping;
using System.Security;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
// Allow suppression of presharp warnings
#pragma warning disable 1634, 1691
namespace System.Windows.Media
{
///
/// The FontEmbeddingManager class handles physical and composite font embedding.
///
public class FontEmbeddingManager
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Creates a new instance of font usage manager.
///
public FontEmbeddingManager()
{
_collectedGlyphTypefaces = new Dictionary>(_uriComparer);
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// Collects information about glyph typeface and index used by a glyph run.
///
/// Glyph run to obtain typeface and index information from.
public void RecordUsage(GlyphRun glyphRun)
{
if (glyphRun == null)
throw new ArgumentNullException("glyphRun");
// Suppress PRESharp parameter validation warning about glyphRun.GlyphTypeface because
// GlyphRun.GlyphTypeface property cannot be null.
#pragma warning suppress 56506
Uri glyphTypeface = glyphRun.GlyphTypeface.FontUri;
Dictionary glyphSet;
if (_collectedGlyphTypefaces.ContainsKey(glyphTypeface))
glyphSet = _collectedGlyphTypefaces[glyphTypeface];
else
glyphSet = _collectedGlyphTypefaces[glyphTypeface] = new Dictionary();
foreach(ushort glyphIndex in glyphRun.GlyphIndices)
{
glyphSet[glyphIndex] = true;
}
}
///
/// Returns the collection of glyph typefaces used by the previously added glyph runs.
///
/// The collection of glyph typefaces used by the previously added glyph runs.
[CLSCompliant(false)]
public ICollection GlyphTypefaceUris
{
get
{
return _collectedGlyphTypefaces.Keys;
}
}
///
/// Obtain the list of glyphs used by the glyph typeface specified by a Uri.
///
/// Specifies the Uri of a glyph typeface to obtain usage data for.
/// A collection of glyph indices recorded previously.
///
/// Glyph typeface Uri does not point to a previously recorded glyph typeface.
///
[CLSCompliant(false)]
public ICollection GetUsedGlyphs(Uri glyphTypeface)
{
Dictionary glyphsUsed = _collectedGlyphTypefaces[glyphTypeface];
if (glyphsUsed == null)
{
throw new ArgumentException(SR.Get(SRID.GlyphTypefaceNotRecorded), "glyphTypeface");
}
return glyphsUsed.Keys;
}
#endregion Public Methods
private class UriComparer : IEqualityComparer
{
#region IEqualityComparer Members
public bool Equals(Uri x, Uri y)
{
// We don't use Uri.Equals because it doesn't compare Fragment parts,
// and we use Fragment part to store font face index.
return String.Equals(x.ToString(), y.ToString(), StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(Uri obj)
{
return obj.GetHashCode();
}
#endregion
}
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
///
/// bool values in the dictionary don't matter,
/// we'll switch to Set class when it becomes available.
///
private Dictionary> _collectedGlyphTypefaces;
private static UriComparer _uriComparer = new UriComparer();
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DbConnectionStringCommon.cs
- TemplatePartAttribute.cs
- LowerCaseStringConverter.cs
- XamlSerializerUtil.cs
- TokenBasedSetEnumerator.cs
- DataSourceControl.cs
- ToolStripSettings.cs
- HtmlTextArea.cs
- RepeatButton.cs
- DropSourceBehavior.cs
- StringConverter.cs
- TreeNodeEventArgs.cs
- RegisteredArrayDeclaration.cs
- WriteLine.cs
- AdCreatedEventArgs.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- ComponentEvent.cs
- Stream.cs
- WebPartDisplayModeCancelEventArgs.cs
- DbQueryCommandTree.cs
- OverrideMode.cs
- BookmarkManager.cs
- PeerPresenceInfo.cs
- _SslSessionsCache.cs
- BufferedGraphics.cs
- XpsPackagingException.cs
- XmlObjectSerializerContext.cs
- Validator.cs
- ByteFacetDescriptionElement.cs
- EntityDataSourceUtil.cs
- DataSourceCache.cs
- LayoutEvent.cs
- DataGridViewCellStateChangedEventArgs.cs
- IPEndPoint.cs
- SystemResources.cs
- IQueryable.cs
- RenderingBiasValidation.cs
- DllNotFoundException.cs
- SapiAttributeParser.cs
- TrackBarRenderer.cs
- Avt.cs
- ProcessModuleCollection.cs
- XmlByteStreamReader.cs
- HitTestResult.cs
- TextBoxView.cs
- ProcessThreadCollection.cs
- XmlSchemaAnnotated.cs
- DataGridCheckBoxColumn.cs
- UIElement.cs
- ControlEvent.cs
- DynamicValueConverter.cs
- ExpressionEditorAttribute.cs
- TaskSchedulerException.cs
- LabelDesigner.cs
- DataGridColumnCollection.cs
- Nullable.cs
- SystemResourceHost.cs
- CrossContextChannel.cs
- HtmlUtf8RawTextWriter.cs
- RNGCryptoServiceProvider.cs
- RegisteredExpandoAttribute.cs
- XmlSchemaComplexContentExtension.cs
- SerializationInfo.cs
- PersistenceProviderBehavior.cs
- XmlObjectSerializerReadContextComplexJson.cs
- SoapReflectionImporter.cs
- BitmapInitialize.cs
- FastEncoderWindow.cs
- AppDomainFactory.cs
- ElementNotEnabledException.cs
- XmlSchemaImport.cs
- FontFamilyIdentifier.cs
- ClientUIRequest.cs
- TextReader.cs
- SafeRightsManagementQueryHandle.cs
- HotSpotCollectionEditor.cs
- MenuItemBindingCollection.cs
- CodeAccessPermission.cs
- ControlType.cs
- OLEDB_Enum.cs
- DynamicILGenerator.cs
- LinkButton.cs
- XPathNode.cs
- TextEffectResolver.cs
- ConstructorNeedsTagAttribute.cs
- Convert.cs
- PrintPreviewDialog.cs
- WebServiceParameterData.cs
- MaterialGroup.cs
- ScriptingWebServicesSectionGroup.cs
- Visitors.cs
- EncodingTable.cs
- DataGridViewRowPostPaintEventArgs.cs
- UnmanagedHandle.cs
- MouseBinding.cs
- PopupEventArgs.cs
- XmlNavigatorFilter.cs
- SafeReadContext.cs
- RolePrincipal.cs
- StorageAssociationSetMapping.cs