Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- DataProviderNameConverter.cs
- EventLogConfiguration.cs
- TraceLevelHelper.cs
- DataTableMappingCollection.cs
- IImplicitResourceProvider.cs
- JsonDataContract.cs
- WriteableOnDemandStream.cs
- datacache.cs
- BackStopAuthenticationModule.cs
- FormatException.cs
- PenThreadPool.cs
- HashHelper.cs
- KeyboardEventArgs.cs
- CodeGroup.cs
- DesignerActionTextItem.cs
- Property.cs
- ThaiBuddhistCalendar.cs
- IfAction.cs
- ClientConfigurationSystem.cs
- XmlLinkedNode.cs
- ReferenceService.cs
- XmlLanguage.cs
- FillRuleValidation.cs
- SizeConverter.cs
- EntityDataSourceQueryBuilder.cs
- IDataContractSurrogate.cs
- FlowDocumentView.cs
- ClientConvert.cs
- RequestQueue.cs
- ResXBuildProvider.cs
- CodeTypeDeclaration.cs
- AttributedMetaModel.cs
- SeparatorAutomationPeer.cs
- DataGridViewCellParsingEventArgs.cs
- ExpressionTable.cs
- MSG.cs
- Point3D.cs
- TextElementEnumerator.cs
- IApplicationTrustManager.cs
- UserControlBuildProvider.cs
- TreeViewItem.cs
- DataExpression.cs
- XPathNodeIterator.cs
- RubberbandSelector.cs
- PasswordTextContainer.cs
- XPathChildIterator.cs
- CodeIdentifiers.cs
- DeclarativeCatalogPart.cs
- DesignerActionUIStateChangeEventArgs.cs
- FtpWebResponse.cs
- SemaphoreSecurity.cs
- SignatureDescription.cs
- CodeChecksumPragma.cs
- SelectionWordBreaker.cs
- CodeLabeledStatement.cs
- DataObjectMethodAttribute.cs
- SHA1CryptoServiceProvider.cs
- DataGridToolTip.cs
- PolicyManager.cs
- EpmCustomContentSerializer.cs
- SpeechRecognitionEngine.cs
- ComplexBindingPropertiesAttribute.cs
- _PooledStream.cs
- SqlRecordBuffer.cs
- ExtractCollection.cs
- EventLogSession.cs
- NamespaceEmitter.cs
- DiffuseMaterial.cs
- PbrsForward.cs
- FormsAuthentication.cs
- SqlNotificationEventArgs.cs
- AccessDataSource.cs
- WebPartMovingEventArgs.cs
- ProjectedSlot.cs
- ButtonRenderer.cs
- SqlBuilder.cs
- DiscoveryMessageSequenceGenerator.cs
- DbConnectionStringBuilder.cs
- NameValuePair.cs
- VarRemapper.cs
- StringFreezingAttribute.cs
- DbConnectionPoolGroup.cs
- ParamArrayAttribute.cs
- CodeRegionDirective.cs
- ZipArchive.cs
- IDispatchConstantAttribute.cs
- safex509handles.cs
- HiddenField.cs
- SectionRecord.cs
- CompositeFontFamily.cs
- EpmAttributeNameBuilder.cs
- CallContext.cs
- BindingsCollection.cs
- NegotiateStream.cs
- Ipv6Element.cs
- FolderLevelBuildProviderCollection.cs
- ManagedFilter.cs
- TextOutput.cs
- InfiniteIntConverter.cs
- StdRegProviderWrapper.cs