File: src\Framework\System\Windows\Controls\Primitives\HierarchicalVirtualizationItemDesiredSizes.cs
Project: wpf\PresentationFramework.csproj (PresentationFramework)
//---------------------------------------------------------------------------
//
// <copyright file="HierarchicalVirtualizationItemDesiredSizes.cs" company="Microsoft">
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
//
//---------------------------------------------------------------------------
 
namespace System.Windows.Controls
{
    /// <summary>
    /// struct used by IHierarchicalVirtualizationAndScrollInfo to represt the
    /// the cumulative desired sizes of items.
    /// </summary>
    public struct HierarchicalVirtualizationItemDesiredSizes
    {
        #region Constructors
 
        public HierarchicalVirtualizationItemDesiredSizes(Size logicalSize,
            Size logicalSizeInViewport,
            Size logicalSizeBeforeViewport,
            Size logicalSizeAfterViewport,
            Size pixelSize,
            Size pixelSizeInViewport,
            Size pixelSizeBeforeViewport,
            Size pixelSizeAfterViewport)
        {
            _logicalSize = logicalSize;
            _logicalSizeInViewport = logicalSizeInViewport;
            _logicalSizeBeforeViewport = logicalSizeBeforeViewport;
            _logicalSizeAfterViewport = logicalSizeAfterViewport;
            _pixelSize = pixelSize;
            _pixelSizeInViewport = pixelSizeInViewport;
            _pixelSizeBeforeViewport = pixelSizeBeforeViewport;
            _pixelSizeAfterViewport = pixelSizeAfterViewport;
        }
 
        #endregion
 
        #region Public Properties
 
        /// <summary>
        /// Describes the items size in logical units and is needed to 
        /// support item scrolling in hierarchical scenarios. (Eg. TreeView, Grouping)
        /// </summary>
        public Size LogicalSize
        {
            get
            {
                return _logicalSize;
            }
        }
 
        /// <summary>
        /// Describes the item size in viewport in logical units
        /// </summary>
        public Size LogicalSizeInViewport
        {
            get
            {
                return _logicalSizeInViewport;
            }
        }
 
        /// <summary>
        /// Describes the item size in cache before viewport in logical units
        /// </summary>
        public Size LogicalSizeBeforeViewport
        {
            get
            {
                return _logicalSizeBeforeViewport;
            }
        }
 
        /// <summary>
        /// Describes the item size in cache after viewport in logical units
        /// </summary>
        public Size LogicalSizeAfterViewport
        {
            get
            {
                return _logicalSizeAfterViewport;
            }
        }
 
        /// <summary>
        /// Describes the item size in pixel units
        /// </summary>
        public Size PixelSize
        {
            get
            {
                return _pixelSize;
            }
        }
 
        /// <summary>
        /// Describes the item size in viewport in pixel units
        /// </summary>
        public Size PixelSizeInViewport
        {
            get
            {
                return _pixelSizeInViewport;
            }
        }
 
        /// <summary>
        /// Describes the item size in cache before viewport in pixel units
        /// </summary>
        public Size PixelSizeBeforeViewport
        {
            get
            {
                return _pixelSizeBeforeViewport;
            }
        }
 
        /// <summary>
        /// Describes the item size in cache after viewport in pixel units.
        /// </summary>
        public Size PixelSizeAfterViewport
        {
            get
            {
                return _pixelSizeAfterViewport;
            }
        }
 
        #endregion
 
        #region Public Methods
 
        /// <summary>
        /// Overloaded operator, compares 2 HierarchicalVirtualizationItemDesiredSizes's.
        /// </summary>
        /// <param name="itemDesiredSizes1">first HierarchicalVirtualizationItemDesiredSizes to compare.</param>
        /// <param name="itemDesiredSizes2">second HierarchicalVirtualizationItemDesiredSizes to compare.</param>
        /// <returns>true if specified HierarchicalVirtualizationItemDesiredSizess have same logical 
        /// and pixel sizes.</returns>
        public static bool operator ==(HierarchicalVirtualizationItemDesiredSizes itemDesiredSizes1, HierarchicalVirtualizationItemDesiredSizes itemDesiredSizes2)
        {
            return ((itemDesiredSizes1.LogicalSize == itemDesiredSizes2.LogicalSize) &&
                (itemDesiredSizes1.LogicalSizeInViewport == itemDesiredSizes2.LogicalSizeInViewport) &&
                (itemDesiredSizes1.LogicalSizeBeforeViewport == itemDesiredSizes2.LogicalSizeBeforeViewport) &&
                (itemDesiredSizes1.LogicalSizeAfterViewport == itemDesiredSizes2.LogicalSizeAfterViewport) &&
                (itemDesiredSizes1.PixelSize == itemDesiredSizes2.PixelSize) &&
                (itemDesiredSizes1.PixelSizeInViewport == itemDesiredSizes2.PixelSizeInViewport) &&
                (itemDesiredSizes1.PixelSizeBeforeViewport == itemDesiredSizes2.PixelSizeBeforeViewport) &&
                (itemDesiredSizes1.PixelSizeAfterViewport == itemDesiredSizes2.PixelSizeAfterViewport));
        }
 
