Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- LayoutEditorPart.cs
- DecimalKeyFrameCollection.cs
- TargetFrameworkUtil.cs
- QilBinary.cs
- BmpBitmapDecoder.cs
- ScriptControlManager.cs
- WorkingDirectoryEditor.cs
- MailAddressCollection.cs
- ModuleBuilderData.cs
- DataListCommandEventArgs.cs
- DependencyObjectProvider.cs
- SqlLiftWhereClauses.cs
- ChildDocumentBlock.cs
- LoadItemsEventArgs.cs
- RuntimeConfig.cs
- CompilerWrapper.cs
- Grid.cs
- ScrollEventArgs.cs
- CodeDelegateInvokeExpression.cs
- Base64Encoding.cs
- KeySpline.cs
- DataGridViewComboBoxEditingControl.cs
- TriggerAction.cs
- LambdaCompiler.cs
- SqlDataAdapter.cs
- Viewport2DVisual3D.cs
- RawContentTypeMapper.cs
- AccessViolationException.cs
- BamlBinaryWriter.cs
- SessionConnectionReader.cs
- Helper.cs
- CollectionTypeElement.cs
- WpfKnownType.cs
- DrawingAttributeSerializer.cs
- WpfWebRequestHelper.cs
- ControlCachePolicy.cs
- IDispatchConstantAttribute.cs
- ObjectStateEntry.cs
- SafeNativeMethods.cs
- Odbc32.cs
- DataGridSortCommandEventArgs.cs
- ArrayElementGridEntry.cs
- CmsInterop.cs
- StrokeCollection2.cs
- QueryExpression.cs
- XmlNamespaceDeclarationsAttribute.cs
- TextParagraphView.cs
- DoubleUtil.cs
- AttributeQuery.cs
- FontFamily.cs
- BaseValidatorDesigner.cs
- TemplateNameScope.cs
- TimeSpanFormat.cs
- NotImplementedException.cs
- SystemIPv4InterfaceProperties.cs
- ExpressionEditorAttribute.cs
- DesignTimeParseData.cs
- ReflectEventDescriptor.cs
- WebBaseEventKeyComparer.cs
- RegexBoyerMoore.cs
- ApplicationServiceManager.cs
- RowType.cs
- PageAdapter.cs
- IisTraceListener.cs
- RoleServiceManager.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- DBConnection.cs
- PrePrepareMethodAttribute.cs
- Evaluator.cs
- Substitution.cs
- QilStrConcat.cs
- ExpressionTextBox.xaml.cs
- XmlNamedNodeMap.cs
- _FtpDataStream.cs
- ConfigErrorGlyph.cs
- ActivityTrace.cs
- MemberRelationshipService.cs
- ProcessModule.cs
- WebCodeGenerator.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- FormsIdentity.cs
- SqlCacheDependencyDatabase.cs
- ExceptionUtil.cs
- NetTcpBindingElement.cs
- SearchForVirtualItemEventArgs.cs
- AttributedMetaModel.cs
- XmlWrappingReader.cs
- PrefixQName.cs
- EntityTypeEmitter.cs
- _AuthenticationState.cs
- CultureSpecificStringDictionary.cs
- SourceSwitch.cs
- ellipse.cs
- RowUpdatedEventArgs.cs
- MetadataCacheItem.cs
- FormattedTextSymbols.cs
- CapiSafeHandles.cs
- StructuredTypeInfo.cs
- AttributedMetaModel.cs
- XmlWriterTraceListener.cs