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
- MessageBox.cs
- DataGridViewButtonCell.cs
- SelectionRange.cs
- RoutedEventValueSerializer.cs
- ValidationErrorCollection.cs
- ForeignKeyConstraint.cs
- PhoneCallDesigner.cs
- SecurityStateEncoder.cs
- DbQueryCommandTree.cs
- VariableQuery.cs
- PropertyGroupDescription.cs
- CompoundFileIOPermission.cs
- StateDesigner.Helpers.cs
- TypeUtil.cs
- DeviceContexts.cs
- GenericUI.cs
- SqlDataSourceFilteringEventArgs.cs
- PageParserFilter.cs
- XmlEventCache.cs
- ProcessModelInfo.cs
- WebPartVerb.cs
- ClientCultureInfo.cs
- ClientTargetSection.cs
- DesignColumn.cs
- XmlObjectSerializerContext.cs
- EpmSyndicationContentDeSerializer.cs
- Invariant.cs
- EntityDataSourceDesignerHelper.cs
- IndexerNameAttribute.cs
- WebPartVerb.cs
- ipaddressinformationcollection.cs
- BulletChrome.cs
- ImportCatalogPart.cs
- ReliabilityContractAttribute.cs
- ThemeDirectoryCompiler.cs
- EditingCommands.cs
- FormView.cs
- UpdateCompiler.cs
- DbParameterCollection.cs
- InvalidAsynchronousStateException.cs
- MultiAsyncResult.cs
- SqlRecordBuffer.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- TextEditorSelection.cs
- MenuAutomationPeer.cs
- OrderingExpression.cs
- ApplicationProxyInternal.cs
- SmiRecordBuffer.cs
- OpCellTreeNode.cs
- SplashScreen.cs
- SecurityUtils.cs
- StorageMappingItemLoader.cs
- BufferModesCollection.cs
- Line.cs
- XmlQualifiedName.cs
- FullTextState.cs
- HttpCapabilitiesBase.cs
- Stackframe.cs
- DirtyTextRange.cs
- UnionQueryOperator.cs
- assemblycache.cs
- KerberosReceiverSecurityToken.cs
- shaperfactory.cs
- WorkflowShape.cs
- JournalEntryListConverter.cs
- DocumentationServerProtocol.cs
- OperationDescriptionCollection.cs
- GenericEnumerator.cs
- ConstructorNeedsTagAttribute.cs
- BrowserDefinition.cs
- Model3D.cs
- DesignTimeVisibleAttribute.cs
- SiteMap.cs
- CollectionConverter.cs
- KeyValueSerializer.cs
- XmlDictionaryWriter.cs
- RightsManagementEncryptedStream.cs
- streamingZipPartStream.cs
- Journal.cs
- ScaleTransform.cs
- ScrollBar.cs
- DataSourceConverter.cs
- PenLineJoinValidation.cs
- Constants.cs
- RepeaterItem.cs
- FormViewPagerRow.cs
- CompensateDesigner.cs
- CqlBlock.cs
- OraclePermission.cs
- UpdatePanelTriggerCollection.cs
- MarshalByRefObject.cs
- CalendarAutomationPeer.cs
- UserControlParser.cs
- StreamMarshaler.cs
- TypeName.cs
- CodeGenerator.cs
- OrCondition.cs
- DataViewManagerListItemTypeDescriptor.cs
- Int32.cs
- DrawTreeNodeEventArgs.cs