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
- XMLSchema.cs
- ConstraintConverter.cs
- Mapping.cs
- BufferedStream.cs
- CodeTypeConstructor.cs
- XmlAtomicValue.cs
- RepeatInfo.cs
- TextBoxLine.cs
- BuildProvider.cs
- SQLBytes.cs
- SafeCryptoKeyHandle.cs
- StringValidator.cs
- PromptEventArgs.cs
- WindowProviderWrapper.cs
- WebCategoryAttribute.cs
- EntityDataSourceSelectingEventArgs.cs
- SqlStatistics.cs
- SqlTopReducer.cs
- HttpBrowserCapabilitiesBase.cs
- ParamArrayAttribute.cs
- ActivityExecutionFilter.cs
- ToolStripSettings.cs
- CryptoStream.cs
- AnimationStorage.cs
- DataColumnCollection.cs
- StylusPointProperty.cs
- InfoCardSymmetricAlgorithm.cs
- ConfigXmlSignificantWhitespace.cs
- BaseTemplateCodeDomTreeGenerator.cs
- OdbcConnectionHandle.cs
- _ConnectOverlappedAsyncResult.cs
- XPathNodeList.cs
- InvalidOleVariantTypeException.cs
- XmlSchema.cs
- CallbackDebugElement.cs
- PassportAuthenticationModule.cs
- Geometry3D.cs
- ProcessDesigner.cs
- Rotation3DKeyFrameCollection.cs
- NumberFormatter.cs
- MatrixTransform.cs
- TextRunTypographyProperties.cs
- ConfigurationSchemaErrors.cs
- LocalValueEnumerator.cs
- HttpCachePolicyElement.cs
- DesignerImageAdapter.cs
- SuppressIldasmAttribute.cs
- MulticastOption.cs
- XmlUnspecifiedAttribute.cs
- OptimalTextSource.cs
- BuiltInExpr.cs
- ButtonRenderer.cs
- BamlBinaryWriter.cs
- StoreItemCollection.cs
- DisableDpiAwarenessAttribute.cs
- ExpressionEditorAttribute.cs
- FramingEncoders.cs
- XmlEntityReference.cs
- XmlElementAttributes.cs
- ControlSerializer.cs
- AspProxy.cs
- XmlSubtreeReader.cs
- TextPattern.cs
- AnimationClock.cs
- RepeatInfo.cs
- entityreference_tresulttype.cs
- DynamicValidator.cs
- XmlSchemaSimpleTypeUnion.cs
- PassportPrincipal.cs
- OAVariantLib.cs
- DataAdapter.cs
- LayoutEditorPart.cs
- ConnectionPointGlyph.cs
- DeflateEmulationStream.cs
- TraceUtility.cs
- MetadataSource.cs
- RegexRunnerFactory.cs
- TablePattern.cs
- ColorConvertedBitmapExtension.cs
- __TransparentProxy.cs
- DbConnectionFactory.cs
- AuthenticationManager.cs
- WebPartChrome.cs
- XmlResolver.cs
- IndexedSelectQueryOperator.cs
- PagedDataSource.cs
- DoubleAnimationUsingKeyFrames.cs
- COM2AboutBoxPropertyDescriptor.cs
- XsdSchemaFileEditor.cs
- PluralizationService.cs
- LineInfo.cs
- regiisutil.cs
- LayoutSettings.cs
- BuiltInExpr.cs
- ArcSegment.cs
- XmlAutoDetectWriter.cs
- BooleanAnimationBase.cs
- QuadraticEase.cs
- SymbolEqualComparer.cs
- controlskin.cs