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
- XPathBinder.cs
- ToolZone.cs
- AddInBase.cs
- Converter.cs
- DateTimeConverter.cs
- MultiSelector.cs
- InputBindingCollection.cs
- DateTimeSerializationSection.cs
- SafeNativeMethods.cs
- AllMembershipCondition.cs
- Panel.cs
- ComponentTray.cs
- XmlEncoding.cs
- RoleService.cs
- ZipIOExtraField.cs
- CharacterHit.cs
- DbSetClause.cs
- SpecialNameAttribute.cs
- AnnotationMap.cs
- EntityContainerEmitter.cs
- ApplicationServiceManager.cs
- DocumentViewerBaseAutomationPeer.cs
- ConfigurationManagerInternal.cs
- mda.cs
- TimeSpanOrInfiniteConverter.cs
- SystemParameters.cs
- FontNameEditor.cs
- ObjectKeyFrameCollection.cs
- _Events.cs
- SoapWriter.cs
- XmlSchemaAnyAttribute.cs
- MouseEvent.cs
- MsmqBindingMonitor.cs
- BufferBuilder.cs
- contentDescriptor.cs
- LineSegment.cs
- PropertyGeneratedEventArgs.cs
- DuplicateWaitObjectException.cs
- TypeViewSchema.cs
- Rfc4050KeyFormatter.cs
- DataGridViewRowCancelEventArgs.cs
- ViewStateException.cs
- Int16.cs
- SiteOfOriginContainer.cs
- SoapSchemaMember.cs
- LoginName.cs
- ManagementInstaller.cs
- RewritingProcessor.cs
- MessageQueuePermissionAttribute.cs
- SuppressMessageAttribute.cs
- RSAOAEPKeyExchangeDeformatter.cs
- MultipleViewPattern.cs
- SettingsProperty.cs
- TreeViewItemAutomationPeer.cs
- SettingsBase.cs
- SEHException.cs
- TimeSpanStorage.cs
- PropertyDescriptorCollection.cs
- HwndKeyboardInputProvider.cs
- EntityViewContainer.cs
- SqlError.cs
- ResizeGrip.cs
- ColumnResizeUndoUnit.cs
- DataGridLinkButton.cs
- XmlSerializationGeneratedCode.cs
- IdentityHolder.cs
- DataStorage.cs
- UnsafeMethods.cs
- SimpleRecyclingCache.cs
- Translator.cs
- Compress.cs
- URL.cs
- EmptyCollection.cs
- BidirectionalDictionary.cs
- DocumentsTrace.cs
- ClipboardProcessor.cs
- CheckBoxPopupAdapter.cs
- ScaleTransform3D.cs
- AssemblySettingAttributes.cs
- InputMethodStateTypeInfo.cs
- BaseParagraph.cs
- BasicViewGenerator.cs
- DriveInfo.cs
- ContextMenu.cs
- EncodingDataItem.cs
- DebugView.cs
- EncryptRequest.cs
- MetadataItem_Static.cs
- CompilationLock.cs
- ToggleButtonAutomationPeer.cs
- Stopwatch.cs
- KeyProperty.cs
- ObjectViewFactory.cs
- FileChangeNotifier.cs
- XmlComment.cs
- MatrixTransform.cs
- DesignerHost.cs
- Attribute.cs
- SqlErrorCollection.cs
- SafeCryptHandles.cs