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 / Renderer.cs / 3 / Renderer.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Though called "Renderer", this is used only for the 'rendering // to a BitmapImage' case, and not when rendering to an HwndTarget. // //----------------------------------------------------------------------------- using System; using System.Windows; using System.Collections.Generic; using System.Windows.Threading; using System.Diagnostics; using MS.Internal; using System.Windows.Media; using System.Windows.Media.Composition; using MS.Win32; using System.Security; using System.Security.Permissions; namespace System.Windows.Media { static internal class Renderer { ////// Critical - unmanaged pointer arguments, access critical resources, calls unmanaged code /// [SecurityCritical] static public void Render( IntPtr pRenderTarget, DUCE.Channel channel, Visual visual, int width, int height, double dpiX, double dpiY) { Render(pRenderTarget, channel, visual, width, height, dpiX, dpiY, Matrix.Identity, Rect.Empty, false); } ////// If fRenderForBitmapEffect is true, the method calls special methods on visual /// to render it specifically for an effect to be applied to it. It excludes /// properties such as transform, clip, offset and guidelines. /// ////// Critical - unmanaged pointer arguments, access critical resources, calls unmanaged code /// [SecurityCritical] static internal void Render( IntPtr pRenderTarget, DUCE.Channel channel, Visual visual, int width, int height, double dpiX, double dpiY, Matrix worldTransform, Rect windowClip, bool fRenderForBitmapEffect ) { DUCE.Resource target = new DUCE.Resource(); DUCE.Resource root = new DUCE.Resource(); DUCE.ResourceHandle targetHandle = DUCE.ResourceHandle.Null; DUCE.ResourceHandle rootHandle = DUCE.ResourceHandle.Null; Matrix deviceTransform = new Matrix( dpiX * (1.0 / 96.0), 0, 0, dpiY * (1.0 / 96.0), 0, 0); deviceTransform = worldTransform * deviceTransform; MatrixTransform mtDeviceTransform = new MatrixTransform(deviceTransform); DUCE.ResourceHandle deviceTransformHandle = ((DUCE.IResource)mtDeviceTransform).AddRefOnChannel(channel); try { // ----------------------------------------------------------- // Create the composition target and root visual resources. target.CreateOrAddRefOnChannel(channel, DUCE.ResourceType.TYPE_GENERICRENDERTARGET); targetHandle = target.Handle; DUCE.CompositionTarget.PrintInitialize( targetHandle, pRenderTarget, width, height, channel); root.CreateOrAddRefOnChannel(channel, DUCE.ResourceType.TYPE_VISUAL); rootHandle = root.Handle; DUCE.CompositionNode.SetTransform( rootHandle, deviceTransformHandle, channel); DUCE.CompositionTarget.SetRoot( targetHandle, rootHandle, channel); channel.Commit(); // ----------------------------------------------------------- // Render the freshly created target. RenderContext renderContext = new RenderContext(); renderContext.Initialize(channel, rootHandle); visual.Precompute(); if (fRenderForBitmapEffect) { visual.RenderForBitmapEffect(renderContext, 0); } else { visual.Render(renderContext, 0); } // Mark the visible realizations. RealizationContext realizationContext = new RealizationContext(); realizationContext.WindowClip = (windowClip.IsEmpty) ? new Rect(0, 0, width, height) : windowClip; DUCE.ChannelSet channelSet = new DUCE.ChannelSet(); channelSet.Channel = channel; realizationContext.BeginFrame(false /* full walk */, true /* walk for BitmapRenderTarget */); realizationContext.ChannelSet = channelSet; realizationContext.TransformStack.Push(ref deviceTransform, /* combine */ false); if (fRenderForBitmapEffect) { visual.MarkVisibleRealizationsForBitmapEffect(realizationContext); } else { visual.MarkVisibleRealizations(realizationContext); } realizationContext.TransformStack.Pop(); // Execute the realization updates. realizationContext.ExecuteRealizationsUpdateSchedule(); // ------------------------------------------------------------ // Flush the channel and present the composition target. channel.Commit(); channel.Present(); MediaContext mediaContext = MediaContext.CurrentMediaContext; mediaContext.NotifySyncChannelMessage(channel); // // Note: RealizationContext.EndFrame does not need to be called // here because we don't cache the realization context. // } finally { // ----------------------------------------------------------- // Clean up and release the root visual. if (!rootHandle.IsNull) { DUCE.CompositionNode.RemoveAllChildren( rootHandle, channel); if (fRenderForBitmapEffect) { visual.ReleaseOnChannelForBitmapEffect(channel); } else { ((DUCE.IResource)visual).ReleaseOnChannel(channel); } root.ReleaseOnChannel(channel); } // ------------------------------------------------------------ // Release the world transform. if (!deviceTransformHandle.IsNull) { ((DUCE.IResource)mtDeviceTransform).ReleaseOnChannel(channel); } // ------------------------------------------------------------ // Clean up and release the composition target. if (!targetHandle.IsNull) { DUCE.CompositionTarget.SetRoot( targetHandle, DUCE.ResourceHandle.Null, channel); target.ReleaseOnChannel(channel); // // The release queue might have entries even though ReleaseOnChannel is // initiated on the root, because Visual.ReleaseOnChannelForVisualBrush // uses the queue (change made for Dev10 453126). // channel.ProcessRemoveCommand(); channel.ProcessReleaseCommand(); channel.ClearRemoveAndReleaseQueue(); } // // Since we initiate ReleaseOnChannel from the root, that // should not enqueue any delayed release. // Debug.Assert(channel.IsRemoveAndReleaseQueueEmpty()); // ----------------------------------------------------------- // Flush the channel and present the composition target. channel.Commit(); channel.Present(); MediaContext mediaContext = MediaContext.CurrentMediaContext; mediaContext.NotifySyncChannelMessage(channel); } } } } // 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. // // // Description: // Though called "Renderer", this is used only for the 'rendering // to a BitmapImage' case, and not when rendering to an HwndTarget. // //----------------------------------------------------------------------------- using System; using System.Windows; using System.Collections.Generic; using System.Windows.Threading; using System.Diagnostics; using MS.Internal; using System.Windows.Media; using System.Windows.Media.Composition; using MS.Win32; using System.Security; using System.Security.Permissions; namespace System.Windows.Media { static internal class Renderer { ////// Critical - unmanaged pointer arguments, access critical resources, calls unmanaged code /// [SecurityCritical] static public void Render( IntPtr pRenderTarget, DUCE.Channel channel, Visual visual, int width, int height, double dpiX, double dpiY) { Render(pRenderTarget, channel, visual, width, height, dpiX, dpiY, Matrix.Identity, Rect.Empty, false); } ////// If fRenderForBitmapEffect is true, the method calls special methods on visual /// to render it specifically for an effect to be applied to it. It excludes /// properties such as transform, clip, offset and guidelines. /// ////// Critical - unmanaged pointer arguments, access critical resources, calls unmanaged code /// [SecurityCritical] static internal void Render( IntPtr pRenderTarget, DUCE.Channel channel, Visual visual, int width, int height, double dpiX, double dpiY, Matrix worldTransform, Rect windowClip, bool fRenderForBitmapEffect ) { DUCE.Resource target = new DUCE.Resource(); DUCE.Resource root = new DUCE.Resource(); DUCE.ResourceHandle targetHandle = DUCE.ResourceHandle.Null; DUCE.ResourceHandle rootHandle = DUCE.ResourceHandle.Null; Matrix deviceTransform = new Matrix( dpiX * (1.0 / 96.0), 0, 0, dpiY * (1.0 / 96.0), 0, 0); deviceTransform = worldTransform * deviceTransform; MatrixTransform mtDeviceTransform = new MatrixTransform(deviceTransform); DUCE.ResourceHandle deviceTransformHandle = ((DUCE.IResource)mtDeviceTransform).AddRefOnChannel(channel); try { // ----------------------------------------------------------- // Create the composition target and root visual resources. target.CreateOrAddRefOnChannel(channel, DUCE.ResourceType.TYPE_GENERICRENDERTARGET); targetHandle = target.Handle; DUCE.CompositionTarget.PrintInitialize( targetHandle, pRenderTarget, width, height, channel); root.CreateOrAddRefOnChannel(channel, DUCE.ResourceType.TYPE_VISUAL); rootHandle = root.Handle; DUCE.CompositionNode.SetTransform( rootHandle, deviceTransformHandle, channel); DUCE.CompositionTarget.SetRoot( targetHandle, rootHandle, channel); channel.Commit(); // ----------------------------------------------------------- // Render the freshly created target. RenderContext renderContext = new RenderContext(); renderContext.Initialize(channel, rootHandle); visual.Precompute(); if (fRenderForBitmapEffect) { visual.RenderForBitmapEffect(renderContext, 0); } else { visual.Render(renderContext, 0); } // Mark the visible realizations. RealizationContext realizationContext = new RealizationContext(); realizationContext.WindowClip = (windowClip.IsEmpty) ? new Rect(0, 0, width, height) : windowClip; DUCE.ChannelSet channelSet = new DUCE.ChannelSet(); channelSet.Channel = channel; realizationContext.BeginFrame(false /* full walk */, true /* walk for BitmapRenderTarget */); realizationContext.ChannelSet = channelSet; realizationContext.TransformStack.Push(ref deviceTransform, /* combine */ false); if (fRenderForBitmapEffect) { visual.MarkVisibleRealizationsForBitmapEffect(realizationContext); } else { visual.MarkVisibleRealizations(realizationContext); } realizationContext.TransformStack.Pop(); // Execute the realization updates. realizationContext.ExecuteRealizationsUpdateSchedule(); // ------------------------------------------------------------ // Flush the channel and present the composition target. channel.Commit(); channel.Present(); MediaContext mediaContext = MediaContext.CurrentMediaContext; mediaContext.NotifySyncChannelMessage(channel); // // Note: RealizationContext.EndFrame does not need to be called // here because we don't cache the realization context. // } finally { // ----------------------------------------------------------- // Clean up and release the root visual. if (!rootHandle.IsNull) { DUCE.CompositionNode.RemoveAllChildren( rootHandle, channel); if (fRenderForBitmapEffect) { visual.ReleaseOnChannelForBitmapEffect(channel); } else { ((DUCE.IResource)visual).ReleaseOnChannel(channel); } root.ReleaseOnChannel(channel); } // ------------------------------------------------------------ // Release the world transform. if (!deviceTransformHandle.IsNull) { ((DUCE.IResource)mtDeviceTransform).ReleaseOnChannel(channel); } // ------------------------------------------------------------ // Clean up and release the composition target. if (!targetHandle.IsNull) { DUCE.CompositionTarget.SetRoot( targetHandle, DUCE.ResourceHandle.Null, channel); target.ReleaseOnChannel(channel); // // The release queue might have entries even though ReleaseOnChannel is // initiated on the root, because Visual.ReleaseOnChannelForVisualBrush // uses the queue (change made for Dev10 453126). // channel.ProcessRemoveCommand(); channel.ProcessReleaseCommand(); channel.ClearRemoveAndReleaseQueue(); } // // Since we initiate ReleaseOnChannel from the root, that // should not enqueue any delayed release. // Debug.Assert(channel.IsRemoveAndReleaseQueueEmpty()); // ----------------------------------------------------------- // Flush the channel and present the composition target. channel.Commit(); channel.Present(); MediaContext mediaContext = MediaContext.CurrentMediaContext; mediaContext.NotifySyncChannelMessage(channel); } } } } // 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
- PrinterResolution.cs
- GridItemPatternIdentifiers.cs
- RuntimeComponentFilter.cs
- HttpCapabilitiesEvaluator.cs
- TypeDescriptionProvider.cs
- BrowserCapabilitiesFactoryBase.cs
- AssociationType.cs
- ItemCheckEvent.cs
- FillErrorEventArgs.cs
- SafeRegistryHandle.cs
- XPathDocument.cs
- infer.cs
- coordinatorfactory.cs
- PropertyItemInternal.cs
- ToolStripArrowRenderEventArgs.cs
- WindowClosedEventArgs.cs
- XmlNodeChangedEventArgs.cs
- HtmlElementEventArgs.cs
- TypeDescriptionProviderAttribute.cs
- TimeSpanParse.cs
- LineServicesCallbacks.cs
- PrtTicket_Base.cs
- StylusShape.cs
- ErasingStroke.cs
- ApplicationBuildProvider.cs
- TextOptionsInternal.cs
- IResourceProvider.cs
- DataGridToolTip.cs
- _RegBlobWebProxyDataBuilder.cs
- querybuilder.cs
- EmptyStringExpandableObjectConverter.cs
- SignatureHelper.cs
- TypedReference.cs
- BaseDataBoundControl.cs
- ParameterElementCollection.cs
- PageAsyncTask.cs
- DotExpr.cs
- QueryStringParameter.cs
- InvokeMethodDesigner.xaml.cs
- PointAnimationUsingPath.cs
- ColorMap.cs
- JoinTreeNode.cs
- TdsParser.cs
- dsa.cs
- TabControl.cs
- ExceptionTrace.cs
- Utils.cs
- DockProviderWrapper.cs
- CommandHelpers.cs
- PropertyDescriptorCollection.cs
- RegionInfo.cs
- StatusBarPanel.cs
- BinaryWriter.cs
- ObjectManager.cs
- DataRelationPropertyDescriptor.cs
- WindowsRichEditRange.cs
- NativeConfigurationLoader.cs
- SingleResultAttribute.cs
- ComPersistableTypeElement.cs
- TextLineBreak.cs
- ChannelTerminatedException.cs
- XhtmlConformanceSection.cs
- BufferedMessageWriter.cs
- TextTrailingWordEllipsis.cs
- AtomServiceDocumentSerializer.cs
- DeliveryStrategy.cs
- State.cs
- DataGridViewBindingCompleteEventArgs.cs
- ColorAnimationUsingKeyFrames.cs
- RawMouseInputReport.cs
- EnlistmentTraceIdentifier.cs
- XPathDocument.cs
- TablePattern.cs
- InvokeMethodActivityDesigner.cs
- DeclarativeCatalogPart.cs
- Button.cs
- SqlMetaData.cs
- SqlDependency.cs
- Overlapped.cs
- WebPermission.cs
- SymmetricKeyWrap.cs
- OlePropertyStructs.cs
- SignatureToken.cs
- SecurityTokenResolver.cs
- DataGridRowEventArgs.cs
- SqlDataReader.cs
- Part.cs
- nulltextnavigator.cs
- Pkcs7Signer.cs
- WebPartPersonalization.cs
- CollaborationHelperFunctions.cs
- StaticFileHandler.cs
- XmlSchemaElement.cs
- lengthconverter.cs
- SqlSupersetValidator.cs
- StringFormat.cs
- FormViewDeletedEventArgs.cs
- Keywords.cs
- CachingHintValidation.cs
- SafeHandles.cs