Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Fonts.cs / 1305600 / Fonts.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: The Fonts class provides font enumeration APIs. // See spec at http://avalon/text/DesignDocsAndSpecs/Font%20Enumeration%20API.htm // // // History: // 03/02/2004 : mleonov - Created // 08/08/2008 : [....] - Integrating with DWrite. // //--------------------------------------------------------------------------- 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; using MS.Internal.FontCache; using MS.Internal.FontFace; using MS.Internal.PresentationCore; using MS.Internal.Shaping; using System.Security; namespace System.Windows.Media { ////// The FontEmbeddingManager class provides font enumeration APIs. /// public static class Fonts { //----------------------------------------------------- // // Public Methods // //----------------------------------------------------- #region Public Methods ////// Enumerates font families from an arbitrary location. /// /// An absolute URI of a folder containing fonts or a font file. ///Collection of FontFamily objects from the specified folder or file. ////// The specified location must be an absolute file URI or path, and the caller must have /// FileIOPermission(FileIOPermissionAccess.Read) for the location. Each resulting FontFamily /// object includes the specified location in its friendly name and has no base URI. /// public static ICollectionGetFontFamilies(string location) { if (location == null) throw new ArgumentNullException("location"); return GetFontFamilies(null, location); } /// /// Enumerates font families in the same folder as the specified base URI. /// /// An absolute URI of a folder containing fonts or a resource in that folder. ///Collection of FontFamily objects from the specified folder. ////// The caller must have FileIOPermission(FileIOPermissionAccess.Read) for the folder /// specified by baseUri. Each resulting FontFamily object has the specified Uri as its /// BaseUri property has a friendly name of the form "./#Family Name". /// public static ICollectionGetFontFamilies(Uri baseUri) { if (baseUri == null) throw new ArgumentNullException("baseUri"); return GetFontFamilies(baseUri, null); } /// /// Enumerates font families in the font location specified by a base URI and/or a location string. /// /// Base URI used to determine the font location if the location parameter is not specified /// or is relative, and the value of the BaseUri property of each FontFamily in the resulting collection. This /// parameter can be null if the location parameter specifies an absolute location. /// Optional relative or absolute URI reference. The location is used (with baseUri) to /// determine the font folder and is exposed as part of the Source property of each FontFamily in the resulting /// collection. If location is null or empty then "./" is implied, meaning same folder as the base URI. ///Collection of FontFamily objects from the specified font location. ////// The caller must have FileIOPermission(FileIOPermissionAccess.Read) for the specified font folder. /// Each resulting FontFamily object has the specified base Uri as its BaseUri property and includes the /// specified location as part of the friendly name specified by the Source property. /// public static ICollectionGetFontFamilies(Uri baseUri, string location) { // Both Uri parameters are optional but neither can be relative. if (baseUri != null && !baseUri.IsAbsoluteUri) throw new ArgumentException(SR.Get(SRID.UriNotAbsolute), "baseUri"); // Determine the font location from the base URI and location string. Uri fontLocation; if (!string.IsNullOrEmpty(location) && Uri.TryCreate(location, UriKind.Absolute, out fontLocation)) { // absolute location; make sure we support absolute font family references for this scheme if (!Util.IsSupportedSchemeForAbsoluteFontFamilyUri(fontLocation)) throw new ArgumentException(SR.Get(SRID.InvalidAbsoluteUriInFontFamilyName), "location"); // make sure the absolute location is a valid URI reference rather than a Win32 path as // we don't support the latter in a font family reference location = fontLocation.GetComponents(UriComponents.AbsoluteUri, UriFormat.SafeUnescaped); } else { // relative location; we need a base URI if (baseUri == null) throw new ArgumentNullException("baseUri", SR.Get(SRID.NullBaseUriParam, "baseUri", "location")); // the location part must include a path component, otherwise we'll look in windows fonts and ignore the base URI if (string.IsNullOrEmpty(location)) location = "./"; else if (Util.IsReferenceToWindowsFonts(location)) location = "./" + location; fontLocation = new Uri(baseUri, location); } // Create the font families. return CreateFamilyCollection( fontLocation, // fontLocation baseUri, // fontFamilyBaseUri location // fontFamilyLocationReference ); } /// /// Enumerates typefaces from an arbitrary location. /// /// An absolute URI of a folder containing fonts or a font file. ///Collection of Typeface objects from the specified folder or file. ////// The specified location must be an absolute file URI or path, and the caller must have /// FileIOPermission(FileIOPermissionAccess.Read) for the location. The FontFamily of each /// resulting Typeface object includes the specified location in its friendly name and has /// no base URI. /// public static ICollectionGetTypefaces(string location) { if (location == null) throw new ArgumentNullException("location"); return new TypefaceCollection(GetFontFamilies(null, location)); } /// /// Enumerates typefaces in the same folder as the specified base URI. /// /// An absolute URI of a folder containing fonts or a resource in that folder. ///Collection of Typeface objects from the specified folder. ////// The caller must have FileIOPermission(FileIOPermissionAccess.Read) for the folder /// specified by baseUri. The FontFamily of each resulting Typeface object has the specified /// Uri as its BaseUri property has a friendly name of the form "./#Family Name". /// public static ICollectionGetTypefaces(Uri baseUri) { if (baseUri == null) throw new ArgumentNullException("baseUri"); return new TypefaceCollection(GetFontFamilies(baseUri, null)); } /// /// Enumerates typefaces in the font location specified by a base URI and/or a location string. /// /// Base URI used to determine the font location if the location parameter is not specified /// or is relative, and the value of the BaseUri property of each FontFamily in the resulting collection. This /// parameter can be null if the location parameter specifies an absolute location. /// Optional relative or absolute URI reference. The location is used (with baseUri) to /// determine the font folder and is exposed as part of the Source property of each FontFamily in the resulting /// collection. If location is null or empty then "./" is implied, meaning same folder as the base URI. ///Collection of Typeface objects from the specified font location. ////// The caller must have FileIOPermission(FileIOPermissionAccess.Read) for the specified font folder. /// Each resulting FontFamily object has the specified base Uri as its BaseUri property and includes the /// specified location as part of the friendly name specified by the Source property. /// public static ICollectionGetTypefaces(Uri baseUri, string location) { return new TypefaceCollection(GetFontFamilies(baseUri, location)); } #endregion Public Methods //------------------------------------------------------ // // Public Properties // //----------------------------------------------------- #region Public Properties /// /// Font families from the default system font location. /// ///Collection of FontFamily objects from the default system font location. public static ICollectionSystemFontFamilies { get { return _defaultFontCollection; } } /// /// Type faces from the default system font location. /// ///Collection of Typeface objects from the default system font location. public static ICollectionSystemTypefaces { get { return new TypefaceCollection(_defaultFontCollection); } } #endregion Public Properties //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods /// /// This method enumerates the font families in the specified font location and returns the resulting /// collection of FontFamily objects. /// /// Absolute URI of file or folder containing font data /// Optional base URI, exposed as the BaseUri property of each FontFamily. /// Optional location reference, exposed as part of the Source /// property of each FontFamily. ////// SecurityCritical - Calls the critical FamilyCollection constructor; fontLocation may be critical /// TreatAsSafe - FamilyCollection does security demands for the necessary permissions; fontLocation is /// not exposed by the resulting FontFamily objects /// [SecurityCritical,SecurityTreatAsSafe] private static ICollectionCreateFamilyCollection( Uri fontLocation, Uri fontFamilyBaseUri, string fontFamilyLocationReference ) { // Use reference comparison to determine the critical isWindowsFonts value. We want this // to be true ONLY if we're called internally to enumerate the default family collection. // See the SecurityNote for the FamilyCollection constructor. FamilyCollection familyCollection = object.ReferenceEquals(fontLocation, Util.WindowsFontsUriObject) ? FamilyCollection.FromWindowsFonts(fontLocation) : FamilyCollection.FromUri(fontLocation); FontFamily[] fontFamilyList = familyCollection.GetFontFamilies(fontFamilyBaseUri, fontFamilyLocationReference); return Array.AsReadOnly (fontFamilyList); } /// /// Creates a collection of font families in the Windows Fonts folder. /// ////// This method is used to initialized the static _defaultFontCollection field. By having this /// safe wrapper for CreateFamilyCollection we avoid having to create a static initializer and /// declare it critical. /// ////// Critical - This method accesses the critical Util.WindowsFontsUriObject /// TreatAsSafe - It specifies null as the BaseUri of the resulting FontFamily objects /// [SecurityCritical, SecurityTreatAsSafe] private static ICollectionCreateDefaultFamilyCollection() { return CreateFamilyCollection( Util.WindowsFontsUriObject, // fontLocation null, // fontFamilyBaseUri, null // fontFamilyLocationReference ); } #endregion Private Methods //----------------------------------------------------- // // Private Classes // //------------------------------------------------------ #region Private Classes private struct TypefaceCollection : ICollection { private IEnumerable _families; public TypefaceCollection(IEnumerable families) { _families = families; } #region ICollection Members public void Add(Typeface item) { throw new NotSupportedException(); } public void Clear() { throw new NotSupportedException(); } public bool Contains(Typeface item) { foreach (Typeface t in this) { if (t.Equals(item)) return true; } return false; } public void CopyTo(Typeface[] array, int arrayIndex) { if (array == null) { throw new ArgumentNullException("array"); } if (array.Rank != 1) { throw new ArgumentException(SR.Get(SRID.Collection_BadRank)); } // The extra "arrayIndex >= array.Length" check in because even if _collection.Count // is 0 the index is not allowed to be equal or greater than the length // (from the MSDN ICollection docs) if (arrayIndex < 0 || arrayIndex >= array.Length || (arrayIndex + Count) > array.Length) { throw new ArgumentOutOfRangeException("arrayIndex"); } foreach (Typeface t in this) { array[arrayIndex++] = t; } } public int Count { get { int count = 0; foreach (Typeface t in this) { ++count; } return count; } } public bool IsReadOnly { get { return true; } } public bool Remove(Typeface item) { throw new NotSupportedException(); } #endregion #region IEnumerable Members public IEnumerator GetEnumerator() { foreach (FontFamily family in _families) { foreach (Typeface typeface in family.GetTypefaces()) { yield return typeface; } } } #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } #endregion } #endregion Private Classes //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- #region Private Fields private static readonly ICollection _defaultFontCollection = CreateDefaultFamilyCollection(); #endregion Private Fields } } // 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
- ObjectQueryProvider.cs
- SmiRequestExecutor.cs
- MailDefinition.cs
- BuildProvider.cs
- HScrollBar.cs
- ArrowControl.xaml.cs
- EventLogTraceListener.cs
- GlobalEventManager.cs
- TextMetrics.cs
- DisableDpiAwarenessAttribute.cs
- IgnorePropertiesAttribute.cs
- GroupItemAutomationPeer.cs
- CultureTableRecord.cs
- TextDecoration.cs
- EdmProperty.cs
- MembershipUser.cs
- WebPartConnectionsConfigureVerb.cs
- ReadOnlyCollectionBuilder.cs
- Nodes.cs
- VarInfo.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- PersonalizationProviderHelper.cs
- XmlSerializerAssemblyAttribute.cs
- ActiveXContainer.cs
- UInt16.cs
- DbExpressionRules.cs
- XsltSettings.cs
- ButtonPopupAdapter.cs
- ListBox.cs
- DetailsViewDesigner.cs
- XmlEntity.cs
- XmlWhitespace.cs
- ConfigurationValue.cs
- CalendarDay.cs
- ReflectionServiceProvider.cs
- AxisAngleRotation3D.cs
- Attribute.cs
- RSAPKCS1SignatureFormatter.cs
- ResourceContainer.cs
- EntityContainerAssociationSet.cs
- ArraySet.cs
- ServiceOperationParameter.cs
- ImageListImageEditor.cs
- ColorMap.cs
- DBDataPermission.cs
- WindowsListViewGroupHelper.cs
- EnvelopedSignatureTransform.cs
- TextParagraph.cs
- HostedHttpTransportManager.cs
- ServerIdentity.cs
- TextEditorCopyPaste.cs
- SqlDataSource.cs
- PrintSchema.cs
- EventRouteFactory.cs
- QilList.cs
- StylusPlugInCollection.cs
- ToolStripRenderEventArgs.cs
- MimeBasePart.cs
- UntrustedRecipientException.cs
- NavigationProperty.cs
- MultiByteCodec.cs
- DataListItem.cs
- PasswordRecovery.cs
- storepermission.cs
- Win32.cs
- SocketCache.cs
- SchemaManager.cs
- FlowDocumentScrollViewer.cs
- OpenCollectionAsyncResult.cs
- QilDataSource.cs
- ArgumentOutOfRangeException.cs
- ConfigurationSection.cs
- EditorZone.cs
- FacetDescription.cs
- WebPartDeleteVerb.cs
- JsonQueryStringConverter.cs
- FlowDocumentReader.cs
- Volatile.cs
- HasRunnableWorkflowEvent.cs
- DecoderFallback.cs
- DbMetaDataCollectionNames.cs
- MetadataUtilsSmi.cs
- JsonFormatMapping.cs
- HttpNamespaceReservationInstallComponent.cs
- UDPClient.cs
- TextTreeFixupNode.cs
- ImageSourceConverter.cs
- XamlInt32CollectionSerializer.cs
- BindingElement.cs
- XhtmlBasicListAdapter.cs
- ScriptRegistrationManager.cs
- ResourceExpressionBuilder.cs
- GlyphingCache.cs
- SystemSounds.cs
- CodeIdentifiers.cs
- CodeVariableDeclarationStatement.cs
- TypedTableHandler.cs
- ScrollEventArgs.cs
- XmlSchemaDocumentation.cs
- WindowsRichEdit.cs