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
- HttpCookiesSection.cs
- NodeInfo.cs
- APCustomTypeDescriptor.cs
- ModelPropertyDescriptor.cs
- SessionStateItemCollection.cs
- MatrixTransform3D.cs
- ToolStripManager.cs
- ClientSession.cs
- FormViewPageEventArgs.cs
- BitmapMetadataEnumerator.cs
- AsyncCompletedEventArgs.cs
- connectionpool.cs
- UrlAuthFailureHandler.cs
- XamlPointCollectionSerializer.cs
- Relationship.cs
- PageParser.cs
- OutOfProcStateClientManager.cs
- UpdateTranslator.cs
- CDSCollectionETWBCLProvider.cs
- ImplicitInputBrush.cs
- TableLayoutPanelCellPosition.cs
- UpdateProgress.cs
- PointAnimationClockResource.cs
- CollaborationHelperFunctions.cs
- Delegate.cs
- MailMessageEventArgs.cs
- GeneralTransform3DTo2D.cs
- safex509handles.cs
- SafeUserTokenHandle.cs
- TextElement.cs
- BatchParser.cs
- TextPointer.cs
- SmtpFailedRecipientException.cs
- XPathDocumentNavigator.cs
- EndpointInfoCollection.cs
- RestClientProxyHandler.cs
- UriExt.cs
- SrgsElementFactory.cs
- FtpWebRequest.cs
- AnimationLayer.cs
- CodeVariableDeclarationStatement.cs
- TableLayoutColumnStyleCollection.cs
- CodeDirectoryCompiler.cs
- FontStretch.cs
- DataBindingExpressionBuilder.cs
- MetabaseSettings.cs
- ContextBase.cs
- XmlWriterTraceListener.cs
- WebPartZone.cs
- InputScopeNameConverter.cs
- RowSpanVector.cs
- WindowsClaimSet.cs
- TdsParserSessionPool.cs
- ExceptionHandler.cs
- StateBag.cs
- ExpressionEditorAttribute.cs
- RadioButtonList.cs
- PropagatorResult.cs
- GradientStopCollection.cs
- GlyphCache.cs
- JsonQueryStringConverter.cs
- FixedDocument.cs
- AsymmetricAlgorithm.cs
- BooleanKeyFrameCollection.cs
- ConfigurationValue.cs
- TypeToken.cs
- ManagedIStream.cs
- PackagePartCollection.cs
- BamlTreeNode.cs
- ValueChangedEventManager.cs
- XmlCharType.cs
- RegionInfo.cs
- DiscoveryInnerClientManaged11.cs
- Blend.cs
- Preprocessor.cs
- MenuStrip.cs
- CodeRemoveEventStatement.cs
- SamlNameIdentifierClaimResource.cs
- HtmlTableRowCollection.cs
- HideDisabledControlAdapter.cs
- ValueTable.cs
- ITextView.cs
- InstanceDescriptor.cs
- OSFeature.cs
- XPathArrayIterator.cs
- WebResponse.cs
- DataGridItemCollection.cs
- DbCommandTree.cs
- BinaryConverter.cs
- UIPermission.cs
- CodeSnippetExpression.cs
- RegexMatchCollection.cs
- SessionPageStatePersister.cs
- Propagator.JoinPropagator.cs
- PenThreadPool.cs
- CancelRequestedQuery.cs
- DynamicActivity.cs
- PLINQETWProvider.cs
- SByteConverter.cs
- HttpPostProtocolImporter.cs