1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-11-28 07:18:35 +01:00

Compare commits

...

3 commits

4 changed files with 17 additions and 9 deletions

View file

@ -28,6 +28,12 @@ Additions
- Added the ability to set the anchor that should be used when a tooltip attaches to an element or the mouse - Added the ability to set the anchor that should be used when a tooltip attaches to an element or the mouse
- Added the ability to display tooltips using the auto-nav style even when using the mouse - Added the ability to display tooltips using the auto-nav style even when using the mouse
Improvements
- Allow scrolling panels to set height based on children by setting TreatSizeAsMaximum
Fixes
- Fixed hidden scroll bars inhibiting scrolling on their parent panel
## 6.3.1 ## 6.3.1
No code changes No code changes

View file

@ -223,14 +223,15 @@ namespace Demos {
PositionOffset = new Vector2(0, 1) PositionOffset = new Vector2(0, 1)
}); });
var subPanel = this.root.AddChild(new Panel(Anchor.AutoLeft, new Vector2(1, 25), Vector2.Zero, false, true) { this.root.AddChild(new VerticalSpace(3));
PositionOffset = new Vector2(0, 1), var dynamicSubPanel = this.root.AddChild(new Panel(Anchor.AutoLeft, new Vector2(1, 50), Vector2.Zero, true, true) {
Texture = null, Texture = null,
ChildPadding = Padding.Empty ChildPadding = Padding.Empty
}); });
subPanel.AddChild(new Paragraph(Anchor.AutoLeft, 1, "This is a nested scrolling panel!")); dynamicSubPanel.AddChild(new Paragraph(Anchor.AutoLeft, 1, "This is a dynamic height nested panel with a maximum height, at which point it starts displaying a scroll bar instead!"));
for (var i = 1; i <= 5; i++) dynamicSubPanel.AddChild(new Button(Anchor.AutoLeft, new Vector2(1, 10), "Press to add more") {
subPanel.AddChild(new Button(Anchor.AutoLeft, new Vector2(1, 10), $"Button {i}") {PositionOffset = new Vector2(0, 1)}); OnPressed = _ => dynamicSubPanel.AddChild(new Button(Anchor.AutoLeft, new Vector2(1, 10), "I do nothing"))
});
const string alignText = "Paragraphs can have <l Left>left</l> aligned text, <l Right>right</l> aligned text and <l Center>center</l> aligned text."; const string alignText = "Paragraphs can have <l Left>left</l> aligned text, <l Right>right</l> aligned text and <l Center>center</l> aligned text.";
this.root.AddChild(new VerticalSpace(3)); this.root.AddChild(new VerticalSpace(3));

View file

@ -78,6 +78,7 @@ namespace MLEM.Ui.Elements {
public Panel(Anchor anchor, Vector2 size, Vector2 positionOffset, bool setHeightBasedOnChildren = false, bool scrollOverflow = false, bool autoHideScrollbar = true) : base(anchor, size) { public Panel(Anchor anchor, Vector2 size, Vector2 positionOffset, bool setHeightBasedOnChildren = false, bool scrollOverflow = false, bool autoHideScrollbar = true) : base(anchor, size) {
this.PositionOffset = positionOffset; this.PositionOffset = positionOffset;
this.SetHeightBasedOnChildren = setHeightBasedOnChildren; this.SetHeightBasedOnChildren = setHeightBasedOnChildren;
this.TreatSizeAsMaximum = setHeightBasedOnChildren && scrollOverflow;
this.scrollOverflow = scrollOverflow; this.scrollOverflow = scrollOverflow;
this.CanBeSelected = false; this.CanBeSelected = false;
@ -119,8 +120,8 @@ namespace MLEM.Ui.Elements {
public override void ForceUpdateArea() { public override void ForceUpdateArea() {
if (this.scrollOverflow) { if (this.scrollOverflow) {
// sanity check // sanity check
if (this.SetHeightBasedOnChildren) if (this.SetHeightBasedOnChildren && !this.TreatSizeAsMaximum)
throw new NotSupportedException("A panel can't both set height based on children and scroll overflow"); throw new NotSupportedException("A panel can't both scroll overflow and set height based on children without a maximum");
foreach (var child in this.Children) { foreach (var child in this.Children) {
if (child != this.ScrollBar && !child.Anchor.IsAuto()) if (child != this.ScrollBar && !child.Anchor.IsAuto())
throw new NotSupportedException($"A panel that handles overflow can't contain non-automatic anchors ({child})"); throw new NotSupportedException($"A panel that handles overflow can't contain non-automatic anchors ({child})");
@ -295,7 +296,7 @@ namespace MLEM.Ui.Elements {
if (this.Children.Count > 1) { if (this.Children.Count > 1) {
var highestValidChild = this.Children.FirstOrDefault(c => c != this.ScrollBar && !c.IsHidden); var highestValidChild = this.Children.FirstOrDefault(c => c != this.ScrollBar && !c.IsHidden);
var lowestChild = this.GetLowestChild(c => c != this.ScrollBar && !c.IsHidden, true); var lowestChild = this.GetLowestChild(c => c != this.ScrollBar && !c.IsHidden, true);
childrenHeight = lowestChild.GetTotalCoveredArea(false).Bottom - highestValidChild.Area.Top; childrenHeight = lowestChild.GetTotalCoveredArea(true).Bottom - highestValidChild.UnscrolledArea.Top;
} else { } else {
// if we only have one child (the scroll bar), then the children take up no visual height // if we only have one child (the scroll bar), then the children take up no visual height
childrenHeight = 0; childrenHeight = 0;

View file

@ -251,7 +251,7 @@ namespace MLEM.Ui.Elements {
var foundMe = false; var foundMe = false;
foreach (var child in this.Parent.GetChildren(regardGrandchildren: true)) { foreach (var child in this.Parent.GetChildren(regardGrandchildren: true)) {
if (foundMe) { if (foundMe) {
if (child is ScrollBar b && !b.Horizontal && b.IsMousedForScrolling(moused)) if (child is ScrollBar b && !b.IsHidden && !b.Horizontal && b.IsMousedForScrolling(moused))
return false; return false;
} else if (child == this) { } else if (child == this) {
// once we found ourselves, all subsequent children are deeper/older! // once we found ourselves, all subsequent children are deeper/older!