diff --git a/Source/Document Structure/SvgGroup.cs b/Source/Document Structure/SvgGroup.cs index 52ff11a5a14776962f07b630f77b02c488efc06c..c6e2f7de06303bf4378a949c824889ae288bd634 100644 --- a/Source/Document Structure/SvgGroup.cs +++ b/Source/Document Structure/SvgGroup.cs @@ -26,7 +26,7 @@ namespace Svg [SvgAttribute("fill")] public override SvgPaintServer Fill { - get { return (this.Attributes["Fill"] == null) ? new SvgColourServer(Color.Transparent) : (SvgPaintServer)this.Attributes["Fill"]; } + get { return (this.Attributes["Fill"] == null) ? null : (SvgPaintServer)this.Attributes["Fill"]; } set { this.Attributes["Fill"] = value; } } diff --git a/Source/Painting/SvgColourServer.cs b/Source/Painting/SvgColourServer.cs index 8f2bcf76b112f3a1699b1a2c0594c7e9204acfc3..9afddffb8c3b476313888e09de87e12998e67abf 100644 --- a/Source/Painting/SvgColourServer.cs +++ b/Source/Painting/SvgColourServer.cs @@ -67,7 +67,12 @@ namespace Svg if (objColor == null) return false; - return this.Colour.ToArgb() == objColor.Colour.ToArgb(); + return this.GetHashCode() == objColor.GetHashCode(); + } + + public override int GetHashCode() + { + return _colour.GetHashCode(); } } } diff --git a/Source/SvgElement.cs b/Source/SvgElement.cs index 654a9e54a95dcb952b395f99104b5ef6e8a4dfa3..a959e101a354626d9200c6f9f0b8c0bf90b58b8b 100644 --- a/Source/SvgElement.cs +++ b/Source/SvgElement.cs @@ -350,12 +350,13 @@ namespace Svg var forceWrite = false; if ((attr.Attribute.Name == "fill") && (Parent != null)) { - var parentValue = ResolveParentAttributeValue(attr.Attribute.Name); - if (parentValue != null) + object parentValue; + if (TryResolveParentAttributeValue(attr.Attribute.Name, out parentValue)) { - if (parentValue.Equals(propertyValue)) + if ((parentValue == propertyValue) + || ((parentValue != null) && parentValue.Equals(propertyValue))) continue; - + forceWrite = true; } } @@ -370,7 +371,7 @@ namespace Svg writer.WriteAttributeString(attr.Attribute.NamespaceAndName, value); } } - else if (attr.Attribute.Name == "fill") //if fill equals null, write 'none' + else if(attr.Attribute.Name == "fill") //if fill equals null, write 'none' { string value = (string)attr.Property.Converter.ConvertTo(propertyValue, typeof(string)); writer.WriteAttributeString(attr.Attribute.NamespaceAndName, value); @@ -385,25 +386,27 @@ namespace Svg } } - private object ResolveParentAttributeValue(string attributeKey) + private bool TryResolveParentAttributeValue(string attributeKey, out object parentAttributeValue) { - attributeKey = char.ToUpper(attributeKey[0]) + attributeKey.Substring(1); + parentAttributeValue = null; - object parentValue = null; + attributeKey = char.ToUpper(attributeKey[0]) + attributeKey.Substring(1); var currentParent = Parent; + var resolved = false; while (currentParent != null) { if (currentParent.Attributes.ContainsKey(attributeKey)) { - parentValue = currentParent.Attributes[attributeKey]; - if (parentValue != null) + resolved = true; + parentAttributeValue = currentParent.Attributes[attributeKey]; + if (parentAttributeValue != null) break; } currentParent = currentParent.Parent; } - return parentValue; + return resolved; } protected virtual void Write(XmlTextWriter writer)