// niklas@protocol7.com // kevin@kevlindev.com // 100 using System; using System.Globalization; using System.Text.RegularExpressions; namespace SharpVectors.Dom.Svg { /// /// Rectangles are defined as consisting of a (x,y) coordinate pair /// identifying a minimum X value, a minimum Y value, and a width /// and height, which are usually constrained to be non-negative. /// public sealed class SvgRect : ISvgRect { #region Static Fields public static readonly SvgRect Empty = new SvgRect(0,0,0,0); #endregion #region Private Fields private double x; private double y; private double width; private double height; #endregion #region Constructors public SvgRect(double x, double y, double width, double height) { this.x = x; this.y = y; this.width = width; this.height = height; } public SvgRect(string str) { string replacedStr = Regex.Replace(str, @"(\s|,)+", ","); string[] tokens = replacedStr.Split(new char[]{','}); if (tokens.Length == 2) { this.x = 0; this.y = 0; this.width = SvgNumber.ParseNumber(tokens[0]); this.height = SvgNumber.ParseNumber(tokens[1]); } else if (tokens.Length == 4) { this.x = SvgNumber.ParseNumber(tokens[0]); this.y = SvgNumber.ParseNumber(tokens[1]); this.width = SvgNumber.ParseNumber(tokens[2]); this.height = SvgNumber.ParseNumber(tokens[3]); } else { throw new SvgException(SvgExceptionType.SvgInvalidValueErr, "Invalid SvgRect value: " + str); } } #endregion #region Public Properties public bool IsEmpty { get { return (width <= 0 || height <= 0); } } #endregion #region Public Methods public override string ToString() { return ("{X=" + this.X.ToString(CultureInfo.CurrentCulture) + ",Y=" + this.Y.ToString(CultureInfo.CurrentCulture) + ",Width=" + this.Width.ToString(CultureInfo.CurrentCulture) + ",Height=" + this.Height.ToString(CultureInfo.CurrentCulture) + "}"); } #endregion #region ISvgRect Interface public double X { get { return x; } set { x = value; } } public double Y { get { return y; } set { y = value; } } public double Width { get { return width; } set { width = value; } } public double Height { get { return height; } set { height = value; } } #endregion } }