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
- HtmlInputPassword.cs
- FirewallWrapper.cs
- ActivityExecutorOperation.cs
- COM2PropertyPageUITypeConverter.cs
- Profiler.cs
- RuleProcessor.cs
- ConcurrentQueue.cs
- XmlSchemaIdentityConstraint.cs
- SqlEnums.cs
- ObjRef.cs
- IsolatedStoragePermission.cs
- Utils.cs
- IisTraceListener.cs
- EntityKeyElement.cs
- InProcStateClientManager.cs
- Delegate.cs
- ListenerElementsCollection.cs
- TextWriter.cs
- XmlSchemaInclude.cs
- ImportContext.cs
- ToolboxItemFilterAttribute.cs
- FileChangeNotifier.cs
- TextTreeText.cs
- OperandQuery.cs
- AutoGeneratedFieldProperties.cs
- ContentPosition.cs
- DataFormats.cs
- XPathNodeIterator.cs
- ResetableIterator.cs
- InternalDispatchObject.cs
- MachineKeySection.cs
- XamlPoint3DCollectionSerializer.cs
- DataReceivedEventArgs.cs
- OptimizedTemplateContent.cs
- PackagingUtilities.cs
- IIS7WorkerRequest.cs
- UnsafeMethods.cs
- MimeMultiPart.cs
- EntityDescriptor.cs
- TextBoxBase.cs
- ObjectQueryExecutionPlan.cs
- EditCommandColumn.cs
- SiteOfOriginPart.cs
- XmlDocumentFieldSchema.cs
- BamlBinaryReader.cs
- DbConnectionStringBuilder.cs
- DrawingAttributes.cs
- RepeaterItemCollection.cs
- DocumentViewerBase.cs
- AdPostCacheSubstitution.cs
- TaiwanLunisolarCalendar.cs
- NodeLabelEditEvent.cs
- ContainerParagraph.cs
- SafeFindHandle.cs
- ProfileManager.cs
- XmlSchemaComplexType.cs
- FixedSOMContainer.cs
- ValueQuery.cs
- ModuleConfigurationInfo.cs
- TableLayoutStyleCollection.cs
- StreamProxy.cs
- RangeBaseAutomationPeer.cs
- VideoDrawing.cs
- EncodingFallbackAwareXmlTextWriter.cs
- DefaultProxySection.cs
- LinqDataSourceEditData.cs
- Mappings.cs
- SystemParameters.cs
- _ChunkParse.cs
- UriTemplate.cs
- DataGridViewLinkColumn.cs
- ApplicationHost.cs
- DataServiceQueryProvider.cs
- listviewsubitemcollectioneditor.cs
- CursorConverter.cs
- PersianCalendar.cs
- ColumnResizeUndoUnit.cs
- MemberAssignment.cs
- Stack.cs
- ContainerControlDesigner.cs
- Msec.cs
- AppLevelCompilationSectionCache.cs
- RegisteredScript.cs
- CompiledXpathExpr.cs
- CounterSampleCalculator.cs
- ComponentChangingEvent.cs
- ZipFileInfoCollection.cs
- elementinformation.cs
- DoubleLink.cs
- TypedElement.cs
- HostExecutionContextManager.cs
- TemplateApplicationHelper.cs
- FormatterConverter.cs
- MDIClient.cs
- StringInfo.cs
- URI.cs
- Types.cs
- SystemIPGlobalProperties.cs
- NativeMethods.cs
- MemoryPressure.cs