summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-06-03 10:15:45 +0800
committerchai <215380520@qq.com>2024-06-03 10:15:45 +0800
commitacea7b2e728787a0d83bbf83c8c1f042d2c32e7e (patch)
tree0bfec05c1ca2d71be2c337bcd110a0421f19318b /Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs
parent88febcb02bf127d961c6471d9e846c0e1315f5c3 (diff)
+ plugins project
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs')
-rw-r--r--Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs82
1 files changed, 82 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs
new file mode 100644
index 0000000..932f8e4
--- /dev/null
+++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Gui/Controls/ContentControl.cs
@@ -0,0 +1,82 @@
+using System.Collections.Generic;
+using Microsoft.Xna.Framework;
+
+namespace MonoGame.Extended.Gui.Controls
+{
+ public class ContentControl : Control
+ {
+ private bool _contentChanged = true;
+
+ private object _content;
+ public object Content
+ {
+ get => _content;
+ set
+ {
+ if (_content != value)
+ {
+ _content = value;
+ _contentChanged = true;
+ }
+ }
+ }
+
+ public override IEnumerable<Control> Children
+ {
+ get
+ {
+ if (Content is Control control)
+ yield return control;
+ }
+ }
+
+ public bool HasContent => Content == null;
+
+ public override void InvalidateMeasure()
+ {
+ base.InvalidateMeasure();
+ _contentChanged = true;
+ }
+
+ public override void Update(IGuiContext context, float deltaSeconds)
+ {
+ if (_content is Control control && _contentChanged)
+ {
+ control.Parent = this;
+ control.ActualSize = ContentRectangle.Size;
+ control.Position = new Point(Padding.Left, Padding.Top);
+ control.InvalidateMeasure();
+ _contentChanged = false;
+ }
+ }
+
+ public override void Draw(IGuiContext context, IGuiRenderer renderer, float deltaSeconds)
+ {
+ base.Draw(context, renderer, deltaSeconds);
+
+ if (Content is Control control)
+ {
+ control.Draw(context, renderer, deltaSeconds);
+ }
+ else
+ {
+ var text = Content?.ToString();
+ var textInfo = GetTextInfo(context, text, ContentRectangle, HorizontalTextAlignment, VerticalTextAlignment);
+
+ if (!string.IsNullOrWhiteSpace(textInfo.Text))
+ renderer.DrawText(textInfo.Font, textInfo.Text, textInfo.Position + TextOffset, textInfo.Color, textInfo.ClippingRectangle);
+ }
+ }
+
+ public override Size GetContentSize(IGuiContext context)
+ {
+ if (Content is Control control)
+ return control.CalculateActualSize(context);
+
+ var text = Content?.ToString();
+ var font = Font ?? context.DefaultFont;
+ return (Size)font.MeasureString(text ?? string.Empty);
+ }
+ }
+
+} \ No newline at end of file