diff --git a/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs b/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs index a72e9e875e..4fe887dcbc 100644 --- a/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs +++ b/src/Avalonia.Base/Media/TextFormatting/TextLayout.cs @@ -603,7 +603,7 @@ namespace Avalonia.Media.TextFormatting //Fulfill max height constraint if (textLines.Count > 0 && !double.IsPositiveInfinity(MaxHeight) - && Height + textLine.Height > MaxHeight) + && MathUtilities.GreaterThan(Height + textLine.Height, MaxHeight)) { if (previousLine?.TextLineBreak != null && _textTrimming != TextTrimming.None) { diff --git a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs index 9a3b0e205d..df2e5c78b5 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBlockTests.cs @@ -536,6 +536,32 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(new Rect(0, 0, 27.954545454545453, 14.522727272727273), target.Bounds); } + [Fact] + public void TextBlock_With_Fractional_LineHeight_Should_Not_Cull_Last_Line_At_Fractional_Scaling() + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var target = new TextBlock + { + Text = "first second third", + FontSize = 16, + LineHeight = 20.8, + TextWrapping = TextWrapping.Wrap, + Width = 50, + HorizontalAlignment = HorizontalAlignment.Left, + VerticalAlignment = VerticalAlignment.Top, + }; + var root = new TestRoot(target) + { + LayoutScaling = 1.25, + }; + + root.Measure(Size.Infinity); + root.Arrange(new Rect(root.DesiredSize)); + + Assert.Equal(3, target.TextLayout.TextLines.Count); + } + [Fact] public void TextBlock_With_UseLayoutRounding_False_Should_Not_Round_Padding_In_MeasureOverride() {