From a17b363b07493b59d58ade370e41e4ee0e313064 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Thu, 13 Jan 2022 02:35:10 +0800 Subject: [PATCH 01/12] Take into account of parent transforms --- Source/Text/SvgTextBase.Drawing.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/Text/SvgTextBase.Drawing.cs b/Source/Text/SvgTextBase.Drawing.cs index 88fcbf787..fe832429e 100644 --- a/Source/Text/SvgTextBase.Drawing.cs +++ b/Source/Text/SvgTextBase.Drawing.cs @@ -26,11 +26,18 @@ public override RectangleF Bounds continue; path.AddPath(elem.Path(null), false); } - if (Transforms == null || Transforms.Count == 0) + Matrix matrix; + if (Transforms == null) + { + // This is an SvgTextSpan which does not support the transform attribute, but parent transforms still apply. + matrix = Parents.First(p => p.Transforms != null).Transforms.GetMatrix(); + } + else if (Transforms.Count == 0) return path.GetBounds(); + else matrix = Transforms.GetMatrix(); using (path = (GraphicsPath)path.Clone()) - using (var matrix = Transforms.GetMatrix()) + using (matrix) { path.Transform(matrix); return path.GetBounds(); From 4b2dea5b3773fe63ba98e3a39f7d5f05ecb826ca Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Thu, 13 Jan 2022 02:37:07 +0800 Subject: [PATCH 02/12] Nicer --- Source/Text/SvgTextBase.Drawing.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Source/Text/SvgTextBase.Drawing.cs b/Source/Text/SvgTextBase.Drawing.cs index fe832429e..d2ff36a52 100644 --- a/Source/Text/SvgTextBase.Drawing.cs +++ b/Source/Text/SvgTextBase.Drawing.cs @@ -26,18 +26,17 @@ public override RectangleF Bounds continue; path.AddPath(elem.Path(null), false); } - Matrix matrix; - if (Transforms == null) + var transforms = Transforms; + if (transforms == null) { // This is an SvgTextSpan which does not support the transform attribute, but parent transforms still apply. - matrix = Parents.First(p => p.Transforms != null).Transforms.GetMatrix(); + transforms = Parents.First(p => p.Transforms != null).Transforms; } - else if (Transforms.Count == 0) + if (transforms.Count == 0) return path.GetBounds(); - else matrix = Transforms.GetMatrix(); using (path = (GraphicsPath)path.Clone()) - using (matrix) + using (matrix = transforms.GetMatrix()) { path.Transform(matrix); return path.GetBounds(); From 53c74aa46761f927749c75d527150d72e1005541 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Thu, 13 Jan 2022 02:37:34 +0800 Subject: [PATCH 03/12] oop --- Source/Text/SvgTextBase.Drawing.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Text/SvgTextBase.Drawing.cs b/Source/Text/SvgTextBase.Drawing.cs index d2ff36a52..09ee56e47 100644 --- a/Source/Text/SvgTextBase.Drawing.cs +++ b/Source/Text/SvgTextBase.Drawing.cs @@ -36,7 +36,7 @@ public override RectangleF Bounds return path.GetBounds(); using (path = (GraphicsPath)path.Clone()) - using (matrix = transforms.GetMatrix()) + using (var matrix = transforms.GetMatrix()) { path.Transform(matrix); return path.GetBounds(); From 92556d15a7adb41aa2fd87a1e0ca62132e2d9f70 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Fri, 14 Jan 2022 22:52:48 +0800 Subject: [PATCH 04/12] Nullable --- Source/Text/SvgTextBase.Drawing.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Text/SvgTextBase.Drawing.cs b/Source/Text/SvgTextBase.Drawing.cs index 09ee56e47..ce50d6eb6 100644 --- a/Source/Text/SvgTextBase.Drawing.cs +++ b/Source/Text/SvgTextBase.Drawing.cs @@ -30,7 +30,7 @@ public override RectangleF Bounds if (transforms == null) { // This is an SvgTextSpan which does not support the transform attribute, but parent transforms still apply. - transforms = Parents.First(p => p.Transforms != null).Transforms; + transforms = Parents.FirstOrDefault(p => p.Transforms != null)?.Transforms; } if (transforms.Count == 0) return path.GetBounds(); From 3e3e625874c06905ed315679695badd97bf156d5 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Fri, 14 Jan 2022 22:53:07 +0800 Subject: [PATCH 05/12] Update SvgTextBase.Drawing.cs --- Source/Text/SvgTextBase.Drawing.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Text/SvgTextBase.Drawing.cs b/Source/Text/SvgTextBase.Drawing.cs index ce50d6eb6..b58c117f7 100644 --- a/Source/Text/SvgTextBase.Drawing.cs +++ b/Source/Text/SvgTextBase.Drawing.cs @@ -27,12 +27,12 @@ public override RectangleF Bounds path.AddPath(elem.Path(null), false); } var transforms = Transforms; - if (transforms == null) + if (transforms is null) { // This is an SvgTextSpan which does not support the transform attribute, but parent transforms still apply. transforms = Parents.FirstOrDefault(p => p.Transforms != null)?.Transforms; } - if (transforms.Count == 0) + if (transforms is null || transforms.Count == 0) return path.GetBounds(); using (path = (GraphicsPath)path.Clone()) From f2114255b96f4b0da583da8800dc5a3d69511af6 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Fri, 14 Jan 2022 23:05:53 +0800 Subject: [PATCH 06/12] Update SvgTextTests.cs --- Tests/Svg.UnitTests/SvgTextTests.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index eb38d1da8..9606db299 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -83,5 +83,17 @@ public void TestWritesCoordinatesForCollectionChange() Assert.IsTrue(xml.Contains("dx=\"40\"")); Assert.IsTrue(xml.Contains("dy=\"50\"")); } + + [Test] + public void TestParentTransformsRespected() + { + var span = new SvgTextSpan { Text = "abc" }; + var b1 = text.Bounds; + _ = new SvgText { Transforms = new Transforms.SvgTransformCollection() { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; + var b2 = text.Bounds; + + var xml = text.GetXML(); + Assert.AreNotEqual(b1, b2); + } } } From 558cc28c2c354da4d8a274dbfea8104e790a4ab7 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Fri, 14 Jan 2022 23:06:25 +0800 Subject: [PATCH 07/12] Simplify --- Tests/Svg.UnitTests/SvgTextTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index 9606db299..6bff33586 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -89,7 +89,7 @@ public void TestParentTransformsRespected() { var span = new SvgTextSpan { Text = "abc" }; var b1 = text.Bounds; - _ = new SvgText { Transforms = new Transforms.SvgTransformCollection() { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; + _ = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; var b2 = text.Bounds; var xml = text.GetXML(); From cab82680fd8fb7ab9b2ed31b91974470673069f7 Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Fri, 14 Jan 2022 23:08:03 +0800 Subject: [PATCH 08/12] Simplify more --- Tests/Svg.UnitTests/SvgTextTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index 6bff33586..c91e75de0 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -91,8 +91,6 @@ public void TestParentTransformsRespected() var b1 = text.Bounds; _ = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; var b2 = text.Bounds; - - var xml = text.GetXML(); Assert.AreNotEqual(b1, b2); } } From 72d6f7acdbcec27f23f3a73c454b8289ba3402cf Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Fri, 14 Jan 2022 23:11:05 +0800 Subject: [PATCH 09/12] oop --- Tests/Svg.UnitTests/SvgTextTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index c91e75de0..d3898c47e 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -88,9 +88,9 @@ public void TestWritesCoordinatesForCollectionChange() public void TestParentTransformsRespected() { var span = new SvgTextSpan { Text = "abc" }; - var b1 = text.Bounds; + var b1 = span.Bounds; _ = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; - var b2 = text.Bounds; + var b2 = span.Bounds; Assert.AreNotEqual(b1, b2); } } From d805f836add2fa58357f640560af85046044272c Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Sun, 16 Jan 2022 20:19:30 +0800 Subject: [PATCH 10/12] Update SvgTextTests.cs --- Tests/Svg.UnitTests/SvgTextTests.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index d3898c47e..b3d8387b5 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -1,4 +1,5 @@ using NUnit.Framework; +using System.Drawing; using System.IO; using System.Xml; @@ -88,10 +89,10 @@ public void TestWritesCoordinatesForCollectionChange() public void TestParentTransformsRespected() { var span = new SvgTextSpan { Text = "abc" }; - var b1 = span.Bounds; - _ = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; - var b2 = span.Bounds; - Assert.AreNotEqual(b1, b2); + Assert.AreEqual(new PointF(0f, 0f), span.Bounds.Location); + var text = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; + Assert.AreEqual(new PointF(10f, 20f), span.Bounds.Location); + Assert.AreEqual(new PointF(10f, 20f), text.Bounds.Location); } } } From d1c6cb4866fc9a670a443196a2c853397863686c Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Sun, 16 Jan 2022 20:26:17 +0800 Subject: [PATCH 11/12] Update SvgTextTests.cs --- Tests/Svg.UnitTests/SvgTextTests.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index b3d8387b5..b9857cf2b 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -89,10 +89,12 @@ public void TestWritesCoordinatesForCollectionChange() public void TestParentTransformsRespected() { var span = new SvgTextSpan { Text = "abc" }; - Assert.AreEqual(new PointF(0f, 0f), span.Bounds.Location); + var b = span.Bounds; + Assert.AreNotEqual(new PointF(0f, 0f), b.Location); var text = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; - Assert.AreEqual(new PointF(10f, 20f), span.Bounds.Location); - Assert.AreEqual(new PointF(10f, 20f), text.Bounds.Location); + b.Offset(10f, 20f); + Assert.AreEqual(b, span.Bounds.Location); + Assert.AreEqual(b, text.Bounds.Location); } } } From 83616df5a76fc41914f7dc1e691b199aefd0ddcd Mon Sep 17 00:00:00 2001 From: Hadrian Tang Date: Sun, 16 Jan 2022 20:32:42 +0800 Subject: [PATCH 12/12] Update SvgTextTests.cs --- Tests/Svg.UnitTests/SvgTextTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/Svg.UnitTests/SvgTextTests.cs b/Tests/Svg.UnitTests/SvgTextTests.cs index b9857cf2b..c05b0e4ff 100644 --- a/Tests/Svg.UnitTests/SvgTextTests.cs +++ b/Tests/Svg.UnitTests/SvgTextTests.cs @@ -93,8 +93,8 @@ public void TestParentTransformsRespected() Assert.AreNotEqual(new PointF(0f, 0f), b.Location); var text = new SvgText { Transforms = new Transforms.SvgTransformCollection { new Transforms.SvgTranslate(10f, 20f) }, Children = { span } }; b.Offset(10f, 20f); - Assert.AreEqual(b, span.Bounds.Location); - Assert.AreEqual(b, text.Bounds.Location); + Assert.AreEqual(b, span.Bounds); + Assert.AreEqual(b, text.Bounds); } } }