From 26b2771864834a9db1bc00852850d145999ca742 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 1 Dec 2017 18:58:20 +0100 Subject: [PATCH 1/4] Added failing test for #1297 --- .../Primitives/TrackTests.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs index f07a5f5095..5396a43f3a 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/TrackTests.cs @@ -140,5 +140,31 @@ namespace Avalonia.Controls.UnitTests.Primitives Assert.Same(thumb.Parent, target); Assert.Equal(new[] { thumb }, ((ILogical)target).LogicalChildren); } + + [Fact] + public void Should_Not_Pass_Invalid_Arrange_Rect() + { + var thumb = new Thumb { Width = 100.873106060606 }; + var increaseButton = new Button { Width = 10 }; + var decreaseButton = new Button { Width = 10 }; + + var target = new Track + { + Height = 12, + Thumb = thumb, + IncreaseButton = increaseButton, + DecreaseButton = decreaseButton, + Orientation = Orientation.Horizontal, + Minimum = 0, + Maximum = 287, + Value = 287, + ViewportSize = 241, + }; + + target.Measure(Size.Infinity); + + // #1297 was occuring here. + target.Arrange(new Rect(0, 0, 221, 12)); + } } } From 91edffd8d20ce93239c33f592793d17643593ba1 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 1 Dec 2017 18:59:12 +0100 Subject: [PATCH 2/4] Fixed #1297 Handle rounding errors when calculating increase button arrange rect. --- src/Avalonia.Controls/Primitives/Track.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Primitives/Track.cs b/src/Avalonia.Controls/Primitives/Track.cs index 8c577665d5..3a16e51851 100644 --- a/src/Avalonia.Controls/Primitives/Track.cs +++ b/src/Avalonia.Controls/Primitives/Track.cs @@ -154,7 +154,11 @@ namespace Avalonia.Controls.Primitives if (increaseButton != null) { - increaseButton.Arrange(new Rect(firstWidth + thumbWidth, 0, remaining - firstWidth, finalSize.Height)); + increaseButton.Arrange(new Rect( + firstWidth + thumbWidth, + 0, + Math.Max(0, remaining - firstWidth), + Math.Max(0, finalSize.Height))); } } else From 7405cd79520a4bd19877b8f3f3f033fb49c98e00 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 9 Dec 2017 12:34:14 +0100 Subject: [PATCH 3/4] Match formatting of other block. --- src/Avalonia.Controls/Primitives/Track.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Primitives/Track.cs b/src/Avalonia.Controls/Primitives/Track.cs index 3a16e51851..3f50e11a48 100644 --- a/src/Avalonia.Controls/Primitives/Track.cs +++ b/src/Avalonia.Controls/Primitives/Track.cs @@ -189,7 +189,11 @@ namespace Avalonia.Controls.Primitives if (increaseButton != null) { - increaseButton.Arrange(new Rect(0, firstHeight + thumbHeight, finalSize.Width, Math.Max(remaining - firstHeight, 0))); + increaseButton.Arrange(new Rect( + 0, + firstHeight + thumbHeight, + finalSize.Width, + Math.Max(remaining - firstHeight, 0))); } } From e49e682f9ced0e0b0887350fefbf73d509cde811 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 10 Dec 2017 20:09:20 +0100 Subject: [PATCH 4/4] This Max shouldn't be needed. --- src/Avalonia.Controls/Primitives/Track.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Primitives/Track.cs b/src/Avalonia.Controls/Primitives/Track.cs index 3f50e11a48..648fe5f4b0 100644 --- a/src/Avalonia.Controls/Primitives/Track.cs +++ b/src/Avalonia.Controls/Primitives/Track.cs @@ -158,7 +158,7 @@ namespace Avalonia.Controls.Primitives firstWidth + thumbWidth, 0, Math.Max(0, remaining - firstWidth), - Math.Max(0, finalSize.Height))); + finalSize.Height)); } } else