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
- TrustLevel.cs
- IgnoreSection.cs
- DefaultBindingPropertyAttribute.cs
- BaseCodeDomTreeGenerator.cs
- BuildProvidersCompiler.cs
- SubMenuStyleCollection.cs
- PrimitiveCodeDomSerializer.cs
- ToolBarOverflowPanel.cs
- ClientScriptManager.cs
- AutoCompleteStringCollection.cs
- FontSourceCollection.cs
- SignatureResourcePool.cs
- TextElementCollection.cs
- PathFigureCollectionConverter.cs
- WebPartDisplayModeCancelEventArgs.cs
- AttributeSetAction.cs
- HostedElements.cs
- DispatcherProcessingDisabled.cs
- OracleRowUpdatedEventArgs.cs
- ProofTokenCryptoHandle.cs
- InternalEnumValidator.cs
- ellipse.cs
- EntryIndex.cs
- ByteStorage.cs
- ContractBase.cs
- InstanceCompleteException.cs
- PerformanceCounterPermissionEntryCollection.cs
- ContentDisposition.cs
- LambdaSerializationException.cs
- AggregatePushdown.cs
- InputManager.cs
- SerializationObjectManager.cs
- UnsafeNativeMethodsPenimc.cs
- ColorContext.cs
- MouseGesture.cs
- MouseWheelEventArgs.cs
- LayoutSettings.cs
- X509Extension.cs
- ViewGenerator.cs
- CaseDesigner.xaml.cs
- IteratorFilter.cs
- String.cs
- XmlSchemaDocumentation.cs
- SafeNativeMethods.cs
- PocoEntityKeyStrategy.cs
- NonceCache.cs
- HwndAppCommandInputProvider.cs
- SectionVisual.cs
- DesignerSerializationVisibilityAttribute.cs
- SqlProviderServices.cs
- TextBoxBase.cs
- HtmlObjectListAdapter.cs
- IndexerNameAttribute.cs
- MappingSource.cs
- ToolStripCustomTypeDescriptor.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- CommentAction.cs
- D3DImage.cs
- newinstructionaction.cs
- XPathSelfQuery.cs
- ResourcePart.cs
- TypeInitializationException.cs
- DataServiceQueryException.cs
- Mouse.cs
- FocusWithinProperty.cs
- AssertSection.cs
- EnterpriseServicesHelper.cs
- SetMemberBinder.cs
- WindowInteractionStateTracker.cs
- NativeMethods.cs
- ArrangedElement.cs
- GCHandleCookieTable.cs
- UpdatePanelTrigger.cs
- BindingListCollectionView.cs
- SiteMapNodeCollection.cs
- RootAction.cs
- DelegatingTypeDescriptionProvider.cs
- MeasurementDCInfo.cs
- HostingPreferredMapPath.cs
- X509SubjectKeyIdentifierClause.cs
- MethodBuilderInstantiation.cs
- UnsafeNetInfoNativeMethods.cs
- milrender.cs
- UTF32Encoding.cs
- DateTimeFormatInfoScanner.cs
- Identity.cs
- GroupBox.cs
- GreenMethods.cs
- PerformanceCounterManager.cs
- DeclaredTypeValidator.cs
- CompatibleComparer.cs
- QilReplaceVisitor.cs
- BindableTemplateBuilder.cs
- FontWeights.cs
- Binding.cs
- TextSimpleMarkerProperties.cs
- DesignerAutoFormatStyle.cs
- XmlNamespaceDeclarationsAttribute.cs
- CacheSection.cs
- StackBuilderSink.cs