From 4d631e7f1a5a5355d9561f31f00d2887c30955e3 Mon Sep 17 00:00:00 2001 From: tebjan Date: Fri, 28 Mar 2014 12:59:17 +0000 Subject: [PATCH] made svg transform collection a proper ICloneable --- Source/SvgElement.cs | 4 +--- Source/Transforms/SvgTransformCollection.cs | 26 ++++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Source/SvgElement.cs b/Source/SvgElement.cs index dbfab01..fbd7def 100644 --- a/Source/SvgElement.cs +++ b/Source/SvgElement.cs @@ -676,9 +676,7 @@ namespace Svg if (this.Transforms != null) { - newObj.Transforms = new SvgTransformCollection(); - foreach (var transform in this.Transforms) - newObj.Transforms.Add(transform.Clone() as SvgTransform); + newObj.Transforms = this.Transforms.Clone() as SvgTransformCollection; } foreach (var child in this.Children) diff --git a/Source/Transforms/SvgTransformCollection.cs b/Source/Transforms/SvgTransformCollection.cs index a7164b1..3b5acfb 100644 --- a/Source/Transforms/SvgTransformCollection.cs +++ b/Source/Transforms/SvgTransformCollection.cs @@ -8,12 +8,16 @@ using System.Text; namespace Svg.Transforms { [TypeConverter(typeof(SvgTransformConverter))] - public class SvgTransformCollection : List + public class SvgTransformCollection : List, ICloneable { - - public new void Add(SvgTransform item) + private void AddItem(SvgTransform item) { base.Add(item); + } + + public new void Add(SvgTransform item) + { + AddItem(item); OnTransformChanged(); } @@ -91,9 +95,19 @@ namespace Svg.Transforms var handler = TransformChanged; if(handler != null) { - handler(this, new AttributeEventArgs { Attribute = "transform", Value = this }); + //make a copy of the current value to avoid collection changed exceptions + handler(this, new AttributeEventArgs { Attribute = "transform", Value = this.Clone() }); } - } - + } + + public object Clone() + { + var result = new SvgTransformCollection(); + foreach (var trans in this) + { + result.AddItem(trans.Clone() as SvgTransform); + } + return result; + } } } -- GitLab