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
- RankException.cs
- Pts.cs
- NavigationPropertyEmitter.cs
- UrlSyndicationContent.cs
- RoleBoolean.cs
- WebPartDescriptionCollection.cs
- PropertyGridView.cs
- EventDriven.cs
- EntityClientCacheKey.cs
- Decimal.cs
- ContextStaticAttribute.cs
- Choices.cs
- DBNull.cs
- CollectionDataContract.cs
- Page.cs
- Touch.cs
- XslAst.cs
- ImageSourceValueSerializer.cs
- _Rfc2616CacheValidators.cs
- FilteredDataSetHelper.cs
- PageVisual.cs
- BitmapCacheBrush.cs
- EmptyElement.cs
- NeutralResourcesLanguageAttribute.cs
- DesignTimeVisibleAttribute.cs
- login.cs
- DbParameterCollectionHelper.cs
- FontWeights.cs
- AudienceUriMode.cs
- BoolExpr.cs
- Int64.cs
- ExecutedRoutedEventArgs.cs
- OdbcConnectionHandle.cs
- XmlSchemaValidationException.cs
- SoapSchemaExporter.cs
- CodeDirectionExpression.cs
- XpsDocument.cs
- SiteMapNodeItem.cs
- ProjectionQueryOptionExpression.cs
- HotSpotCollection.cs
- EventMap.cs
- XPathSelfQuery.cs
- COAUTHINFO.cs
- NativeMethods.cs
- MailDefinition.cs
- MD5.cs
- MultiAsyncResult.cs
- AppearanceEditorPart.cs
- GraphicsContext.cs
- DiscriminatorMap.cs
- DependencyObjectPropertyDescriptor.cs
- NativeMethods.cs
- LogManagementAsyncResult.cs
- DataStorage.cs
- HttpResponse.cs
- PlainXmlSerializer.cs
- NativeMethodsOther.cs
- StandardToolWindows.cs
- FormParameter.cs
- TypeUtils.cs
- CircleHotSpot.cs
- WithStatement.cs
- XmlBaseReader.cs
- WebSysDefaultValueAttribute.cs
- WebPartDisplayModeCancelEventArgs.cs
- OleDbError.cs
- XmlConverter.cs
- ProviderBase.cs
- ChangePasswordAutoFormat.cs
- SqlUdtInfo.cs
- ControlTemplate.cs
- RefExpr.cs
- localization.cs
- DynamicRenderer.cs
- DataGridViewTopLeftHeaderCell.cs
- ModuleBuilder.cs
- ObsoleteAttribute.cs
- FontDialog.cs
- EntityStoreSchemaGenerator.cs
- CultureInfo.cs
- StandardCommands.cs
- UnsafeNativeMethods.cs
- RangeValuePattern.cs
- XpsStructure.cs
- Converter.cs
- QueryBranchOp.cs
- MouseEvent.cs
- sapiproxy.cs
- MetaData.cs
- SocketPermission.cs
- DbBuffer.cs
- BinaryObjectReader.cs
- _DigestClient.cs
- ImageCodecInfoPrivate.cs
- ConfigurationFileMap.cs
- TextSegment.cs
- RankException.cs
- CustomError.cs
- ConsoleCancelEventArgs.cs
- MatrixValueSerializer.cs