Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / GlyphCache.cs / 2 / GlyphCache.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Security; using System.Text; using System.Windows; using System.Windows.Media; using System.Windows.Media.Composition; using System.Runtime.InteropServices; using MS.Internal; using MS.Internal.FontCache; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; using UnsafeNativeMethods = MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { ////// Master Glyph Cache class /// internal class GlyphCache { ////// Callback delegate. /// public delegate int CreateGlyphsCallbackDelegate( IntPtr /*CMilSlaveGlyphCache | CMilSlaveGlyphRun* */ nativeObject, IntPtr /*GLYPH_BITMAP_CREATE_REQUEST | GLYPH_GEOMETRY_CREATE_REQUEST* */ request, ushort isGeometryRequest); private DUCE.Resource _duceResource = new DUCE.Resource(); private SafeReversePInvokeWrapper _reversePInvokeWrapper; internal DUCE.ResourceHandle Handle { get { return _duceResource.Handle; } } // Service channel that serves for both // pre-commit and post-commit actions internal DUCE.Channel _channel; internal void RemoveFromChannel() { if (_channel != null) { _duceResource.ReleaseOnChannel(_channel); } } ////// /// /// ////// Critical - calls critical code /// [SecurityCritical] internal GlyphCache(DUCE.Channel channel) { _channel = channel; Debug.Assert(_channel != null); _duceResource.CreateOrAddRefOnChannel(_channel, DUCE.ResourceType.TYPE_GLYPHCACHE); SendCallbackEntryPoint(); } ////// Sends a callback pointer to this glyphcache for glyph generation requests. /// ////// Critical - This code sends a pointer to unmanaged code /// [SecurityCritical] private unsafe void SendCallbackEntryPoint() { _createGlyphBitmapsCallbackDelegate = new CreateGlyphsCallbackDelegate(FontCacheAccessor.CreateGlyphsCallback); IntPtr fcn = Marshal.GetFunctionPointerForDelegate(_createGlyphBitmapsCallbackDelegate); _reversePInvokeWrapper = new SafeReversePInvokeWrapper(fcn); DUCE.MILCMD_GLYPHCACHE_SETCALLBACK cmd; cmd.Type = MILCMD.MilCmdGlyphCacheSetCallback; cmd.Handle = Handle; // AddRef the reverse p-invoke wrapper while it is being transferred across the channel. There is a // small chance we would leak the wrapper. More specifically, if the app domain is shut down before // the wrapper is picked up by the composition engine. UnsafeNativeMethods.MILUnknown.AddRef(_reversePInvokeWrapper); cmd.CallbackPointer = (UInt64)_reversePInvokeWrapper.DangerousGetHandle(); _channel.SendSecurityCriticalCommand((byte*)&cmd, sizeof(DUCE.MILCMD_GLYPHCACHE_SETCALLBACK)); } private CreateGlyphsCallbackDelegate _createGlyphBitmapsCallbackDelegate; } } // 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. // // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Security; using System.Text; using System.Windows; using System.Windows.Media; using System.Windows.Media.Composition; using System.Runtime.InteropServices; using MS.Internal; using MS.Internal.FontCache; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; using UnsafeNativeMethods = MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { ////// Master Glyph Cache class /// internal class GlyphCache { ////// Callback delegate. /// public delegate int CreateGlyphsCallbackDelegate( IntPtr /*CMilSlaveGlyphCache | CMilSlaveGlyphRun* */ nativeObject, IntPtr /*GLYPH_BITMAP_CREATE_REQUEST | GLYPH_GEOMETRY_CREATE_REQUEST* */ request, ushort isGeometryRequest); private DUCE.Resource _duceResource = new DUCE.Resource(); private SafeReversePInvokeWrapper _reversePInvokeWrapper; internal DUCE.ResourceHandle Handle { get { return _duceResource.Handle; } } // Service channel that serves for both // pre-commit and post-commit actions internal DUCE.Channel _channel; internal void RemoveFromChannel() { if (_channel != null) { _duceResource.ReleaseOnChannel(_channel); } } ////// /// /// ////// Critical - calls critical code /// [SecurityCritical] internal GlyphCache(DUCE.Channel channel) { _channel = channel; Debug.Assert(_channel != null); _duceResource.CreateOrAddRefOnChannel(_channel, DUCE.ResourceType.TYPE_GLYPHCACHE); SendCallbackEntryPoint(); } ////// Sends a callback pointer to this glyphcache for glyph generation requests. /// ////// Critical - This code sends a pointer to unmanaged code /// [SecurityCritical] private unsafe void SendCallbackEntryPoint() { _createGlyphBitmapsCallbackDelegate = new CreateGlyphsCallbackDelegate(FontCacheAccessor.CreateGlyphsCallback); IntPtr fcn = Marshal.GetFunctionPointerForDelegate(_createGlyphBitmapsCallbackDelegate); _reversePInvokeWrapper = new SafeReversePInvokeWrapper(fcn); DUCE.MILCMD_GLYPHCACHE_SETCALLBACK cmd; cmd.Type = MILCMD.MilCmdGlyphCacheSetCallback; cmd.Handle = Handle; // AddRef the reverse p-invoke wrapper while it is being transferred across the channel. There is a // small chance we would leak the wrapper. More specifically, if the app domain is shut down before // the wrapper is picked up by the composition engine. UnsafeNativeMethods.MILUnknown.AddRef(_reversePInvokeWrapper); cmd.CallbackPointer = (UInt64)_reversePInvokeWrapper.DangerousGetHandle(); _channel.SendSecurityCriticalCommand((byte*)&cmd, sizeof(DUCE.MILCMD_GLYPHCACHE_SETCALLBACK)); } private CreateGlyphsCallbackDelegate _createGlyphBitmapsCallbackDelegate; } } // 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
- AppDomainUnloadedException.cs
- GroupQuery.cs
- XmlTextAttribute.cs
- SiblingIterators.cs
- LassoSelectionBehavior.cs
- Exceptions.cs
- Root.cs
- DictionaryChange.cs
- DrawingBrush.cs
- DefaultTraceListener.cs
- MouseDevice.cs
- QuadraticEase.cs
- QuestionEventArgs.cs
- StringArrayConverter.cs
- Monitor.cs
- RegexCompilationInfo.cs
- DrawTreeNodeEventArgs.cs
- ContextMenuStripGroupCollection.cs
- TemplateComponentConnector.cs
- MemberInfoSerializationHolder.cs
- MatrixCamera.cs
- SelectionWordBreaker.cs
- MulticastNotSupportedException.cs
- TypedAsyncResult.cs
- LayoutDump.cs
- XamlToRtfParser.cs
- DataControlPagerLinkButton.cs
- IgnoreSection.cs
- IndexerNameAttribute.cs
- HtmlShim.cs
- StoreAnnotationsMap.cs
- OneOfScalarConst.cs
- InvalidPrinterException.cs
- SrgsElementList.cs
- InnerItemCollectionView.cs
- PageParser.cs
- TreeBuilderXamlTranslator.cs
- PerformanceCounterScope.cs
- RuleValidation.cs
- GregorianCalendar.cs
- NamespaceList.cs
- InvalidDocumentContentsException.cs
- SettingsAttributes.cs
- TemplateManager.cs
- CodeStatementCollection.cs
- BStrWrapper.cs
- MultipartContentParser.cs
- PersonalizationStateInfoCollection.cs
- URIFormatException.cs
- Dynamic.cs
- WebException.cs
- DependencyObject.cs
- SelectingProviderEventArgs.cs
- HttpCapabilitiesEvaluator.cs
- StrokeNodeOperations.cs
- BitVec.cs
- LabelEditEvent.cs
- StringDictionary.cs
- _LocalDataStore.cs
- CheckBoxStandardAdapter.cs
- oledbmetadatacollectionnames.cs
- ViewBase.cs
- DeferredTextReference.cs
- RightsController.cs
- Int32RectConverter.cs
- TrackingStringDictionary.cs
- TableLayoutPanel.cs
- SourceFileInfo.cs
- DiscreteKeyFrames.cs
- NameValueConfigurationElement.cs
- ConfigXmlComment.cs
- ResourceProperty.cs
- RangeValuePatternIdentifiers.cs
- FilterException.cs
- MonitoringDescriptionAttribute.cs
- ToolStripItemDataObject.cs
- Odbc32.cs
- TabItemWrapperAutomationPeer.cs
- EntityContainerRelationshipSet.cs
- XmlSchemaSimpleTypeList.cs
- GridViewDeletedEventArgs.cs
- ImageButton.cs
- SingleAnimation.cs
- ValueSerializerAttribute.cs
- TextSelectionHighlightLayer.cs
- ValidatorUtils.cs
- MembershipUser.cs
- PageAsyncTaskManager.cs
- PieceDirectory.cs
- WS2007FederationHttpBinding.cs
- TypeLoadException.cs
- Propagator.ExtentPlaceholderCreator.cs
- OdbcConnection.cs
- NavigationProperty.cs
- SerializationStore.cs
- NgenServicingAttributes.cs
- ButtonChrome.cs
- CompilerWrapper.cs
- ToolStripSplitStackLayout.cs
- CodeDOMUtility.cs