From 3f66430d90d4d1ea694bc62b64faad215e06aa12 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 Sep 2019 21:01:08 +0200 Subject: [PATCH] made image automatically set its area dirty when necessary --- MLEM.Ui/Elements/Image.cs | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/MLEM.Ui/Elements/Image.cs b/MLEM.Ui/Elements/Image.cs index 2100ce2..95549f4 100644 --- a/MLEM.Ui/Elements/Image.cs +++ b/MLEM.Ui/Elements/Image.cs @@ -8,28 +8,47 @@ namespace MLEM.Ui.Elements { public class Image : Element { public Color Color = Color.White; - public TextureRegion Texture; - public bool ScaleToImage; + private TextureRegion texture; + public TextureRegion Texture { + get => this.texture; + set { + if (this.texture != value) { + this.texture = value; + if (this.scaleToImage) + this.SetAreaDirty(); + } + } + } + private bool scaleToImage; + public bool ScaleToImage { + get => this.scaleToImage; + set { + if (this.scaleToImage != value) { + this.scaleToImage = value; + this.SetAreaDirty(); + } + } + } public bool MaintainImageAspect = true; public Image(Anchor anchor, Vector2 size, TextureRegion texture, bool scaleToImage = false) : base(anchor, size) { - this.Texture = texture; - this.ScaleToImage = scaleToImage; + this.texture = texture; + this.scaleToImage = scaleToImage; this.CanBeSelected = false; this.CanBeMoused = false; } protected override Point CalcActualSize(Rectangle parentArea) { - return this.ScaleToImage ? this.Texture.Size : base.CalcActualSize(parentArea); + return this.scaleToImage ? this.texture.Size : base.CalcActualSize(parentArea); } public override void Draw(GameTime time, SpriteBatch batch, float alpha) { if (this.MaintainImageAspect) { - var scale = Math.Min(this.DisplayArea.Width / (float) this.Texture.Width, this.DisplayArea.Height / (float) this.Texture.Height); - var imageOffset = new Vector2(this.DisplayArea.Width / 2F - this.Texture.Width * scale / 2, this.DisplayArea.Height / 2F - this.Texture.Height * scale / 2); - batch.Draw(this.Texture, this.DisplayArea.Location.ToVector2() + imageOffset, this.Color * alpha, 0, Vector2.Zero, scale, SpriteEffects.None, 0); + var scale = Math.Min(this.DisplayArea.Width / (float) this.texture.Width, this.DisplayArea.Height / (float) this.texture.Height); + var imageOffset = new Vector2(this.DisplayArea.Width / 2F - this.texture.Width * scale / 2, this.DisplayArea.Height / 2F - this.texture.Height * scale / 2); + batch.Draw(this.texture, this.DisplayArea.Location.ToVector2() + imageOffset, this.Color * alpha, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } else { - batch.Draw(this.Texture, this.DisplayArea, this.Color * alpha); + batch.Draw(this.texture, this.DisplayArea, this.Color * alpha); } base.Draw(time, batch, alpha); }