Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media / Effects / BitmapEffectvisualstate.cs / 2 / BitmapEffectvisualstate.cs
//------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2005 // // File: BitmapEffectVisualState.cs //----------------------------------------------------------------------------- using System; using System.Windows.Threading; using MS.Win32; using System.Security; using System.Security.Permissions; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using System.Windows.Media.Imaging; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using MS.Internal; using System.Resources; using MS.Utility; using System.Runtime.InteropServices; using MS.Internal.PresentationCore; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace System.Windows.Media.Effects { ////// This class is used to realize the content of the /// visual if a bitmap effect is applied to it /// internal class BitmapEffectContent : IRealizationContextClient { Visual _visual; DUCE.Channel _channel; public BitmapEffectContent(Visual v, RealizationContext ctx) { _visual = v; _channel = ctx.Channel; } public void ExecuteRealizationsUpdate() { Visual.BitmapEffectStateField.GetValue(_visual).RenderBitmapEffect(_visual, _channel); } } ////// /// internal class BitmapEffectVisualState : BitmapEffectState { public BitmapEffectVisualState() { } public BitmapEffectDrawing BitmapEffectDrawing { get { if (_bitmapEffectDrawing == null) { _bitmapEffectDrawing = new BitmapEffectDrawing(); } return _bitmapEffectDrawing; } set { _bitmapEffectDrawing = null; } } ////// Remove the content from the composition node /// /// /// internal void FreeContent(Visual visual, DUCE.Channel channel) { SetContent(null, visual, channel); _bitmapEffectDrawing = null; } ////// This sets the content of the visual if there is a /// bitmap effect applied to it /// /// drawing content /// The visual /// The channel internal void SetContent(IDrawingContent content, Visual visual, DUCE.Channel channel) { DUCE.ResourceHandle visualHandle = ((DUCE.IResource)visual).GetHandle(channel); if (content != null) { content.AddRefOnChannel(channel); DUCE.CompositionNode.SetContent( visualHandle, content.GetHandle(channel), channel); // it is ok to release here, because the unmanaged code // holds a reference to the content and will release it // when the parent object is released or the content // is reset to null content.ReleaseOnChannel(channel); } else { Debug.Assert(visual.IsOnChannel(channel)); DUCE.CompositionNode.SetContent( visualHandle, DUCE.ResourceHandle.Null, channel); } } ////// This methods renders the visual to a bitmap, then applies /// the effect to the rendered bitmap, and sets the content /// of the visual to be the resulting bitmap /// /// The visual to apply the effect to /// The current channels internal void RenderBitmapEffect(Visual visual, DUCE.Channel channel) { if (_bitmapEffect == null) throw new InvalidOperationException(SR.Get(SRID.Visual_No_Effect, null)); Debug.Assert(channel != null); BitmapEffectDrawing.UpdateTransformAndDrawingLists(true); bool effectRendered = false; int drawingsCount = BitmapEffectDrawing.Drawings.Count; for (int iTransform = BitmapEffectDrawing.WorldTransforms.Count - 1; iTransform >= drawingsCount; iTransform--) { Matrix finalTransform = BitmapEffectDrawing.WorldTransforms[iTransform].Value; BitmapSource outputImage = GetEffectOutput(visual, ref _renderBitmap, finalTransform, BitmapEffectDrawing.WindowClip, out finalTransform); if (outputImage != null) { // if there was no group for that transform create one // and update it, otherwise we don't need to do anything it // NOTE: this is ok to update here since it is not // connected to the visual tree DrawingGroup effectGroup = new DrawingGroup(); effectGroup.Children.Add( new ImageDrawing(outputImage, new Rect(0, 0, outputImage.Width, outputImage.Height))); effectGroup.Transform = new MatrixTransform(finalTransform); BitmapEffectDrawing.Drawings.Insert(drawingsCount, effectGroup); effectRendered = true; } else { BitmapEffectDrawing.WorldTransforms.RemoveAt(iTransform); } } if (BitmapEffectDrawing.Drawings.Count > 0 && effectRendered == true) { SetContent(BitmapEffectDrawing, visual, channel); } visual.SetFlags(channel, false, VisualProxyFlags.IsBitmapEffectDirty); BitmapEffectDrawing.ScheduleForUpdates = true; } #region Private Fields BitmapEffectDrawing _bitmapEffectDrawing; RenderTargetBitmap _renderBitmap; #endregion } ////// This class is used to store the user provided bitmap effect data on Visual. /// It is necessary to implement the emulation layer for some legacy effects on top /// of the new pipline. /// internal class BitmapEffectData { private BitmapEffect _bitmapEffect; private BitmapEffectInput _bitmapEffectInput; public BitmapEffectData() {} public BitmapEffect BitmapEffect { get { return _bitmapEffect; } set { _bitmapEffect = value; } } public BitmapEffectInput BitmapEffectInput { get { return _bitmapEffectInput; } set { _bitmapEffectInput = value; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, 2005 // // File: BitmapEffectVisualState.cs //----------------------------------------------------------------------------- using System; using System.Windows.Threading; using MS.Win32; using System.Security; using System.Security.Permissions; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using System.Windows.Media.Imaging; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using MS.Internal; using System.Resources; using MS.Utility; using System.Runtime.InteropServices; using MS.Internal.PresentationCore; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace System.Windows.Media.Effects { ////// This class is used to realize the content of the /// visual if a bitmap effect is applied to it /// internal class BitmapEffectContent : IRealizationContextClient { Visual _visual; DUCE.Channel _channel; public BitmapEffectContent(Visual v, RealizationContext ctx) { _visual = v; _channel = ctx.Channel; } public void ExecuteRealizationsUpdate() { Visual.BitmapEffectStateField.GetValue(_visual).RenderBitmapEffect(_visual, _channel); } } ////// /// internal class BitmapEffectVisualState : BitmapEffectState { public BitmapEffectVisualState() { } public BitmapEffectDrawing BitmapEffectDrawing { get { if (_bitmapEffectDrawing == null) { _bitmapEffectDrawing = new BitmapEffectDrawing(); } return _bitmapEffectDrawing; } set { _bitmapEffectDrawing = null; } } ////// Remove the content from the composition node /// /// /// internal void FreeContent(Visual visual, DUCE.Channel channel) { SetContent(null, visual, channel); _bitmapEffectDrawing = null; } ////// This sets the content of the visual if there is a /// bitmap effect applied to it /// /// drawing content /// The visual /// The channel internal void SetContent(IDrawingContent content, Visual visual, DUCE.Channel channel) { DUCE.ResourceHandle visualHandle = ((DUCE.IResource)visual).GetHandle(channel); if (content != null) { content.AddRefOnChannel(channel); DUCE.CompositionNode.SetContent( visualHandle, content.GetHandle(channel), channel); // it is ok to release here, because the unmanaged code // holds a reference to the content and will release it // when the parent object is released or the content // is reset to null content.ReleaseOnChannel(channel); } else { Debug.Assert(visual.IsOnChannel(channel)); DUCE.CompositionNode.SetContent( visualHandle, DUCE.ResourceHandle.Null, channel); } } ////// This methods renders the visual to a bitmap, then applies /// the effect to the rendered bitmap, and sets the content /// of the visual to be the resulting bitmap /// /// The visual to apply the effect to /// The current channels internal void RenderBitmapEffect(Visual visual, DUCE.Channel channel) { if (_bitmapEffect == null) throw new InvalidOperationException(SR.Get(SRID.Visual_No_Effect, null)); Debug.Assert(channel != null); BitmapEffectDrawing.UpdateTransformAndDrawingLists(true); bool effectRendered = false; int drawingsCount = BitmapEffectDrawing.Drawings.Count; for (int iTransform = BitmapEffectDrawing.WorldTransforms.Count - 1; iTransform >= drawingsCount; iTransform--) { Matrix finalTransform = BitmapEffectDrawing.WorldTransforms[iTransform].Value; BitmapSource outputImage = GetEffectOutput(visual, ref _renderBitmap, finalTransform, BitmapEffectDrawing.WindowClip, out finalTransform); if (outputImage != null) { // if there was no group for that transform create one // and update it, otherwise we don't need to do anything it // NOTE: this is ok to update here since it is not // connected to the visual tree DrawingGroup effectGroup = new DrawingGroup(); effectGroup.Children.Add( new ImageDrawing(outputImage, new Rect(0, 0, outputImage.Width, outputImage.Height))); effectGroup.Transform = new MatrixTransform(finalTransform); BitmapEffectDrawing.Drawings.Insert(drawingsCount, effectGroup); effectRendered = true; } else { BitmapEffectDrawing.WorldTransforms.RemoveAt(iTransform); } } if (BitmapEffectDrawing.Drawings.Count > 0 && effectRendered == true) { SetContent(BitmapEffectDrawing, visual, channel); } visual.SetFlags(channel, false, VisualProxyFlags.IsBitmapEffectDirty); BitmapEffectDrawing.ScheduleForUpdates = true; } #region Private Fields BitmapEffectDrawing _bitmapEffectDrawing; RenderTargetBitmap _renderBitmap; #endregion } ////// This class is used to store the user provided bitmap effect data on Visual. /// It is necessary to implement the emulation layer for some legacy effects on top /// of the new pipline. /// internal class BitmapEffectData { private BitmapEffect _bitmapEffect; private BitmapEffectInput _bitmapEffectInput; public BitmapEffectData() {} public BitmapEffect BitmapEffect { get { return _bitmapEffect; } set { _bitmapEffect = value; } } public BitmapEffectInput BitmapEffectInput { get { return _bitmapEffectInput; } set { _bitmapEffectInput = value; } } } } // 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
- ResourceContainer.cs
- webbrowsersite.cs
- PartialCachingControl.cs
- RegistryPermission.cs
- ObjectStateManager.cs
- XmlSerializerFormatAttribute.cs
- UnsafeNativeMethodsPenimc.cs
- AdjustableArrowCap.cs
- DateBoldEvent.cs
- XsltOutput.cs
- ProfileSettingsCollection.cs
- PointUtil.cs
- MethodBuilderInstantiation.cs
- TreeViewImageGenerator.cs
- EventBuilder.cs
- CachedPathData.cs
- SuppressedPackageProperties.cs
- ProfileGroupSettings.cs
- SafeCertificateStore.cs
- PropertyTab.cs
- StrongNameMembershipCondition.cs
- PropertyEmitterBase.cs
- XmlSchemaAttributeGroup.cs
- XXXOnTypeBuilderInstantiation.cs
- PeerCollaboration.cs
- ConnectionStringsExpressionBuilder.cs
- _RequestCacheProtocol.cs
- SqlBooleanMismatchVisitor.cs
- SelectionItemProviderWrapper.cs
- ParserContext.cs
- DefaultTraceListener.cs
- EventLogPermission.cs
- Deserializer.cs
- SetterTriggerConditionValueConverter.cs
- Comparer.cs
- Label.cs
- FlowDocumentReaderAutomationPeer.cs
- _TLSstream.cs
- GridViewRow.cs
- PersonalizableAttribute.cs
- _Connection.cs
- ColorConverter.cs
- UnsafeNativeMethods.cs
- DataFormats.cs
- NumericUpDownAcceleration.cs
- Privilege.cs
- ProgressBarAutomationPeer.cs
- ExceptionUtil.cs
- DelegatingTypeDescriptionProvider.cs
- Error.cs
- DocumentSequenceHighlightLayer.cs
- LinqTreeNodeEvaluator.cs
- RelationshipEndCollection.cs
- OutputCacheProfileCollection.cs
- XamlFilter.cs
- ComponentDispatcher.cs
- PlatformNotSupportedException.cs
- SizeAnimationBase.cs
- TrackingLocationCollection.cs
- XmlElementAttributes.cs
- TextAdaptor.cs
- X509Extension.cs
- StringStorage.cs
- InstanceNormalEvent.cs
- CachedBitmap.cs
- DeflateStream.cs
- XamlStream.cs
- MulticastNotSupportedException.cs
- ModelTreeEnumerator.cs
- WindowsClientElement.cs
- XmlSchemaDatatype.cs
- LoginDesignerUtil.cs
- OleDbWrapper.cs
- Statements.cs
- DataServiceKeyAttribute.cs
- SiteMapHierarchicalDataSourceView.cs
- COM2PictureConverter.cs
- SafeProcessHandle.cs
- smtppermission.cs
- UnconditionalPolicy.cs
- PageSetupDialog.cs
- SwitchLevelAttribute.cs
- PostBackOptions.cs
- PolicyException.cs
- CatalogPartCollection.cs
- XmlSchemaSimpleTypeList.cs
- DataBoundControlHelper.cs
- PassportAuthentication.cs
- ChannelListenerBase.cs
- SystemUnicastIPAddressInformation.cs
- XmlSchemaComplexContentRestriction.cs
- CollectionViewSource.cs
- RayHitTestParameters.cs
- MetadataExchangeBindings.cs
- StringAttributeCollection.cs
- WebPartEditVerb.cs
- LZCodec.cs
- LoginName.cs
- Configuration.cs
- SchemaConstraints.cs