diff --git a/CHANGELOG.md b/CHANGELOG.md
index 22bdf78..5679acc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -37,7 +37,6 @@ Additions
- Allow specifying a maximum amount of characters for a TextField
- Added a multiline editing mode to TextField
- Added a formatting code to allow for inline font changes
-- Added PreventSiblingSpill to Element
Improvements
- **Made Image ScaleToImage take ui scale into account**
diff --git a/MLEM.Ui/Elements/Element.cs b/MLEM.Ui/Elements/Element.cs
index 7bcb555..1398e05 100644
--- a/MLEM.Ui/Elements/Element.cs
+++ b/MLEM.Ui/Elements/Element.cs
@@ -241,16 +241,9 @@ namespace MLEM.Ui.Elements {
/// Set this field to true to cause this element's final display area to never exceed that of its .
/// If the resulting area is too large, the size of this element is shrunk to fit the target area.
/// This can be useful if an element should fill the remaining area of a parent exactly.
- /// When setting this value after this element has already been added to a ui, should be called.
///
public bool PreventParentSpill;
///
- /// Set this field to true to cause this element's final display ever to never overlap with any of its siblings ().
- /// If the resulting area is too large, the size of this element is shrunk to best accomodate for the areas of its siblings.
- /// When setting this value after this element has already been added to a ui, should be called.
- ///
- public bool PreventSiblingSpill;
- ///
/// The transparency (alpha value) that this element is rendered with.
/// Note that, when is called, this alpha value is multiplied with the 's alpha value and passed down to this element's .
///
@@ -340,10 +333,6 @@ namespace MLEM.Ui.Elements {
///
public GenericCallback OnAreaUpdated;
///
- /// Event that is called when this element's area is marked as dirty using .
- ///
- public GenericCallback OnAreaDirty;
- ///
/// Event that is called when the element that is currently being moused changes within the ui system.
/// Note that the event fired doesn't necessarily correlate to this specific element.
///
@@ -527,17 +516,8 @@ namespace MLEM.Ui.Elements {
///
public void SetAreaDirty() {
this.areaDirty = true;
- if (this.Parent != null) {
- // set parent dirty if the parent's layout depends on our area
- if (this.Anchor >= Anchor.AutoLeft || this.Parent.SetWidthBasedOnChildren || this.Parent.SetHeightBasedOnChildren)
- this.Parent.SetAreaDirty();
- // set siblings dirty that depend on our area
- foreach (var sibling in this.GetSiblings()) {
- if (sibling.PreventSiblingSpill)
- sibling.SetAreaDirty();
- }
- }
- this.System?.InvokeOnElementAreaDirty(this);
+ if (this.Parent != null && (this.Anchor >= Anchor.AutoLeft || this.Parent.SetWidthBasedOnChildren || this.Parent.SetHeightBasedOnChildren))
+ this.Parent.SetAreaDirty();
}
///
@@ -664,30 +644,6 @@ namespace MLEM.Ui.Elements {
newSize.Y = parentArea.Bottom - pos.Y;
}
- if (this.PreventSiblingSpill) {
- foreach (var sibling in this.GetSiblings(e => !e.IsHidden)) {
- var leftIntersect = sibling.Area.Right - pos.X;
- var rightIntersect = pos.X + newSize.X - sibling.Area.Left;
- var bottomIntersect = sibling.Area.Bottom - pos.Y;
- var topIntersect = pos.Y + newSize.Y - sibling.Area.Top;
- if (leftIntersect > 0 && rightIntersect > 0 && bottomIntersect > 0 && topIntersect > 0) {
- if (rightIntersect + leftIntersect < topIntersect + bottomIntersect) {
- if (rightIntersect > leftIntersect) {
- pos.X = Math.Max(pos.X, sibling.Area.Right);
- } else {
- newSize.X = Math.Min(pos.X + newSize.X, sibling.Area.Left) - pos.X;
- }
- } else {
- if (topIntersect > bottomIntersect) {
- pos.Y = Math.Max(pos.Y, sibling.Area.Bottom);
- } else {
- newSize.Y = Math.Min(pos.Y + newSize.Y, sibling.Area.Top) - pos.Y;
- }
- }
- }
- }
- }
-
this.area = new RectangleF(pos, newSize);
this.System.InvokeOnElementAreaUpdated(this);
diff --git a/MLEM.Ui/UiSystem.cs b/MLEM.Ui/UiSystem.cs
index 36fbec4..77e56c0 100644
--- a/MLEM.Ui/UiSystem.cs
+++ b/MLEM.Ui/UiSystem.cs
@@ -152,10 +152,6 @@ namespace MLEM.Ui {
///
public event Element.GenericCallback OnElementAreaUpdated;
///
- /// Event that is invoked when an element's area is marked as dirty using .
- ///
- public event Element.GenericCallback OnElementAreaDirty;
- ///
/// Event that is invoked when the that the mouse is currently over changes
///
public event Element.GenericCallback OnMousedElementChanged;
@@ -197,7 +193,6 @@ namespace MLEM.Ui {
this.OnElementTouchEnter += e => e.OnTouchEnter?.Invoke(e);
this.OnElementTouchExit += e => e.OnTouchExit?.Invoke(e);
this.OnElementAreaUpdated += e => e.OnAreaUpdated?.Invoke(e);
- this.OnElementAreaDirty += e => e.OnAreaDirty?.Invoke(e);
this.OnMousedElementChanged += e => this.ApplyToAll(t => t.OnMousedElementChanged?.Invoke(t, e));
this.OnTouchedElementChanged += e => this.ApplyToAll(t => t.OnTouchedElementChanged?.Invoke(t, e));
this.OnSelectedElementChanged += e => this.ApplyToAll(t => t.OnSelectedElementChanged?.Invoke(t, e));
@@ -362,7 +357,6 @@ namespace MLEM.Ui {
internal void InvokeOnSelectedElementDrawn(Element element, GameTime time, SpriteBatch batch, float alpha) => this.OnSelectedElementDrawn?.Invoke(element, time, batch, alpha);
internal void InvokeOnElementUpdated(Element element, GameTime time) => this.OnElementUpdated?.Invoke(element, time);
internal void InvokeOnElementAreaUpdated(Element element) => this.OnElementAreaUpdated?.Invoke(element);
- internal void InvokeOnElementAreaDirty(Element element) => this.OnElementAreaDirty?.Invoke(element);
internal void InvokeOnElementPressed(Element element) => this.OnElementPressed?.Invoke(element);
internal void InvokeOnElementSecondaryPressed(Element element) => this.OnElementSecondaryPressed?.Invoke(element);
internal void InvokeOnElementSelected(Element element) => this.OnElementSelected?.Invoke(element);
diff --git a/Sandbox/GameImpl.cs b/Sandbox/GameImpl.cs
index 759a2f1..70e4f18 100644
--- a/Sandbox/GameImpl.cs
+++ b/Sandbox/GameImpl.cs
@@ -8,6 +8,7 @@ using Microsoft.Xna.Framework.Input;
using MLEM.Cameras;
using MLEM.Data;
using MLEM.Data.Content;
+using MLEM.Extended.Extensions;
using MLEM.Extended.Font;
using MLEM.Extended.Tiled;
using MLEM.Extensions;
@@ -21,7 +22,9 @@ using MLEM.Textures;
using MLEM.Ui;
using MLEM.Ui.Elements;
using MLEM.Ui.Style;
+using MonoGame.Extended;
using MonoGame.Extended.Tiled;
+using Group = MLEM.Ui.Elements.Group;
namespace Sandbox {
public class GameImpl : MlemGame {
@@ -213,7 +216,7 @@ namespace Sandbox {
invalidPanel.AddChild(new VerticalSpace(1));
this.UiSystem.Add("Invalid", invalidPanel);*/
- /*var loadGroup = new Group(Anchor.TopLeft, Vector2.One, false);
+ var loadGroup = new Group(Anchor.TopLeft, Vector2.One, false);
var loadPanel = loadGroup.AddChild(new Panel(Anchor.Center, new Vector2(150, 150), Vector2.Zero, false, true, false) {
ChildPadding = new Padding(5, 10, 5, 5)
});
@@ -237,30 +240,7 @@ namespace Sandbox {
}
};
par.OnDrawn = (e, time, batch, a) => batch.DrawRectangle(e.DisplayArea.ToExtended(), Color.Red);
- this.UiSystem.Add("Load", loadGroup);*/
-
- var spillPanel = new Panel(Anchor.Center, new Vector2(100), Vector2.Zero);
- spillPanel.AddChild(new Button(Anchor.TopLeft, new Vector2(30), "TL") {
- OnUpdated = (e, time) => e.IsHidden = Input.IsKeyDown(Keys.D1)
- });
- spillPanel.AddChild(new Button(Anchor.TopRight, new Vector2(30), "TR") {
- OnUpdated = (e, time) => e.IsHidden = Input.IsKeyDown(Keys.D2)
- });
- spillPanel.AddChild(new Button(Anchor.BottomLeft, new Vector2(30), "BL") {
- OnUpdated = (e, time) => e.IsHidden = Input.IsKeyDown(Keys.D3)
- });
- spillPanel.AddChild(new Button(Anchor.BottomRight, new Vector2(30), "BR") {
- OnUpdated = (e, time) => e.IsHidden = Input.IsKeyDown(Keys.D4)
- });
- spillPanel.AddChild(new Button(Anchor.Center, Vector2.Zero, "Spill Test") {
- PositionOffset = new Vector2(-10, -5),
- Size = new Vector2(60, 55),
- OnPressed = e => {
- e.PreventSiblingSpill = !e.PreventSiblingSpill;
- e.SetAreaDirty();
- }
- });
- this.UiSystem.Add("SpillTest", spillPanel);
+ this.UiSystem.Add("Load", loadGroup);
}
protected override void DoUpdate(GameTime gameTime) {