File: Core\CSharp\system\windows\TextDecoration.cs
Project: wpf\src\PresentationCore.csproj (PresentationCore)
//---------------------------------------------------------------------------
//
// <copyright file=GlyphInfoList.cs company=Microsoft>
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
// 
//
// Description: TextDecoration class
//
// History:  
//  10/14/2004: Garyyang Created the file 
//
//---------------------------------------------------------------------------
using System;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Markup;
 
namespace System.Windows
{
    /// <summary>
    /// A text decoration 
    /// </summary>
    [Localizability(LocalizationCategory.None)]
    public sealed partial class TextDecoration : Animatable
    {
        /// <summary>
        /// Constructor
        /// </summary>
        public TextDecoration()
        {
        }      
 
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="location">The location of the text decoration</param>
        /// <param name="pen">The pen used to draw this text decoration</param>
        /// <param name="penOffset">The offset of this text decoration to the location</param>
        /// <param name="penOffsetUnit">The unit of the offset</param>
        /// <param name="penThicknessUnit">The unit of the thickness of the pen</param>
        public TextDecoration(
            TextDecorationLocation location,
            Pen                    pen,
            double                 penOffset,
            TextDecorationUnit     penOffsetUnit,
            TextDecorationUnit     penThicknessUnit
            )
        {
            Location         = location;
            Pen              = pen;
            PenOffset        = penOffset;
            PenOffsetUnit    = penOffsetUnit;
            PenThicknessUnit = penThicknessUnit;        
        }      
 
 
        /// <summary>
        /// Compare the values of thhe properties in the two TextDecoration objects
        /// </summary>
        /// <param name="textDecoration">The TextDecoration object to be compared against</param>
        /// <returns>True if their property values are equal. False otherwise</returns>
        /// <remarks>
        /// The method doesn't check "full" equality as it can not take into account of all the possible 
        /// values associated with the DependencyObject,such as Animation, DataBinding and Attached property. 
        /// It only compares the public properties to serve the specific Framework's needs in inline property 
        /// management and Editing serialization. 
        /// </remarks>        
        internal bool ValueEquals(TextDecoration textDecoration)
        {
            if (textDecoration == null)
                return false; // o is either null or not a TextDecoration object.
 
            if (this == textDecoration) 
                return true; // reference equality.
               
            return (    
               Location         == textDecoration.Location 
            && PenOffset        == textDecoration.PenOffset 
            && PenOffsetUnit    == textDecoration.PenOffsetUnit 
            && PenThicknessUnit == textDecoration.PenThicknessUnit
            && (Pen == null ? textDecoration.Pen == null : Pen.Equals( textDecoration.Pen)) 
            );
        }
    }
}