Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Renderer.cs / 1305600 / 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); } ////// 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 ) { 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(target, channel, DUCE.ResourceType.TYPE_GENERICRENDERTARGET); targetHandle = target.Handle; DUCE.CompositionTarget.PrintInitialize( targetHandle, pRenderTarget, width, height, channel); root.CreateOrAddRefOnChannel(root, channel, DUCE.ResourceType.TYPE_VISUAL); rootHandle = root.Handle; DUCE.CompositionNode.SetTransform( rootHandle, deviceTransformHandle, channel); DUCE.CompositionTarget.SetRoot( targetHandle, rootHandle, channel); channel.CloseBatch(); channel.Commit(); // ----------------------------------------------------------- // Render the freshly created target. RenderContext renderContext = new RenderContext(); renderContext.Initialize(channel, rootHandle); visual.Precompute(); visual.Render(renderContext, 0); // ------------------------------------------------------------ // Flush the channel and present the composition target. channel.CloseBatch(); channel.Commit(); channel.Present(); MediaContext mediaContext = MediaContext.CurrentMediaContext; mediaContext.NotifySyncChannelMessage(channel); } finally { // ----------------------------------------------------------- // Clean up and release the root visual. if (!rootHandle.IsNull) { DUCE.CompositionNode.RemoveAllChildren( rootHandle, channel); ((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); } // ----------------------------------------------------------- // Flush the channel and present the composition target. channel.CloseBatch(); 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
- OleDbPropertySetGuid.cs
- Pair.cs
- XPathBinder.cs
- XmlSchemaAnyAttribute.cs
- DataControlPagerLinkButton.cs
- ScrollViewer.cs
- TraceContextEventArgs.cs
- TableLayoutRowStyleCollection.cs
- WpfPayload.cs
- WorkflowWebService.cs
- TreeNodeConverter.cs
- Visitor.cs
- ISO2022Encoding.cs
- TextTreeUndoUnit.cs
- SortKey.cs
- CoTaskMemHandle.cs
- Quaternion.cs
- altserialization.cs
- KeyGesture.cs
- InputLanguageManager.cs
- InheritedPropertyDescriptor.cs
- LinearKeyFrames.cs
- HScrollProperties.cs
- ComNativeDescriptor.cs
- PathTooLongException.cs
- TableProviderWrapper.cs
- TableCell.cs
- StrongNameUtility.cs
- ITreeGenerator.cs
- RectAnimationClockResource.cs
- CompositeActivityTypeDescriptorProvider.cs
- SecurityContext.cs
- ApplicationActivator.cs
- DefaultValueConverter.cs
- XmlJsonWriter.cs
- InputScopeConverter.cs
- QueryOperationResponseOfT.cs
- XmlEntity.cs
- SqlBuilder.cs
- QueryRewriter.cs
- DataGridViewRowConverter.cs
- ReadWriteSpinLock.cs
- QilCloneVisitor.cs
- RegexCaptureCollection.cs
- SqlNamer.cs
- DropTarget.cs
- DebugTracing.cs
- NetTcpSecurityElement.cs
- MembershipSection.cs
- RegexRunnerFactory.cs
- WebBaseEventKeyComparer.cs
- RegisterInfo.cs
- FastEncoderWindow.cs
- _ChunkParse.cs
- TableItemPattern.cs
- Subtree.cs
- XmlSchema.cs
- ContentValidator.cs
- ContextInformation.cs
- DrawingDrawingContext.cs
- ValueUnavailableException.cs
- DefaultAssemblyResolver.cs
- webproxy.cs
- TextRunProperties.cs
- PopOutPanel.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- TimerElapsedEvenArgs.cs
- TempFiles.cs
- ControlIdConverter.cs
- BrowserCapabilitiesFactoryBase.cs
- TreeViewImageGenerator.cs
- BaseValidator.cs
- WebPartMovingEventArgs.cs
- PixelFormats.cs
- TextBreakpoint.cs
- SqlInternalConnectionTds.cs
- ListDictionary.cs
- InfoCardService.cs
- HttpCachePolicyWrapper.cs
- CallbackValidatorAttribute.cs
- XmlDomTextWriter.cs
- ToolStripItemTextRenderEventArgs.cs
- WebHttpSecurityElement.cs
- WebPartEditorCancelVerb.cs
- XmlJsonReader.cs
- DynamicActivityProperty.cs
- RelationshipSet.cs
- Hashtable.cs
- SHA512CryptoServiceProvider.cs
- TheQuery.cs
- DataGridState.cs
- FileUpload.cs
- GregorianCalendar.cs
- HttpCapabilitiesBase.cs
- DbConnectionHelper.cs
- DataMisalignedException.cs
- RoleManagerSection.cs
- UserPreferenceChangedEventArgs.cs
- DataGridToolTip.cs
- StrokeNodeOperations2.cs