summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/LayoutControl.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/LayoutControl.cs')
-rw-r--r--Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/LayoutControl.cs40
1 files changed, 40 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/LayoutControl.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/LayoutControl.cs
new file mode 100644
index 0000000..3935baa
--- /dev/null
+++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/LayoutControl.cs
@@ -0,0 +1,40 @@
+using Microsoft.Xna.Framework;
+
+namespace MonoGame.Extended.Gui.Controls
+{
+ public abstract class LayoutControl : ItemsControl
+ {
+ protected LayoutControl()
+ {
+ HorizontalAlignment = HorizontalAlignment.Stretch;
+ VerticalAlignment = VerticalAlignment.Stretch;
+ BackgroundColor = Color.Transparent;
+ }
+
+ private bool _isLayoutValid;
+
+ public override void InvalidateMeasure()
+ {
+ base.InvalidateMeasure();
+ _isLayoutValid = false;
+ }
+
+ public override void Update(IGuiContext context, float deltaSeconds)
+ {
+ base.Update(context, deltaSeconds);
+
+ if (!_isLayoutValid)
+ {
+ Layout(context, new Rectangle(Padding.Left, Padding.Top, ContentRectangle.Width, ContentRectangle.Height));
+ _isLayoutValid = true;
+ }
+ }
+
+ protected abstract void Layout(IGuiContext context, Rectangle rectangle);
+
+ protected static void PlaceControl(IGuiContext context, Control control, float x, float y, float width, float height)
+ {
+ LayoutHelper.PlaceControl(context, control, x, y, width, height);
+ }
+ }
+} \ No newline at end of file