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
- EntitySqlQueryBuilder.cs
- Vector3DAnimationBase.cs
- HttpResponseInternalWrapper.cs
- OpenTypeMethods.cs
- SortAction.cs
- RowParagraph.cs
- ResourceAttributes.cs
- SymmetricKeyWrap.cs
- TcpHostedTransportConfiguration.cs
- TextSyndicationContentKindHelper.cs
- MaterialGroup.cs
- Operators.cs
- GeneralTransform3DTo2DTo3D.cs
- ClientBuildManagerCallback.cs
- CreateUserWizardStep.cs
- Group.cs
- ControlUtil.cs
- SymmetricKeyWrap.cs
- DataControlPagerLinkButton.cs
- DataSourceExpression.cs
- CodeCatchClauseCollection.cs
- DesignerActionGlyph.cs
- Table.cs
- CmsUtils.cs
- MemberDescriptor.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- AssemblyInfo.cs
- Bind.cs
- Misc.cs
- TrackPoint.cs
- RemotingConfiguration.cs
- SqlCommandSet.cs
- LoadedOrUnloadedOperation.cs
- TraceContextEventArgs.cs
- XmlWriterTraceListener.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- CompressEmulationStream.cs
- SignedXml.cs
- UriScheme.cs
- ChannelListenerBase.cs
- BuildProviderCollection.cs
- GridEntry.cs
- AttributeCollection.cs
- EditorPartChrome.cs
- RangeValuePatternIdentifiers.cs
- InlineUIContainer.cs
- Misc.cs
- CounterSampleCalculator.cs
- Sentence.cs
- FormsAuthenticationCredentials.cs
- ContextMenuAutomationPeer.cs
- ChameleonKey.cs
- DoubleLink.cs
- Int16AnimationBase.cs
- UnmanagedHandle.cs
- FunctionCommandText.cs
- DataGridViewColumnCollection.cs
- ProtectedProviderSettings.cs
- SspiSecurityTokenProvider.cs
- HttpListenerRequest.cs
- FusionWrap.cs
- RectConverter.cs
- QilFunction.cs
- SqlBuffer.cs
- AuthenticateEventArgs.cs
- CodeChecksumPragma.cs
- WindowsBrush.cs
- XXXOnTypeBuilderInstantiation.cs
- WebPartConnection.cs
- Calendar.cs
- AliasGenerator.cs
- MetaModel.cs
- altserialization.cs
- SoapAttributes.cs
- Wizard.cs
- PerformanceCounterPermission.cs
- OleDbRowUpdatingEvent.cs
- DelegateTypeInfo.cs
- SecurityTokenSerializer.cs
- FactoryId.cs
- DataGridrowEditEndingEventArgs.cs
- XmlSchemaInclude.cs
- TableLayoutColumnStyleCollection.cs
- SchemaInfo.cs
- OperandQuery.cs
- SqlStatistics.cs
- ImageFormat.cs
- ObjectQuery.cs
- IntSecurity.cs
- CleanUpVirtualizedItemEventArgs.cs
- CustomErrorCollection.cs
- RelatedEnd.cs
- ToolstripProfessionalRenderer.cs
- MinimizableAttributeTypeConverter.cs
- EventLevel.cs
- QilNode.cs
- FontSizeConverter.cs
- FrameworkTextComposition.cs
- x509store.cs
- HeaderedContentControl.cs