Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / FontCache / DWriteFactory.cs / 1407647 / DWriteFactory.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: The DWriteFactory class represents a shared DWrite factory // object. // // History: // 08/08/2008 : [....] - Integrating with DWrite. // //--------------------------------------------------------------------------- using System; using System.Security; using System.Security.Permissions; using System.IO; using System.Collections.Generic; using System.Text; using System.Diagnostics; using MS.Internal.PresentationCore; namespace MS.Internal.FontCache { internal static class DWriteFactory { ////// Critical - Access security critical Factory.Create method. /// Safe - The parameters passed to Factory.Create are internal /// types created by this method. /// [SecuritySafeCritical] static DWriteFactory() { _factory = Text.TextInterface.Factory.Create( Text.TextInterface.FactoryType.Shared, new FontSourceCollectionFactory(), new FontSourceFactory()); Text.TextInterface.LocalizedErrorMsgs.EnumeratorNotStarted = SR.Get(SRID.Enumerator_NotStarted); Text.TextInterface.LocalizedErrorMsgs.EnumeratorReachedEnd = SR.Get(SRID.Enumerator_ReachedEnd); } internal static Text.TextInterface.Factory Instance { ////// Critical - Exposes security critical _factory member. /// [SecurityCritical] get { return _factory; } } internal static Text.TextInterface.FontCollection SystemFontCollection { ////// Critical - provides access to the system fonts collection which exposes the windows fonts. /// [SecurityCritical] get { if (_systemFontCollection == null) { lock(_systemFontCollectionLock) { if (_systemFontCollection == null) { _systemFontCollection = DWriteFactory.Instance.GetSystemFontCollection(); } } } return _systemFontCollection; } } ////// Critical - Access security critical WindowsFontsUriObject object. /// - The caller of this method should own the verification of /// the access permissions to the given Uri. /// [SecurityCritical] private static Text.TextInterface.FontCollection GetFontCollectionFromFileOrFolder(Uri fontCollectionUri, bool isFolder) { if (Text.TextInterface.Factory.IsLocalUri(fontCollectionUri)) { string localPath; if (!isFolder) { // get the parent directory of the file. localPath = Directory.GetParent(fontCollectionUri.LocalPath).FullName + Path.DirectorySeparatorChar; } else { localPath = fontCollectionUri.LocalPath; } // If the directory specifed is the windows fonts directory then no need to reenumerate system fonts. if (String.Compare(((localPath.Length > 0 && localPath[localPath.Length - 1] != Path.DirectorySeparatorChar) ? localPath + Path.DirectorySeparatorChar : localPath), Util.WindowsFontsUriObject.LocalPath, StringComparison.OrdinalIgnoreCase) == 0) { return SystemFontCollection; } // Perf Descision: // Create a new FontCollection that has all the fonts in the directory. // The user will most likely use other fonts in a custom fonts directory. // A typical scenario is that a user will store all the fonts his/her App needs // in one directory. If we were not to follow this approach then we would create // a FontCollection for every font the user demands which may hurt performance. else { return DWriteFactory.Instance.GetFontCollection(new Uri(localPath)); } } // This isn't a local path so we create a FontCollection that only holds the desired font. // We follow a different approach here, as opposed to local files, where we only load the file // requested since file download and network latency cost becomes higher and loading all fonts // in a network path might hurt perf instead. return DWriteFactory.Instance.GetFontCollection(fontCollectionUri); } ////// Critical - calls security critical GetFontCollectionFromFileOrFolder. /// - The caller of this method should own the verification of /// the access permissions to the given Uri. /// [SecurityCritical] internal static Text.TextInterface.FontCollection GetFontCollectionFromFolder(Uri fontCollectionUri) { return GetFontCollectionFromFileOrFolder(fontCollectionUri, true); } ////// Critical - calls security critical GetFontCollectionFromFileOrFolder. /// - The caller of this method should own the verification of /// the access permissions to the given Uri. /// [SecurityCritical] internal static Text.TextInterface.FontCollection GetFontCollectionFromFile(Uri fontCollectionUri) { return GetFontCollectionFromFileOrFolder(fontCollectionUri, false); } ////// Critical - This is the DWrite factory that can be used to get everything about fonts. /// [SecurityCritical] private static Text.TextInterface.Factory _factory; private static Text.TextInterface.FontCollection _systemFontCollection = null; private static object _systemFontCollectionLock = new object(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: The DWriteFactory class represents a shared DWrite factory // object. // // History: // 08/08/2008 : [....] - Integrating with DWrite. // //--------------------------------------------------------------------------- using System; using System.Security; using System.Security.Permissions; using System.IO; using System.Collections.Generic; using System.Text; using System.Diagnostics; using MS.Internal.PresentationCore; namespace MS.Internal.FontCache { internal static class DWriteFactory { ////// Critical - Access security critical Factory.Create method. /// Safe - The parameters passed to Factory.Create are internal /// types created by this method. /// [SecuritySafeCritical] static DWriteFactory() { _factory = Text.TextInterface.Factory.Create( Text.TextInterface.FactoryType.Shared, new FontSourceCollectionFactory(), new FontSourceFactory()); Text.TextInterface.LocalizedErrorMsgs.EnumeratorNotStarted = SR.Get(SRID.Enumerator_NotStarted); Text.TextInterface.LocalizedErrorMsgs.EnumeratorReachedEnd = SR.Get(SRID.Enumerator_ReachedEnd); } internal static Text.TextInterface.Factory Instance { ////// Critical - Exposes security critical _factory member. /// [SecurityCritical] get { return _factory; } } internal static Text.TextInterface.FontCollection SystemFontCollection { ////// Critical - provides access to the system fonts collection which exposes the windows fonts. /// [SecurityCritical] get { if (_systemFontCollection == null) { lock(_systemFontCollectionLock) { if (_systemFontCollection == null) { _systemFontCollection = DWriteFactory.Instance.GetSystemFontCollection(); } } } return _systemFontCollection; } } ////// Critical - Access security critical WindowsFontsUriObject object. /// - The caller of this method should own the verification of /// the access permissions to the given Uri. /// [SecurityCritical] private static Text.TextInterface.FontCollection GetFontCollectionFromFileOrFolder(Uri fontCollectionUri, bool isFolder) { if (Text.TextInterface.Factory.IsLocalUri(fontCollectionUri)) { string localPath; if (!isFolder) { // get the parent directory of the file. localPath = Directory.GetParent(fontCollectionUri.LocalPath).FullName + Path.DirectorySeparatorChar; } else { localPath = fontCollectionUri.LocalPath; } // If the directory specifed is the windows fonts directory then no need to reenumerate system fonts. if (String.Compare(((localPath.Length > 0 && localPath[localPath.Length - 1] != Path.DirectorySeparatorChar) ? localPath + Path.DirectorySeparatorChar : localPath), Util.WindowsFontsUriObject.LocalPath, StringComparison.OrdinalIgnoreCase) == 0) { return SystemFontCollection; } // Perf Descision: // Create a new FontCollection that has all the fonts in the directory. // The user will most likely use other fonts in a custom fonts directory. // A typical scenario is that a user will store all the fonts his/her App needs // in one directory. If we were not to follow this approach then we would create // a FontCollection for every font the user demands which may hurt performance. else { return DWriteFactory.Instance.GetFontCollection(new Uri(localPath)); } } // This isn't a local path so we create a FontCollection that only holds the desired font. // We follow a different approach here, as opposed to local files, where we only load the file // requested since file download and network latency cost becomes higher and loading all fonts // in a network path might hurt perf instead. return DWriteFactory.Instance.GetFontCollection(fontCollectionUri); } ////// Critical - calls security critical GetFontCollectionFromFileOrFolder. /// - The caller of this method should own the verification of /// the access permissions to the given Uri. /// [SecurityCritical] internal static Text.TextInterface.FontCollection GetFontCollectionFromFolder(Uri fontCollectionUri) { return GetFontCollectionFromFileOrFolder(fontCollectionUri, true); } ////// Critical - calls security critical GetFontCollectionFromFileOrFolder. /// - The caller of this method should own the verification of /// the access permissions to the given Uri. /// [SecurityCritical] internal static Text.TextInterface.FontCollection GetFontCollectionFromFile(Uri fontCollectionUri) { return GetFontCollectionFromFileOrFolder(fontCollectionUri, false); } ////// Critical - This is the DWrite factory that can be used to get everything about fonts. /// [SecurityCritical] private static Text.TextInterface.Factory _factory; private static Text.TextInterface.FontCollection _systemFontCollection = null; private static object _systemFontCollectionLock = new object(); } } // 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
- XmlAttribute.cs
- TemplateBindingExtension.cs
- GenerateScriptTypeAttribute.cs
- SemanticResolver.cs
- ToolStripDropDownClosingEventArgs.cs
- BindToObject.cs
- DataPagerCommandEventArgs.cs
- ReturnValue.cs
- ImpersonateTokenRef.cs
- MouseGestureConverter.cs
- StopStoryboard.cs
- CodeMemberEvent.cs
- TypeBuilderInstantiation.cs
- HighlightVisual.cs
- HashMembershipCondition.cs
- MarkupCompilePass1.cs
- WebPartHelpVerb.cs
- PeerApplication.cs
- StoreContentChangedEventArgs.cs
- DataGridViewSelectedColumnCollection.cs
- PerformanceCounterCategory.cs
- MimeFormReflector.cs
- Freezable.cs
- WinFormsComponentEditor.cs
- Registry.cs
- DbgUtil.cs
- SafePEFileHandle.cs
- ManipulationDelta.cs
- Enlistment.cs
- XpsS0ValidatingLoader.cs
- DbConnectionOptions.cs
- HttpServerVarsCollection.cs
- GradientStop.cs
- QuotedPrintableStream.cs
- EncodingNLS.cs
- XmlSchemaDocumentation.cs
- PrintPreviewControl.cs
- RecognizerInfo.cs
- WrapperEqualityComparer.cs
- OrderedEnumerableRowCollection.cs
- WindowsIPAddress.cs
- BuildManagerHost.cs
- DataTemplate.cs
- DuplicateWaitObjectException.cs
- WebPartConnectVerb.cs
- DrawingAttributesDefaultValueFactory.cs
- ManagementEventArgs.cs
- _LocalDataStoreMgr.cs
- peernodestatemanager.cs
- ServiceAuthorizationElement.cs
- SQLGuid.cs
- UserMapPath.cs
- FormViewInsertEventArgs.cs
- UIElement3D.cs
- ProvidePropertyAttribute.cs
- DataGridViewButtonColumn.cs
- ErrorHandler.cs
- TextComposition.cs
- ScriptControlDescriptor.cs
- DataGridViewSelectedCellCollection.cs
- PersonalizationState.cs
- IconHelper.cs
- OutgoingWebRequestContext.cs
- Brushes.cs
- CodeDelegateCreateExpression.cs
- COMException.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- ProgressChangedEventArgs.cs
- CodeDelegateCreateExpression.cs
- TransformPattern.cs
- RegularExpressionValidator.cs
- ColorTransform.cs
- ArraySegment.cs
- BodyGlyph.cs
- DataServices.cs
- ApplicationFileParser.cs
- XhtmlCssHandler.cs
- ProxyWebPartManager.cs
- GlobalizationSection.cs
- ReadOnlyDataSource.cs
- PerformanceCountersElement.cs
- StoragePropertyMapping.cs
- FormViewUpdateEventArgs.cs
- BatchServiceHost.cs
- VsPropertyGrid.cs
- SettingsAttributes.cs
- TabControlAutomationPeer.cs
- HotSpot.cs
- PathFigure.cs
- SinglePageViewer.cs
- ComponentDispatcher.cs
- OdbcConnectionPoolProviderInfo.cs
- TemplateManager.cs
- OleDbReferenceCollection.cs
- XmlStreamNodeWriter.cs
- ImageBrush.cs
- Pair.cs
- ContextMenu.cs
- MobileResource.cs
- Closure.cs