        /// <summary>
        /// Overloaded operator, compares 2 HierarchicalVirtualizationItemDesiredSizes's.
        /// </summary>
        /// <param name="itemDesiredSizes1">first HierarchicalVirtualizationItemDesiredSizes to compare.</param>
        /// <param name="itemDesiredSizes2">second HierarchicalVirtualizationItemDesiredSizes to compare.</param>
        /// <returns>true if specified HierarchicalVirtualizationItemDesiredSizess have either different logical or 
        /// pixel sizes.</returns>
        public static bool operator !=(HierarchicalVirtualizationItemDesiredSizes itemDesiredSizes1, HierarchicalVirtualizationItemDesiredSizes itemDesiredSizes2)
        {
            return ((itemDesiredSizes1.LogicalSize != itemDesiredSizes2.LogicalSize) ||
                (itemDesiredSizes1.LogicalSizeInViewport != itemDesiredSizes2.LogicalSizeInViewport) ||
                (itemDesiredSizes1.LogicalSizeBeforeViewport != itemDesiredSizes2.LogicalSizeBeforeViewport) ||
                (itemDesiredSizes1.LogicalSizeAfterViewport != itemDesiredSizes2.LogicalSizeAfterViewport) ||
                (itemDesiredSizes1.PixelSize != itemDesiredSizes2.PixelSize) ||
                (itemDesiredSizes1.PixelSizeInViewport != itemDesiredSizes2.PixelSizeInViewport) ||
                (itemDesiredSizes1.PixelSizeBeforeViewport != itemDesiredSizes2.PixelSizeBeforeViewport) ||
                (itemDesiredSizes1.PixelSizeAfterViewport != itemDesiredSizes2.PixelSizeAfterViewport));
        }
 
        /// <summary>
        /// Compares this instance of HierarchicalVirtualizationItemDesiredSizes with another object.
        /// </summary>
        /// <param name="oCompare">Reference to an object for comparison.</param>
        /// <returns><c>true</c>if this HierarchicalVirtualizationItemDesiredSizes instance has the same logical 
        /// and pixel sizes as oCompare.</returns>
        override public bool Equals(object oCompare)
        {
            if (oCompare is HierarchicalVirtualizationItemDesiredSizes)
            {
                HierarchicalVirtualizationItemDesiredSizes itemDesiredSizes = (HierarchicalVirtualizationItemDesiredSizes)oCompare;
                return (this == itemDesiredSizes);
            }
            else
                return false;
        }
 
        /// <summary>
        /// Compares this instance of HierarchicalVirtualizationItemDesiredSizes with another instance.
        /// </summary>
        /// <param name="comparisonItemSizes">Header desired size instance to compare.</param>
        /// <returns><c>true</c>if this HierarchicalVirtualizationItemDesiredSizes instance has the same logical 
        /// and pixel sizes as comparisonHeaderSizes.</returns>
        public bool Equals(HierarchicalVirtualizationItemDesiredSizes comparisonItemSizes)
        {
            return (this == comparisonItemSizes);
        }
 
        /// <summary>
        /// <see cref="Object.GetHashCode"/>
        /// </summary>
        /// <returns><see cref="Object.GetHashCode"/></returns>
        public override int GetHashCode()
        {
            return (_logicalSize.GetHashCode() ^
                _logicalSizeInViewport.GetHashCode() ^
                _logicalSizeBeforeViewport.GetHashCode() ^
                _logicalSizeAfterViewport.GetHashCode() ^
                _pixelSize.GetHashCode() ^
                _pixelSizeInViewport.GetHashCode() ^
                _pixelSizeBeforeViewport.GetHashCode() ^
                _pixelSizeAfterViewport.GetHashCode());
        }
 
        #endregion
 
        #region Data
 
        Size _logicalSize;
        Size _logicalSizeInViewport;
        Size _logicalSizeBeforeViewport;
        Size _logicalSizeAfterViewport;
        Size _pixelSize;
        Size _pixelSizeInViewport;
        Size _pixelSizeBeforeViewport;
        Size _pixelSizeAfterViewport;
 
        #endregion
    }
}