"In" modifier for ref readonly struct, StackPanel force rerender fix

This commit is contained in:
2023-08-12 23:42:30 +02:00
parent 55a4dd733b
commit 09f44e9db2
13 changed files with 118 additions and 97 deletions

View File

@@ -39,7 +39,7 @@ public partial class StackPanel<T> : ChildContainerView<T>, IVisibilityChangeHan
return new Size(width, height);
}
protected override bool DefaultRenderer(RenderContext renderContext, Position position, Size size)
protected override bool DefaultRenderer(in RenderContext renderContext, Position position, Size size)
{
var delta = 0;
var neededRerender = false;
@@ -56,15 +56,6 @@ public partial class StackPanel<T> : ChildContainerView<T>, IVisibilityChangeHan
if (!_requestedSizes.TryGetValue(child, out var childSize)) throw new Exception("Child size not found");
if (forceRerenderChildren.Contains(child))
{
renderContext = new RenderContext(
renderContext.ConsoleDriver,
true,
renderContext.Foreground,
renderContext.Background
);
}
var childPosition = Orientation == Orientation.Vertical
? position with {Y = position.Y + delta}
@@ -84,7 +75,21 @@ public partial class StackPanel<T> : ChildContainerView<T>, IVisibilityChangeHan
childSize = childSize with {Height = endY - childPosition.Y};
}
neededRerender = child.Render(renderContext, childPosition, childSize) || neededRerender;
if (forceRerenderChildren.Contains(child))
{
var rerenderContext = new RenderContext(
renderContext.ConsoleDriver,
true,
renderContext.Foreground,
renderContext.Background,
renderContext.Statistics
);
neededRerender = child.Render(rerenderContext, childPosition, childSize) || neededRerender;
}
else
{
neededRerender = child.Render(renderContext, childPosition, childSize) || neededRerender;
}
delta += Orientation == Orientation.Vertical
? childSize.Height