Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / MS / Internal / FontCache / CachedFontFace.cs / 1 / CachedFontFace.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: The CachedFontFace class
//
// History:
// 03/04/2004 : mleonov - Cache layout and interface changes for font enumeration.
//
//---------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Windows;
using System.Windows.Media;
using MS.Win32;
using MS.Utility;
using MS.Internal;
using MS.Internal.FontFace;
namespace MS.Internal.FontCache
{
///
/// This structure exists because we need a common wrapper for enumeration, but we can't use original cache structures:
/// 1. C# doesn't allow IEnumerable/IEnumerator on pointer.
/// 2. The cache structures don't inherit from base class.
///
internal struct CachedFontFace
{
private FamilyCollection _familyCollection;
///
/// Critical: This is a pointer variable and hence not safe to expose.
///
[SecurityCritical]
private unsafe FamilyCollection.CachedFace * _face;
///
/// Critical: Determines value of CheckedPointer.Size, which is used for bounds checking.
///
[SecurityCritical]
private unsafe int _sizeInBytes;
///
/// Critical: This accesses a pointer and is unsafe; the sizeInBytes is critical because it
/// is used for bounds checking (via CheckedPointer)
///
[SecurityCritical]
public unsafe CachedFontFace(FamilyCollection familyCollection, FamilyCollection.CachedFace* face, int sizeInBytes)
{
_familyCollection = familyCollection;
_face = face;
_sizeInBytes = sizeInBytes;
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public bool IsNull
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face == null;
}
}
}
///
/// Critical: This contructs a null object
/// TreatAsSafe: This is ok to execute
///
public static CachedFontFace Null
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return new CachedFontFace(null, null, 0);
}
}
}
///
/// Critical: This accesses unsafe code and returns a pointer
///
public unsafe FamilyCollection.CachedPhysicalFace* CachedPhysicalFace
{
[SecurityCritical]
get
{
return (FamilyCollection.CachedPhysicalFace *)_face;
}
}
///
/// Critical: This accesses unsafe code and returns a pointer
///
public unsafe FamilyCollection.CachedCompositeFace* CompositeFace
{
[SecurityCritical]
get
{
return (FamilyCollection.CachedCompositeFace *)_face;
}
}
///
/// Critical: Accesses critical fields and constructs a CheckedPointer which is a critical operation.
/// TreatAsSafe: The fields used to construct the CheckedPointer are marked critical and CheckedPointer
/// itself is safe to expose.
///
public CheckedPointer CheckedPointer
{
[SecurityCritical, SecurityTreatAsSafe]
get
{
unsafe
{
return new CheckedPointer(_face, _sizeInBytes);
}
}
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public FontStyle Style
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face->style;
}
}
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public FontWeight Weight
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face->weight;
}
}
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public FontStretch Stretch
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face->stretch;
}
}
}
///
/// Matching style
///
public MatchingStyle MatchingStyle
{
get
{
return new MatchingStyle(Style, Weight, Stretch);
}
}
///
/// Critical - as this accesses unsafe pointers and returns GlyphTypeface created from internal constructor
/// which exposes windows font information.
/// Safe - as this doesn't allow you to create a GlyphTypeface object for a specific
/// font and thus won't allow you to figure what fonts might be installed on
/// the machine.
///
[SecurityCritical, SecurityTreatAsSafe]
public GlyphTypeface CreateGlyphTypeface()
{
unsafe
{
return new GlyphTypeface(
_familyCollection.GetFontUri(CachedPhysicalFace),
CachedPhysicalFace->styleSimulations,
/* fromPublic = */ false
);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: The CachedFontFace class
//
// History:
// 03/04/2004 : mleonov - Cache layout and interface changes for font enumeration.
//
//---------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Windows;
using System.Windows.Media;
using MS.Win32;
using MS.Utility;
using MS.Internal;
using MS.Internal.FontFace;
namespace MS.Internal.FontCache
{
///
/// This structure exists because we need a common wrapper for enumeration, but we can't use original cache structures:
/// 1. C# doesn't allow IEnumerable/IEnumerator on pointer.
/// 2. The cache structures don't inherit from base class.
///
internal struct CachedFontFace
{
private FamilyCollection _familyCollection;
///
/// Critical: This is a pointer variable and hence not safe to expose.
///
[SecurityCritical]
private unsafe FamilyCollection.CachedFace * _face;
///
/// Critical: Determines value of CheckedPointer.Size, which is used for bounds checking.
///
[SecurityCritical]
private unsafe int _sizeInBytes;
///
/// Critical: This accesses a pointer and is unsafe; the sizeInBytes is critical because it
/// is used for bounds checking (via CheckedPointer)
///
[SecurityCritical]
public unsafe CachedFontFace(FamilyCollection familyCollection, FamilyCollection.CachedFace* face, int sizeInBytes)
{
_familyCollection = familyCollection;
_face = face;
_sizeInBytes = sizeInBytes;
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public bool IsNull
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face == null;
}
}
}
///
/// Critical: This contructs a null object
/// TreatAsSafe: This is ok to execute
///
public static CachedFontFace Null
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return new CachedFontFace(null, null, 0);
}
}
}
///
/// Critical: This accesses unsafe code and returns a pointer
///
public unsafe FamilyCollection.CachedPhysicalFace* CachedPhysicalFace
{
[SecurityCritical]
get
{
return (FamilyCollection.CachedPhysicalFace *)_face;
}
}
///
/// Critical: This accesses unsafe code and returns a pointer
///
public unsafe FamilyCollection.CachedCompositeFace* CompositeFace
{
[SecurityCritical]
get
{
return (FamilyCollection.CachedCompositeFace *)_face;
}
}
///
/// Critical: Accesses critical fields and constructs a CheckedPointer which is a critical operation.
/// TreatAsSafe: The fields used to construct the CheckedPointer are marked critical and CheckedPointer
/// itself is safe to expose.
///
public CheckedPointer CheckedPointer
{
[SecurityCritical, SecurityTreatAsSafe]
get
{
unsafe
{
return new CheckedPointer(_face, _sizeInBytes);
}
}
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public FontStyle Style
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face->style;
}
}
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public FontWeight Weight
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face->weight;
}
}
}
///
/// Critical: This accesses a pointer and is unsafe
/// TreatAsSafe: This information is ok to return
///
public FontStretch Stretch
{
[SecurityCritical,SecurityTreatAsSafe]
get
{
unsafe
{
return _face->stretch;
}
}
}
///
/// Matching style
///
public MatchingStyle MatchingStyle
{
get
{
return new MatchingStyle(Style, Weight, Stretch);
}
}
///
/// Critical - as this accesses unsafe pointers and returns GlyphTypeface created from internal constructor
/// which exposes windows font information.
/// Safe - as this doesn't allow you to create a GlyphTypeface object for a specific
/// font and thus won't allow you to figure what fonts might be installed on
/// the machine.
///
[SecurityCritical, SecurityTreatAsSafe]
public GlyphTypeface CreateGlyphTypeface()
{
unsafe
{
return new GlyphTypeface(
_familyCollection.GetFontUri(CachedPhysicalFace),
CachedPhysicalFace->styleSimulations,
/* fromPublic = */ false
);
}
}
}
}
// 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
- StorageBasedPackageProperties.cs
- DisableDpiAwarenessAttribute.cs
- SqlMetaData.cs
- BypassElementCollection.cs
- ButtonBase.cs
- SecuritySessionFilter.cs
- PageParserFilter.cs
- _Connection.cs
- BitmapEffectInputData.cs
- ECDiffieHellman.cs
- DependencyObjectType.cs
- ReflectionTypeLoadException.cs
- StructuredTypeEmitter.cs
- PopupRootAutomationPeer.cs
- FreezableCollection.cs
- GreenMethods.cs
- HttpConfigurationContext.cs
- ToolStripDropDownMenu.cs
- TabControl.cs
- DebuggerAttributes.cs
- StreamingContext.cs
- TypeListConverter.cs
- UrlMappingsModule.cs
- NamespaceEmitter.cs
- TextRangeProviderWrapper.cs
- CompositeScriptReferenceEventArgs.cs
- Variant.cs
- SmiEventSink_Default.cs
- MultiBinding.cs
- ProfileSettingsCollection.cs
- NativeMethods.cs
- StylusButton.cs
- HtmlSelect.cs
- QilTypeChecker.cs
- CqlBlock.cs
- HandledEventArgs.cs
- Point3D.cs
- KeyGesture.cs
- KeyValuePair.cs
- SHA1CryptoServiceProvider.cs
- DefaultCommandExtensionCallback.cs
- Tuple.cs
- OleStrCAMarshaler.cs
- DropSourceBehavior.cs
- HeaderCollection.cs
- OleDbErrorCollection.cs
- GetFileNameResult.cs
- XPathParser.cs
- ChooseAction.cs
- SecurityHelper.cs
- ImageSource.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- CurrentTimeZone.cs
- SmiContextFactory.cs
- Pts.cs
- FileEnumerator.cs
- MergablePropertyAttribute.cs
- WebOperationContext.cs
- ListViewItem.cs
- DoubleAnimationClockResource.cs
- WebResourceAttribute.cs
- VisualStyleElement.cs
- TrackingParameters.cs
- TransportSecurityProtocolFactory.cs
- TableLayoutSettingsTypeConverter.cs
- ListViewInsertionMark.cs
- InvalidChannelBindingException.cs
- DrawingBrush.cs
- TransformerInfo.cs
- RegisteredScript.cs
- GeometryGroup.cs
- RegisteredScript.cs
- RNGCryptoServiceProvider.cs
- DataServiceClientException.cs
- hebrewshape.cs
- ObjectDataSourceEventArgs.cs
- ZipFileInfoCollection.cs
- HtmlInputText.cs
- WindowsUpDown.cs
- DateTimeOffsetStorage.cs
- MimeTypePropertyAttribute.cs
- MessageDecoder.cs
- MdiWindowListItemConverter.cs
- CompiledELinqQueryState.cs
- GeometryModel3D.cs
- KeyValueInternalCollection.cs
- DataSetViewSchema.cs
- WebPartChrome.cs
- DataGridViewCellPaintingEventArgs.cs
- IfJoinedCondition.cs
- SkewTransform.cs
- Helper.cs
- ConfigurationStrings.cs
- SizeKeyFrameCollection.cs
- ContainerSelectorGlyph.cs
- PropertyNames.cs
- ComponentCache.cs
- codemethodreferenceexpression.cs
- MailWebEventProvider.cs
- IconConverter.cs