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
- NewArrayExpression.cs
- PrimitiveXmlSerializers.cs
- ButtonFieldBase.cs
- CharacterBufferReference.cs
- MetadataUtil.cs
- XamlPoint3DCollectionSerializer.cs
- Pair.cs
- HtmlSelectionListAdapter.cs
- BinaryObjectInfo.cs
- CellPartitioner.cs
- JumpPath.cs
- WarningException.cs
- LinkButton.cs
- WebDisplayNameAttribute.cs
- DynamicDocumentPaginator.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- Repeater.cs
- NamespaceMapping.cs
- ActivityStatusChangeEventArgs.cs
- XpsS0ValidatingLoader.cs
- ConfigurationProperty.cs
- GridViewColumnHeader.cs
- SurrogateEncoder.cs
- AlternateViewCollection.cs
- NamedPipeTransportSecurityElement.cs
- CodeMethodInvokeExpression.cs
- XXXInfos.cs
- WindowInteropHelper.cs
- SimpleMailWebEventProvider.cs
- LocalizationCodeDomSerializer.cs
- XmlEnumAttribute.cs
- PageScaling.cs
- OutputScopeManager.cs
- QueryResponse.cs
- PathStreamGeometryContext.cs
- IISMapPath.cs
- Tool.cs
- AuthenticationConfig.cs
- HwndSource.cs
- MailDefinition.cs
- SqlDependencyUtils.cs
- DependencyObjectPropertyDescriptor.cs
- SrgsElementFactoryCompiler.cs
- LineProperties.cs
- ViewEventArgs.cs
- MissingManifestResourceException.cs
- CodeSubDirectoriesCollection.cs
- NullableBoolConverter.cs
- ObjectCache.cs
- IconBitmapDecoder.cs
- LinkDesigner.cs
- InputProviderSite.cs
- TextFormatterHost.cs
- ListViewItemMouseHoverEvent.cs
- PartitionResolver.cs
- GeneratedContractType.cs
- RenderDataDrawingContext.cs
- WpfXamlLoader.cs
- ZoneButton.cs
- ParameterToken.cs
- FragmentQueryKB.cs
- SafeEventLogWriteHandle.cs
- PixelShader.cs
- Vector3DCollectionConverter.cs
- M3DUtil.cs
- ObjectStateManagerMetadata.cs
- VersionPair.cs
- Rijndael.cs
- ByeMessageApril2005.cs
- CharacterMetricsDictionary.cs
- InternalMappingException.cs
- UIElement.cs
- Classification.cs
- TextSpan.cs
- WinInetCache.cs
- DataGridState.cs
- CssStyleCollection.cs
- CollectionConverter.cs
- Error.cs
- TableHeaderCell.cs
- SQLUtility.cs
- XmlBinaryReader.cs
- HtmlInputControl.cs
- BasicCommandTreeVisitor.cs
- SerializerWriterEventHandlers.cs
- XsltContext.cs
- BinHexEncoder.cs
- BasicHttpSecurityMode.cs
- ConnectionPointCookie.cs
- SafeRightsManagementQueryHandle.cs
- PanelStyle.cs
- Content.cs
- LinqDataSourceDisposeEventArgs.cs
- TrackPointCollection.cs
- BindingCollection.cs
- ChangeInterceptorAttribute.cs
- HandlerMappingMemo.cs
- WebSysDisplayNameAttribute.cs
- StreamWithDictionary.cs
- BitmapEffectGroup.cs