mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-24 13:38:34 +01:00
fixed a regression where panels sometimes revert back to old, larger sizes after children change size
This commit is contained in:
parent
dbd52d5b9d
commit
c46b11f4fc
1 changed files with 12 additions and 1 deletions
|
@ -64,6 +64,7 @@ namespace MLEM.Ui.Elements {
|
||||||
private StyleProp<float> scrollBarOffset;
|
private StyleProp<float> scrollBarOffset;
|
||||||
private float lastScrollOffset;
|
private float lastScrollOffset;
|
||||||
private bool childrenDirtyForScroll;
|
private bool childrenDirtyForScroll;
|
||||||
|
private bool scrollBarMaxHistoryDirty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new panel with the given settings.
|
/// Creates a new panel with the given settings.
|
||||||
|
@ -172,6 +173,14 @@ namespace MLEM.Ui.Elements {
|
||||||
base.RemoveChildren(e => e != this.ScrollBar && (condition == null || condition(e)));
|
base.RemoveChildren(e => e != this.ScrollBar && (condition == null || condition(e)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Update(GameTime time) {
|
||||||
|
// reset the scroll bar's max history when an update happens, at which point we know that any scroll bar recursion has "settled"
|
||||||
|
// (this reset ensures that the max history is recursion-internal and old values aren't reused when elements get modified later)
|
||||||
|
this.ResetScrollBarMaxHistory();
|
||||||
|
base.Update(time);
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Draw(GameTime time, SpriteBatch batch, float alpha, SpriteBatchContext context) {
|
public override void Draw(GameTime time, SpriteBatch batch, float alpha, SpriteBatchContext context) {
|
||||||
// draw children onto the render target if we have one
|
// draw children onto the render target if we have one
|
||||||
|
@ -334,6 +343,7 @@ namespace MLEM.Ui.Elements {
|
||||||
this.scrollBarMaxHistory[0] = this.scrollBarMaxHistory[1];
|
this.scrollBarMaxHistory[0] = this.scrollBarMaxHistory[1];
|
||||||
this.scrollBarMaxHistory[1] = this.scrollBarMaxHistory[2];
|
this.scrollBarMaxHistory[1] = this.scrollBarMaxHistory[2];
|
||||||
this.scrollBarMaxHistory[2] = scrollBarMax;
|
this.scrollBarMaxHistory[2] = scrollBarMax;
|
||||||
|
this.scrollBarMaxHistoryDirty = true;
|
||||||
|
|
||||||
this.ScrollBar.MaxValue = scrollBarMax;
|
this.ScrollBar.MaxValue = scrollBarMax;
|
||||||
this.relevantChildrenDirty = true;
|
this.relevantChildrenDirty = true;
|
||||||
|
@ -419,9 +429,10 @@ namespace MLEM.Ui.Elements {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ResetScrollBarMaxHistory() {
|
private void ResetScrollBarMaxHistory() {
|
||||||
if (this.scrollOverflow) {
|
if (this.scrollOverflow && this.scrollBarMaxHistoryDirty) {
|
||||||
for (var i = 0; i < this.scrollBarMaxHistory.Length; i++)
|
for (var i = 0; i < this.scrollBarMaxHistory.Length; i++)
|
||||||
this.scrollBarMaxHistory[i] = -1;
|
this.scrollBarMaxHistory[i] = -1;
|
||||||
|
this.scrollBarMaxHistoryDirty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue