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
- TextTreeText.cs
- StorageComplexTypeMapping.cs
- Soap12FormatExtensions.cs
- ProjectionRewriter.cs
- _LocalDataStoreMgr.cs
- BufferedStream.cs
- AttributeTable.cs
- PropertyEmitter.cs
- AtomEntry.cs
- ColorConvertedBitmap.cs
- PopOutPanel.cs
- COM2ICategorizePropertiesHandler.cs
- Monitor.cs
- TypeBinaryExpression.cs
- ExceptionUtil.cs
- InvalidFilterCriteriaException.cs
- RectangleConverter.cs
- ListViewDataItem.cs
- RemotingSurrogateSelector.cs
- ClientRoleProvider.cs
- PenThreadPool.cs
- RectAnimationClockResource.cs
- SafeHandles.cs
- AsyncOperation.cs
- XmlLanguageConverter.cs
- ResizingMessageFilter.cs
- TableCell.cs
- DependencyPropertyKind.cs
- UrlMappingsModule.cs
- StylusPlugin.cs
- SourceFileBuildProvider.cs
- GeneralTransform2DTo3DTo2D.cs
- SqlDataSourceSelectingEventArgs.cs
- Graphics.cs
- _NestedMultipleAsyncResult.cs
- ZipIOFileItemStream.cs
- PropertyGeneratedEventArgs.cs
- MutexSecurity.cs
- AppSettingsExpressionBuilder.cs
- InheritablePropertyChangeInfo.cs
- ListQueryResults.cs
- _AutoWebProxyScriptHelper.cs
- ControlCollection.cs
- ParsedAttributeCollection.cs
- AnonymousIdentificationModule.cs
- NamedPermissionSet.cs
- DescendantQuery.cs
- DataMember.cs
- DispatcherExceptionEventArgs.cs
- FileLoadException.cs
- RangeContentEnumerator.cs
- ViewCellRelation.cs
- XPathNodeList.cs
- BitmapEffectDrawingContent.cs
- TemplateContentLoader.cs
- X509Utils.cs
- XmlSchemaSimpleContentExtension.cs
- DateBoldEvent.cs
- DoubleLinkList.cs
- TracingConnectionListener.cs
- HMACSHA256.cs
- CodeArrayCreateExpression.cs
- XmlDictionary.cs
- Timer.cs
- PropertyBuilder.cs
- EntityContainerAssociationSet.cs
- CodeAccessPermission.cs
- DataControlCommands.cs
- _PooledStream.cs
- DecimalAnimationUsingKeyFrames.cs
- RTLAwareMessageBox.cs
- SmiXetterAccessMap.cs
- TextServicesProperty.cs
- PersistStreamTypeWrapper.cs
- ToolStripProgressBar.cs
- ConfigurationValidatorAttribute.cs
- WebBrowserEvent.cs
- BuildResult.cs
- TdsParserHelperClasses.cs
- StreamWithDictionary.cs
- SolidBrush.cs
- TagMapCollection.cs
- XXXInfos.cs
- DataControlCommands.cs
- HorizontalAlignConverter.cs
- InputBinder.cs
- ConfigXmlAttribute.cs
- AdornerHitTestResult.cs
- EngineSite.cs
- CancellationTokenSource.cs
- HostedElements.cs
- FtpRequestCacheValidator.cs
- InspectionWorker.cs
- ToolStrip.cs
- DrawingState.cs
- ObjectTypeMapping.cs
- ListView.cs
- Vector3DIndependentAnimationStorage.cs
- RuntimeHandles.cs
- safemediahandle.cs