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
- PropertyGeneratedEventArgs.cs
- XmlQueryStaticData.cs
- RemotingAttributes.cs
- Viewport3DVisual.cs
- OleDbCommandBuilder.cs
- OdbcEnvironment.cs
- InstanceData.cs
- UIElement.cs
- NegotiationTokenAuthenticator.cs
- ThreadInterruptedException.cs
- DbConnectionPool.cs
- WeakReferenceEnumerator.cs
- SoundPlayer.cs
- ArglessEventHandlerProxy.cs
- LowerCaseStringConverter.cs
- WinEventHandler.cs
- CodePrimitiveExpression.cs
- GroupItemAutomationPeer.cs
- ThemeConfigurationDialog.cs
- SqlUserDefinedTypeAttribute.cs
- GridPatternIdentifiers.cs
- _PooledStream.cs
- OperationCanceledException.cs
- TextDpi.cs
- codemethodreferenceexpression.cs
- DesignerActionKeyboardBehavior.cs
- FixedSOMImage.cs
- JpegBitmapEncoder.cs
- ScriptMethodAttribute.cs
- SynchronizedPool.cs
- ProfileParameter.cs
- ConsumerConnectionPointCollection.cs
- SettingsAttributeDictionary.cs
- DesignerVerbCollection.cs
- MeasureData.cs
- MethodMessage.cs
- PrincipalPermission.cs
- DataGridPageChangedEventArgs.cs
- FirstMatchCodeGroup.cs
- BuildResult.cs
- PropertyChangingEventArgs.cs
- OperatingSystemVersionCheck.cs
- HtmlInputText.cs
- ObjectStateManagerMetadata.cs
- GuidelineSet.cs
- __ComObject.cs
- RectAnimationClockResource.cs
- ProcessRequestArgs.cs
- BaseValidator.cs
- XmlStreamNodeWriter.cs
- DocumentEventArgs.cs
- ObjectListCommandEventArgs.cs
- EncoderFallback.cs
- TdsParser.cs
- LinqDataSource.cs
- DodSequenceMerge.cs
- SharedDp.cs
- EntityProviderServices.cs
- UnsafeNativeMethods.cs
- RoutedEventHandlerInfo.cs
- DelimitedListTraceListener.cs
- EmbeddedMailObjectCollectionEditor.cs
- RowToFieldTransformer.cs
- XmlDataSourceNodeDescriptor.cs
- WindowsRegion.cs
- XmlCustomFormatter.cs
- CommandLibraryHelper.cs
- PowerStatus.cs
- HttpClientCertificate.cs
- Source.cs
- RepeaterItem.cs
- NegatedCellConstant.cs
- ClientSettingsProvider.cs
- SeverityFilter.cs
- TogglePattern.cs
- BookmarkScope.cs
- HttpHandlerActionCollection.cs
- EntityProviderServices.cs
- GenerateHelper.cs
- ImageButton.cs
- WebBrowserHelper.cs
- compensatingcollection.cs
- RadioButton.cs
- ObjectParameter.cs
- UnorderedHashRepartitionStream.cs
- HtmlTernaryTree.cs
- HtmlToClrEventProxy.cs
- WebSysDescriptionAttribute.cs
- BuildProvidersCompiler.cs
- BaseProcessProtocolHandler.cs
- LassoHelper.cs
- DataGridCaption.cs
- PropertyGridEditorPart.cs
- Image.cs
- ReadWriteObjectLock.cs
- WebContext.cs
- TextElementEditingBehaviorAttribute.cs
- EditCommandColumn.cs
- OleDbErrorCollection.cs
- CodeAttributeDeclarationCollection.cs