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
- XsltSettings.cs
- EntityViewContainer.cs
- ManagedFilter.cs
- DrawingContext.cs
- StringArrayEditor.cs
- ClassGenerator.cs
- EmptyTextWriter.cs
- CacheModeValueSerializer.cs
- PageEventArgs.cs
- PowerStatus.cs
- TemplateEditingVerb.cs
- FlowDocumentScrollViewer.cs
- TemplateBindingExtensionConverter.cs
- HistoryEventArgs.cs
- SQLUtility.cs
- CharacterString.cs
- TickBar.cs
- Hyperlink.cs
- PathParser.cs
- EndpointConfigContainer.cs
- MemberMaps.cs
- EnumerableRowCollection.cs
- CustomSignedXml.cs
- ThreadBehavior.cs
- PenThreadPool.cs
- newinstructionaction.cs
- Inflater.cs
- MenuCommand.cs
- MenuItemBindingCollection.cs
- SqlNodeAnnotations.cs
- WeakReferenceEnumerator.cs
- WindowsListViewItem.cs
- GPPOINTF.cs
- SqlConnectionHelper.cs
- XmlDocument.cs
- BoundColumn.cs
- DataService.cs
- ContractReference.cs
- TableLayoutPanel.cs
- Base64Stream.cs
- TypeContext.cs
- SpecularMaterial.cs
- ExtenderControl.cs
- XPathParser.cs
- DoubleCollectionConverter.cs
- XamlBuildTaskServices.cs
- MemberHolder.cs
- ToggleButton.cs
- SvcMapFileLoader.cs
- UriSchemeKeyedCollection.cs
- EdmError.cs
- TextParagraphCache.cs
- PermissionRequestEvidence.cs
- TextStore.cs
- FusionWrap.cs
- TabletDeviceInfo.cs
- MachineKeySection.cs
- UpdatePanelControlTrigger.cs
- DataPager.cs
- NamespaceEmitter.cs
- NgenServicingAttributes.cs
- ChildTable.cs
- RawKeyboardInputReport.cs
- ChangePasswordAutoFormat.cs
- EntityContainerEntitySet.cs
- DBParameter.cs
- TextLineBreak.cs
- PrimarySelectionGlyph.cs
- ClientUtils.cs
- WebPartMenu.cs
- ValidationSummary.cs
- RichTextBox.cs
- DesignerCategoryAttribute.cs
- PersonalizationAdministration.cs
- ScrollChangedEventArgs.cs
- FindProgressChangedEventArgs.cs
- SymbolPair.cs
- WorkflowServiceNamespace.cs
- FixedPosition.cs
- ToolStripStatusLabel.cs
- XamlTreeBuilder.cs
- TrailingSpaceComparer.cs
- HiddenFieldPageStatePersister.cs
- BufferedReadStream.cs
- ClientTarget.cs
- SQLStringStorage.cs
- MatcherBuilder.cs
- ToolStripDropDownMenu.cs
- EncryptedPackage.cs
- QueryableDataSourceHelper.cs
- SplitterEvent.cs
- EmptyStringExpandableObjectConverter.cs
- MdiWindowListItemConverter.cs
- FrugalMap.cs
- Span.cs
- EncryptedPackage.cs
- Evidence.cs
- RoleExceptions.cs
- WebConvert.cs
- ConfigXmlText.cs