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
- WindowsListViewSubItem.cs
- CanExecuteRoutedEventArgs.cs
- AtomContentProperty.cs
- UniqueIdentifierService.cs
- Paragraph.cs
- SafeRightsManagementEnvironmentHandle.cs
- DbgUtil.cs
- DispatchWrapper.cs
- SoapHeaders.cs
- DBParameter.cs
- DataSourceHelper.cs
- InvocationExpression.cs
- HandleCollector.cs
- Point.cs
- DirectoryNotFoundException.cs
- HelpEvent.cs
- CdpEqualityComparer.cs
- InstanceDescriptor.cs
- UpdatePanelControlTrigger.cs
- ErrorView.xaml.cs
- AnonymousIdentificationSection.cs
- ButtonStandardAdapter.cs
- TableLayoutRowStyleCollection.cs
- UshortList2.cs
- RefreshResponseInfo.cs
- BinaryConverter.cs
- ContextProperty.cs
- UrlMapping.cs
- DataGridViewDataErrorEventArgs.cs
- PopupControlService.cs
- DataFormats.cs
- UpdatePanel.cs
- AsymmetricSignatureFormatter.cs
- TraceUtility.cs
- IntSecurity.cs
- ActivitySurrogateSelector.cs
- ExpandableObjectConverter.cs
- DetailsViewDesigner.cs
- BinaryObjectInfo.cs
- ThicknessKeyFrameCollection.cs
- StrokeRenderer.cs
- SmiEventSink_Default.cs
- ImageMetadata.cs
- TableLayoutSettings.cs
- ScrollChrome.cs
- AbsoluteQuery.cs
- GeneralTransform.cs
- MetadataCacheItem.cs
- SymbolEqualComparer.cs
- SafeArrayTypeMismatchException.cs
- SerializableAttribute.cs
- LayoutEvent.cs
- WebServiceParameterData.cs
- UInt64Converter.cs
- BamlTreeUpdater.cs
- UInt16Converter.cs
- FlowDocumentView.cs
- SchemaConstraints.cs
- TraceSource.cs
- SizeValueSerializer.cs
- GridItemProviderWrapper.cs
- PaintEvent.cs
- PerformanceCounter.cs
- SapiRecognizer.cs
- DiscriminatorMap.cs
- COMException.cs
- XmlNullResolver.cs
- infer.cs
- EncodingNLS.cs
- _PooledStream.cs
- GradientStop.cs
- ResolveCriteriaApril2005.cs
- HttpChannelHelpers.cs
- WCFModelStrings.Designer.cs
- ArglessEventHandlerProxy.cs
- InstanceOwner.cs
- OpacityConverter.cs
- OledbConnectionStringbuilder.cs
- MulticastIPAddressInformationCollection.cs
- SchemaImporterExtension.cs
- DataServiceProcessingPipeline.cs
- DataConnectionHelper.cs
- DataTableClearEvent.cs
- dtdvalidator.cs
- TemplateKey.cs
- WebPartAddingEventArgs.cs
- BoolExpression.cs
- LogSwitch.cs
- QueryCreatedEventArgs.cs
- QilCloneVisitor.cs
- XmlILAnnotation.cs
- UnsafeNativeMethods.cs
- IListConverters.cs
- StoreAnnotationsMap.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- CodeSubDirectoriesCollection.cs
- MimeBasePart.cs
- WeakReferenceList.cs
- EdmComplexTypeAttribute.cs