mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
ensure that relevant panel children are updated when children are changed
This commit is contained in:
parent
cf48fc372e
commit
543201d178
1 changed files with 21 additions and 19 deletions
|
@ -128,7 +128,7 @@ namespace MLEM.Ui.Elements {
|
|||
public override void ForceUpdateSortedChildren() {
|
||||
base.ForceUpdateSortedChildren();
|
||||
if (this.scrollOverflow)
|
||||
this.relevantChildrenDirty = true;
|
||||
this.ForceUpdateRelevantChildren();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
@ -147,24 +147,8 @@ namespace MLEM.Ui.Elements {
|
|||
protected override IList<Element> GetRelevantChildren() {
|
||||
var relevant = base.GetRelevantChildren();
|
||||
if (this.scrollOverflow) {
|
||||
if (this.relevantChildrenDirty) {
|
||||
this.relevantChildrenDirty = false;
|
||||
|
||||
var visible = this.GetRenderTargetArea();
|
||||
this.relevantChildren.Clear();
|
||||
foreach (var child in this.SortedChildren) {
|
||||
if (child.Area.Intersects(visible)) {
|
||||
this.relevantChildren.Add(child);
|
||||
} else {
|
||||
foreach (var c in child.GetChildren(regardGrandchildren: true)) {
|
||||
if (c.Area.Intersects(visible)) {
|
||||
this.relevantChildren.Add(child);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.relevantChildrenDirty)
|
||||
this.ForceUpdateRelevantChildren();
|
||||
relevant = this.relevantChildren;
|
||||
}
|
||||
return relevant;
|
||||
|
@ -272,5 +256,23 @@ namespace MLEM.Ui.Elements {
|
|||
this.ScrollBar.PositionOffset = new Vector2(-this.ScrollerSize.Value.X - 1, 0);
|
||||
}
|
||||
|
||||
private void ForceUpdateRelevantChildren() {
|
||||
this.relevantChildrenDirty = false;
|
||||
this.relevantChildren.Clear();
|
||||
var visible = this.GetRenderTargetArea();
|
||||
foreach (var child in this.SortedChildren) {
|
||||
if (child.Area.Intersects(visible)) {
|
||||
this.relevantChildren.Add(child);
|
||||
} else {
|
||||
foreach (var c in child.GetChildren(regardGrandchildren: true)) {
|
||||
if (c.Area.Intersects(visible)) {
|
||||
this.relevantChildren.Add(child);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue