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
- IconHelper.cs
- FunctionUpdateCommand.cs
- DataGrid.cs
- DesignerDataTableBase.cs
- InternalControlCollection.cs
- FillBehavior.cs
- coordinator.cs
- LazyTextWriterCreator.cs
- OleDbWrapper.cs
- SqlBulkCopy.cs
- SafeRightsManagementSessionHandle.cs
- SecurityDescriptor.cs
- CfgArc.cs
- TitleStyle.cs
- ValidationPropertyAttribute.cs
- Transform3DGroup.cs
- TrackingProfileDeserializationException.cs
- List.cs
- ConsumerConnectionPointCollection.cs
- EventsTab.cs
- SecUtil.cs
- AssemblyAssociatedContentFileAttribute.cs
- BuildManager.cs
- XmlLinkedNode.cs
- CultureInfo.cs
- DBCommand.cs
- ExpandCollapsePattern.cs
- ToolBarOverflowPanel.cs
- ContentPosition.cs
- UserControlParser.cs
- UnconditionalPolicy.cs
- Menu.cs
- ThreadStateException.cs
- Root.cs
- XmlSerializerAssemblyAttribute.cs
- ServiceHostingEnvironmentSection.cs
- ContourSegment.cs
- JsonStringDataContract.cs
- ProjectionQueryOptionExpression.cs
- URLIdentityPermission.cs
- TreeViewItemAutomationPeer.cs
- Compiler.cs
- XmlQueryOutput.cs
- ControlPersister.cs
- SqlClientWrapperSmiStreamChars.cs
- PrimitiveSchema.cs
- DBCommandBuilder.cs
- MetadataPropertyCollection.cs
- LocalBuilder.cs
- DomNameTable.cs
- filewebresponse.cs
- ProbeMatches11.cs
- Filter.cs
- FixedPage.cs
- ContentElement.cs
- ITreeGenerator.cs
- ZipIOLocalFileHeader.cs
- COSERVERINFO.cs
- ChannelDispatcher.cs
- Polyline.cs
- FlowLayoutPanelDesigner.cs
- XmlSchemaSimpleContentRestriction.cs
- DeviceSpecific.cs
- ComAdminWrapper.cs
- DataColumnChangeEvent.cs
- AdornerDecorator.cs
- TargetFrameworkUtil.cs
- LinqDataSourceUpdateEventArgs.cs
- MultiTargetingUtil.cs
- SoapReflectionImporter.cs
- HttpListenerContext.cs
- TimerEventSubscriptionCollection.cs
- WmlLinkAdapter.cs
- PrintDialog.cs
- Listen.cs
- RetrieveVirtualItemEventArgs.cs
- XpsFontSubsetter.cs
- _LocalDataStore.cs
- CurrencyWrapper.cs
- EdmType.cs
- Vector3D.cs
- SpecialFolderEnumConverter.cs
- BindableAttribute.cs
- KnownBoxes.cs
- RestClientProxyHandler.cs
- PrintDialogDesigner.cs
- QuaternionAnimation.cs
- MessageContractImporter.cs
- DefaultIfEmptyQueryOperator.cs
- DrawListViewItemEventArgs.cs
- AdornerHitTestResult.cs
- DataControlReference.cs
- SchemaElementDecl.cs
- XmlSchemaParticle.cs
- SecurityPermission.cs
- TypeConverterHelper.cs
- RequestTimeoutManager.cs
- CorrelationManager.cs
- SaveLedgerEntryRequest.cs
- AssemblyContextControlItem.cs