Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / GlyphCache.cs / 2 / 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
- TreeSet.cs
- TableDesigner.cs
- StructuredProperty.cs
- ScriptRegistrationManager.cs
- URLIdentityPermission.cs
- SelectorAutomationPeer.cs
- Rotation3DKeyFrameCollection.cs
- XmlSchemaCollection.cs
- UpdateExpressionVisitor.cs
- OutputCacheProfileCollection.cs
- HttpInputStream.cs
- Vector3dCollection.cs
- MailAddressCollection.cs
- WindowsComboBox.cs
- BitArray.cs
- DiscoveryClientProtocol.cs
- SpeechUI.cs
- LazyLoadBehavior.cs
- CompiledQueryCacheKey.cs
- SpecialNameAttribute.cs
- DefaultBindingPropertyAttribute.cs
- HtmlMeta.cs
- DataTableReader.cs
- CodeAttributeDeclaration.cs
- MulticastIPAddressInformationCollection.cs
- DrawingContextWalker.cs
- AssemblyAttributesGoHere.cs
- InheritablePropertyChangeInfo.cs
- XmlTextWriter.cs
- XMLSyntaxException.cs
- TextWriter.cs
- RoleGroupCollectionEditor.cs
- MultiByteCodec.cs
- ObjectDesignerDataSourceView.cs
- ToolboxItemFilterAttribute.cs
- DBNull.cs
- CommonDialog.cs
- CharEnumerator.cs
- HttpConfigurationSystem.cs
- QuadTree.cs
- Emitter.cs
- NodeLabelEditEvent.cs
- OracleColumn.cs
- ExpressionVisitorHelpers.cs
- DataGridBoundColumn.cs
- WindowsFormsHelpers.cs
- Control.cs
- SourceFilter.cs
- DataGridCaption.cs
- SBCSCodePageEncoding.cs
- PropertyDescriptors.cs
- SettingsProperty.cs
- XmlSerializationReader.cs
- OdbcConnection.cs
- StrokeCollectionDefaultValueFactory.cs
- ChannelToken.cs
- PropertySourceInfo.cs
- ServiceCredentials.cs
- Substitution.cs
- EarlyBoundInfo.cs
- ProcessModule.cs
- EmptyStringExpandableObjectConverter.cs
- StorageSetMapping.cs
- FormsAuthenticationTicket.cs
- BitmapPalette.cs
- ConstNode.cs
- PeerFlooder.cs
- IRCollection.cs
- BindingNavigator.cs
- FileUtil.cs
- LoginView.cs
- HttpRuntime.cs
- PasswordPropertyTextAttribute.cs
- FormattedTextSymbols.cs
- TypeUnloadedException.cs
- InputProviderSite.cs
- ListenerSingletonConnectionReader.cs
- HttpCapabilitiesBase.cs
- SafeSecurityHandles.cs
- _AutoWebProxyScriptWrapper.cs
- NetworkInformationException.cs
- HighlightComponent.cs
- NameNode.cs
- DbMetaDataCollectionNames.cs
- DependencyObjectPropertyDescriptor.cs
- UserControlBuildProvider.cs
- WorkflowQueue.cs
- XmlUtil.cs
- ObjectDataSourceStatusEventArgs.cs
- Terminate.cs
- GraphicsPath.cs
- EpmSyndicationContentSerializer.cs
- CodeDomExtensionMethods.cs
- XmlObjectSerializerWriteContext.cs
- Compiler.cs
- VersionedStream.cs
- SchemaType.cs
- ClickablePoint.cs
- PasswordBox.cs
- SynchronizationFilter.cs