Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / System / Windows / Media / GlyphCache.cs / 1 / 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
- CharAnimationUsingKeyFrames.cs
- IdentityNotMappedException.cs
- PromptBuilder.cs
- BadImageFormatException.cs
- TrackingParticipant.cs
- GroupItem.cs
- Flowchart.cs
- DataGridViewCellLinkedList.cs
- SingleKeyFrameCollection.cs
- VirtualDirectoryMapping.cs
- UrlMapping.cs
- IdnMapping.cs
- EnumDataContract.cs
- KeyNotFoundException.cs
- XDeferredAxisSource.cs
- TypeLibConverter.cs
- LeaseManager.cs
- TextFormatter.cs
- UndirectedGraph.cs
- TemplatedWizardStep.cs
- PaintValueEventArgs.cs
- Thumb.cs
- ResourceReferenceExpressionConverter.cs
- SoapSchemaMember.cs
- ISSmlParser.cs
- EditorAttribute.cs
- RecordBuilder.cs
- UnsafeNativeMethods.cs
- OleAutBinder.cs
- CodeGroup.cs
- loginstatus.cs
- MouseWheelEventArgs.cs
- DataBoundControlHelper.cs
- TypeUtil.cs
- SourceChangedEventArgs.cs
- XPathSingletonIterator.cs
- ParserExtension.cs
- ObjectDataSourceView.cs
- IODescriptionAttribute.cs
- KeyboardEventArgs.cs
- AssemblyCollection.cs
- Properties.cs
- MethodCallConverter.cs
- _ConnectOverlappedAsyncResult.cs
- FacetValueContainer.cs
- BooleanStorage.cs
- AuthenticateEventArgs.cs
- AdornerHitTestResult.cs
- MexBindingElement.cs
- CqlWriter.cs
- CqlQuery.cs
- XPathAncestorQuery.cs
- RegexStringValidator.cs
- Accessible.cs
- DynamicResourceExtension.cs
- TransformerConfigurationWizardBase.cs
- GroupJoinQueryOperator.cs
- GroupBoxAutomationPeer.cs
- DesignerCategoryAttribute.cs
- XmlNodeReader.cs
- StreamReader.cs
- RelationshipFixer.cs
- WebPartMenuStyle.cs
- SqlClientFactory.cs
- PropertyEntry.cs
- ObjectStateFormatter.cs
- XmlDomTextWriter.cs
- HttpHeaderCollection.cs
- TransformedBitmap.cs
- UserPersonalizationStateInfo.cs
- InfoCardSymmetricCrypto.cs
- DataBoundControlHelper.cs
- PassportAuthenticationModule.cs
- DataTransferEventArgs.cs
- CodeExporter.cs
- MessageSmuggler.cs
- GeneralTransformGroup.cs
- ProtocolViolationException.cs
- CanonicalFormWriter.cs
- ToolStripDropDownClosingEventArgs.cs
- OrderedDictionaryStateHelper.cs
- ResourcesBuildProvider.cs
- Window.cs
- DeviceSpecificDialogCachedState.cs
- DataGridViewTextBoxCell.cs
- InlineObject.cs
- ServiceManager.cs
- GridItem.cs
- IsolatedStorageFileStream.cs
- CoTaskMemHandle.cs
- DataGridViewTopLeftHeaderCell.cs
- Panel.cs
- LocatorBase.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- UdpDiscoveryEndpointElement.cs
- KeyboardEventArgs.cs
- RandomNumberGenerator.cs
- ScrollChrome.cs
- ColumnMapProcessor.cs
- util.cs