mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-31 02:08:03 +01:00
This commit is contained in:
@@ -167,6 +167,13 @@ public partial class View // Drawing APIs
|
||||
|
||||
private void DoDrawBorderAndPadding ()
|
||||
{
|
||||
if (Margin?.NeedsLayout == true)
|
||||
{
|
||||
Margin.NeedsLayout = false;
|
||||
Margin?.ClearFrame ();
|
||||
Margin?.Parent?.SetSubViewNeedsDraw ();
|
||||
}
|
||||
|
||||
if (SubViewNeedsDraw)
|
||||
{
|
||||
// A Subview may add to the LineCanvas. This ensures any Adornment LineCanvas updates happen.
|
||||
@@ -210,6 +217,22 @@ public partial class View // Drawing APIs
|
||||
|
||||
}
|
||||
|
||||
private void ClearFrame ()
|
||||
{
|
||||
if (Driver is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get screen-relative coords
|
||||
Rectangle toClear = FrameToScreen ();
|
||||
|
||||
Attribute prev = SetAttribute (GetNormalColor ());
|
||||
Driver.FillRect (toClear);
|
||||
SetAttribute (prev);
|
||||
SetNeedsDraw ();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the View's Adornments are to be drawn. Prepares <see cref="View.LineCanvas"/>. If
|
||||
/// <see cref="SuperViewRendersLineCanvas"/> is true, only the
|
||||
|
||||
@@ -511,4 +511,66 @@ public class AdornmentTests (ITestOutputHelper output)
|
||||
bool result = adornment.Contains (new (pointX, pointY));
|
||||
Assert.Equal (expected, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[SetupFakeDriver]
|
||||
public void Border_Is_Cleared_After_Margin_Thickness_Change ()
|
||||
{
|
||||
View view = new () { Text = "View", Width = 6, Height = 3, BorderStyle = LineStyle.Rounded };
|
||||
// Remove border bottom thickness
|
||||
view.Border!.Thickness = new (1, 1, 1, 0);
|
||||
// Add margin bottom thickness
|
||||
view.Margin!.Thickness = new (0, 0, 0, 1);
|
||||
|
||||
Assert.Equal (6, view.Width);
|
||||
Assert.Equal (3, view.Height);
|
||||
|
||||
view.Draw ();
|
||||
|
||||
TestHelpers.AssertDriverContentsWithFrameAre (
|
||||
@"
|
||||
╭────╮
|
||||
│View│
|
||||
",
|
||||
output
|
||||
);
|
||||
|
||||
// Add border bottom thickness
|
||||
view.Border!.Thickness = new (1, 1, 1, 1);
|
||||
// Remove margin bottom thickness
|
||||
view.Margin!.Thickness = new (0, 0, 0, 0);
|
||||
|
||||
view.Draw ();
|
||||
|
||||
Assert.Equal (6, view.Width);
|
||||
Assert.Equal (3, view.Height);
|
||||
|
||||
TestHelpers.AssertDriverContentsWithFrameAre (
|
||||
@"
|
||||
╭────╮
|
||||
│View│
|
||||
╰────╯
|
||||
",
|
||||
output
|
||||
);
|
||||
|
||||
// Remove border bottom thickness
|
||||
view.Border!.Thickness = new (1, 1, 1, 0);
|
||||
// Add margin bottom thickness
|
||||
view.Margin!.Thickness = new (0, 0, 0, 1);
|
||||
|
||||
Assert.Equal (6, view.Width);
|
||||
Assert.Equal (3, view.Height);
|
||||
|
||||
View.SetClipToScreen ();
|
||||
view.Draw ();
|
||||
|
||||
TestHelpers.AssertDriverContentsWithFrameAre (
|
||||
@"
|
||||
╭────╮
|
||||
│View│
|
||||
",
|
||||
output
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user