File: Core\CSharp\System\Windows\Media\ContainerVisual.cs
Project: wpf\src\PresentationCore.csproj (PresentationCore)
//------------------------------------------------------------------------------
//  Microsoft Avalon
//  Copyright (c) Microsoft Corporation, 2001
//
//  File:       ContainerVisual.cs
//
//  History: Microsoft: 05/28/2003
//              Created it.
//------------------------------------------------------------------------------
 
using System;
using System.ComponentModel;
using System.Windows.Threading;
using System.Windows.Media;
using System.Windows.Media.Effects;
using System.Diagnostics;
using System.Collections;
using MS.Internal;
using System.Resources;
using System.Runtime.InteropServices;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
 
namespace System.Windows.Media
{
    /// <summary>
    /// A ContainerVisual is a Container for other Visuals.
    /// </summary>
    public class ContainerVisual : Visual
    {
        /// <summary>
        /// Ctor ContainerVisual.
        /// </summary>
        public ContainerVisual()
        {
            _children = new VisualCollection(this);
        }
 
        // ------------------------------------------------------------------------------------------
        // Publicly re-exposed VisualTreeHelper interfaces.
        // ------------------------------------------------------------------------------------------
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public VisualCollection Children
        {
            get
            { 
                VerifyAPIReadOnly();
 
                return _children;
            }
        }
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public DependencyObject Parent
        {
            get { return base.VisualParent; }
        }
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public Geometry Clip
        {
            get { return base.VisualClip; }
            set { base.VisualClip = value; }
        }
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public double Opacity
        {
            get { return base.VisualOpacity; }
            set { base.VisualOpacity = value; }
        }
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public Brush OpacityMask
        {
            get { return base.VisualOpacityMask;  }
            set { base.VisualOpacityMask = value; }
        }
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public CacheMode CacheMode
        {
            get { return base.VisualCacheMode; }
            set { base.VisualCacheMode = value; }
        }
        
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        [Obsolete(MS.Internal.Media.VisualTreeUtils.BitmapEffectObsoleteMessage)]
        public BitmapEffect BitmapEffect
        {
            get { return base.VisualBitmapEffect; }
            set { base.VisualBitmapEffect = value; }
        }
 
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        [Obsolete(MS.Internal.Media.VisualTreeUtils.BitmapEffectObsoleteMessage)]
        public BitmapEffectInput BitmapEffectInput
        {
            get { return base.VisualBitmapEffectInput; }
            set { base.VisualBitmapEffectInput = value; }
        }
 
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        public Effect Effect
        {
            get { return base.VisualEffect; }
            set { base.VisualEffect = value; }
        }
 
        /// <summary>
        /// Gets or sets X- (vertical) guidelines on this Visual.
        /// </summary>
        [DefaultValue(null)]
        public DoubleCollection XSnappingGuidelines
        {
            get { return base.VisualXSnappingGuidelines; }
            set { base.VisualXSnappingGuidelines = value; }
        }
 
        /// <summary>
        /// Gets or sets Y- (vertical) guidelines on this Visual.
        /// </summary>
        [DefaultValue(null)]
        public DoubleCollection YSnappingGuidelines
        {
            get { return base.VisualYSnappingGuidelines; }
            set { base.VisualYSnappingGuidelines = value; }
        }        
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        new public HitTestResult HitTest(Point point)
        {
            return base.HitTest(point);
        }
 
        /// <summary>
        /// Re-exposes the Visual base class's corresponding VisualTreeHelper implementation as public method.
        /// </summary>
        new public void HitTest(HitTestFilterCallback filterCallback, HitTestResultCallback resultCallback, HitTestParameters hitTestParameters)
        {
            base.HitTest(filterCallback, resultCallback, hitTestParameters);
        }
 
        /// <summary>
        /// VisualContentBounds returns the bounding box for the contents of this Visual.
        /// </summary>
        public Rect ContentBounds
        {
            get
            {
                return base.VisualContentBounds;
            }
        }
 
        /// <summary>
        /// Gets or sets the Transform property.
        /// </summary>
        public Transform Transform
        {
            get
            {
                return base.VisualTransform;
            }
            set
            {
                base.VisualTransform = value;
            }            
        }
 
 
        /// <summary>
        /// Gets or sets the Offset property.
        /// </summary>
        public Vector Offset
        {
            get
            {
                return base.VisualOffset;
            }
            set
            {
                base.VisualOffset = value;
            }
        }       
 
        /// <summary>
        /// DescendantBounds returns the union of all of the content bounding
        /// boxes for all of the descendants of the current visual, but not including
        /// the contents of the current visual.
        /// </summary>
        public Rect DescendantBounds
        {
            get
            {
                return base.VisualDescendantBounds;
            }
        }
 
        // ------------------------------------------------------------------------------------------
        // Protected methods
        // ------------------------------------------------------------------------------------------
 
        /// <summary>
        ///   Derived class must implement to support Visual children. The method must return
        ///    the child at the specified index. Index must be between 0 and GetVisualChildrenCount-1.
        ///
        ///    By default a Visual does not have any children.
        ///
        ///  Remark: 
        ///       During this virtual call it is not valid to modify the Visual tree. 
        /// </summary>
        protected sealed override Visual GetVisualChild(int index)
        {            
            //VisualCollection does the range check for index
            return _children[index];
        }
        
        /// <summary>
        ///  Derived classes override this property to enable the Visual code to enumerate 
        ///  the Visual children. Derived classes need to return the number of children
        ///  from this method.
        ///
        ///    By default a Visual does not have any children.
        ///
        ///  Remark: During this virtual method the Visual tree must not be modified.
        /// </summary>        
        protected sealed override int VisualChildrenCount
        {           
            get 
            { 
                return _children.Count; 
            }
        }
 
        // ------------------------------------------------------------------------------------------
        // Private fields
        // ------------------------------------------------------------------------------------------
 
        private readonly VisualCollection _children;
    }
}