using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Drawing2D; using System.Linq; using System.Text; namespace Svg.Transforms { [TypeConverter(typeof(SvgTransformConverter))] public class SvgTransformCollection : List<SvgTransform> { public new void Add(SvgTransform item) { base.Add(item); OnTransformChanged(); } public new void AddRange(IEnumerable<SvgTransform> collection) { base.AddRange(collection); OnTransformChanged(); } public new void Remove(SvgTransform item) { base.Remove(item); OnTransformChanged(); } public new void RemoveAt(int index) { base.RemoveAt(index); OnTransformChanged(); } /// <summary> /// Multiplies all matrices /// </summary> /// <returns>The result of all transforms</returns> public Matrix GetMatrix() { var transformMatrix = new Matrix(); // Return if there are no transforms if (this.Count == 0) { return transformMatrix; } foreach (SvgTransform transformation in this) { transformMatrix.Multiply(transformation.Matrix); } return transformMatrix; } public override bool Equals(object obj) { if (this.Count == 0 && this.Count == base.Count) //default will be an empty list return true; return base.Equals(obj); } public new SvgTransform this[int i] { get { return base[i]; } set { var oldVal = base[i]; base[i] = value; if(oldVal != value) OnTransformChanged(); } } /// <summary> /// Fired when an SvgTransform has changed /// </summary> public event EventHandler<AttributeEventArgs> TransformChanged; protected void OnTransformChanged() { var handler = TransformChanged; if(handler != null) { handler(this, new AttributeEventArgs { Attribute = "transform", Value = this }); } } } }