SvgTransformCollection.cs 2.21 KB
Newer Older
davescriven's avatar
davescriven committed
1
2
using System;
using System.Collections.Generic;
3
4
using System.ComponentModel;
using System.Drawing.Drawing2D;
davescriven's avatar
davescriven committed
5
6
7
8
9
10
11
12
using System.Linq;
using System.Text;

namespace Svg.Transforms
{
    [TypeConverter(typeof(SvgTransformConverter))]
    public class SvgTransformCollection : List<SvgTransform>
    {
Tebjan Halm's avatar
Tebjan Halm committed
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
	
    	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();
    	}
    	
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    	/// <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;
    	}
59
60
61

		public override bool Equals(object obj)
		{
Tebjan Halm's avatar
Tebjan Halm committed
62
			if (this.Count == 0 && this.Count == base.Count) //default will be an empty list 
63
64
65
				return true;
			return base.Equals(obj);
		}
Tebjan Halm's avatar
Tebjan Halm committed
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
		
		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 });
        	}
        }
92
    		
davescriven's avatar
davescriven committed
93
94
    }
}