diff --git a/MLEM.Ui/Elements/Button.cs b/MLEM.Ui/Elements/Button.cs index 31910bc..92de86a 100644 --- a/MLEM.Ui/Elements/Button.cs +++ b/MLEM.Ui/Elements/Button.cs @@ -22,7 +22,7 @@ namespace MLEM.Ui.Elements { this.Tooltip = new Tooltip(tooltipWidth, tooltipText, this); } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { + public override void Draw(GameTime time, SpriteBatch batch, float alpha) { var tex = this.Texture; var color = Color.White * alpha; if (this.IsMouseOver) { @@ -30,8 +30,8 @@ namespace MLEM.Ui.Elements { tex = this.HoveredTexture; color = this.HoveredColor * alpha; } - batch.Draw(tex, this.DisplayArea.OffsetCopy(offset), color, this.Scale); - base.Draw(time, batch, alpha, offset); + batch.Draw(tex, this.DisplayArea, color, this.Scale); + base.Draw(time, batch, alpha); } protected override void InitStyle(UiStyle style) { diff --git a/MLEM.Ui/Elements/Checkbox.cs b/MLEM.Ui/Elements/Checkbox.cs index d2e2bfe..c1ddf0a 100644 --- a/MLEM.Ui/Elements/Checkbox.cs +++ b/MLEM.Ui/Elements/Checkbox.cs @@ -46,7 +46,7 @@ namespace MLEM.Ui.Elements { return size; } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { + public override void Draw(GameTime time, SpriteBatch batch, float alpha) { var tex = this.Texture; var color = Color.White * alpha; if (this.IsMouseOver) { @@ -55,11 +55,11 @@ namespace MLEM.Ui.Elements { color = this.HoveredColor * alpha; } - var boxDisplayArea = new Rectangle(this.DisplayArea.Location, new Point(this.DisplayArea.Height)).OffsetCopy(offset); + var boxDisplayArea = new Rectangle(this.DisplayArea.Location, new Point(this.DisplayArea.Height)); batch.Draw(tex, boxDisplayArea, color, this.Scale); if (this.Checked) batch.Draw(this.Checkmark, boxDisplayArea, Color.White * alpha); - base.Draw(time, batch, alpha, offset); + base.Draw(time, batch, alpha); } protected override void InitStyle(UiStyle style) { diff --git a/MLEM.Ui/Elements/Element.cs b/MLEM.Ui/Elements/Element.cs index a3e2d84..7259417 100644 --- a/MLEM.Ui/Elements/Element.cs +++ b/MLEM.Ui/Elements/Element.cs @@ -428,16 +428,16 @@ namespace MLEM.Ui.Elements { child.Update(time); } - public virtual void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { - this.System.OnElementDrawn?.Invoke(this, time, batch, alpha, offset); + public virtual void Draw(GameTime time, SpriteBatch batch, float alpha) { + this.System.OnElementDrawn?.Invoke(this, time, batch, alpha); foreach (var child in this.SortedChildren) { if (!child.IsHidden) - child.Draw(time, batch, alpha * child.DrawAlpha, offset); + child.Draw(time, batch, alpha * child.DrawAlpha); } if (this.IsSelected) - this.System.OnSelectedElementDrawn?.Invoke(this, time, batch, alpha, offset); + this.System.OnSelectedElementDrawn?.Invoke(this, time, batch, alpha); } public virtual void DrawEarly(GameTime time, SpriteBatch batch, float alpha, BlendState blendState, SamplerState samplerState, Matrix matrix) { @@ -474,7 +474,7 @@ namespace MLEM.Ui.Elements { public delegate void OtherElementCallback(Element thisElement, Element otherElement); - public delegate void DrawCallback(Element element, GameTime time, SpriteBatch batch, float alpha, Point offset); + public delegate void DrawCallback(Element element, GameTime time, SpriteBatch batch, float alpha); } } \ No newline at end of file diff --git a/MLEM.Ui/Elements/Image.cs b/MLEM.Ui/Elements/Image.cs index 243336c..0864552 100644 --- a/MLEM.Ui/Elements/Image.cs +++ b/MLEM.Ui/Elements/Image.cs @@ -22,15 +22,15 @@ namespace MLEM.Ui.Elements { return this.ScaleToImage ? this.Texture.Size : base.CalcActualSize(parentArea); } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { + 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 + offset).ToVector2() + imageOffset, this.Color * alpha, 0, Vector2.Zero, scale, SpriteEffects.None, 0); + 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.OffsetCopy(offset), this.Color * alpha); + batch.Draw(this.Texture, this.DisplayArea, this.Color * alpha); } - base.Draw(time, batch, alpha, offset); + base.Draw(time, batch, alpha); } } diff --git a/MLEM.Ui/Elements/Panel.cs b/MLEM.Ui/Elements/Panel.cs index eb3d72b..5d97ad0 100644 --- a/MLEM.Ui/Elements/Panel.cs +++ b/MLEM.Ui/Elements/Panel.cs @@ -92,14 +92,14 @@ namespace MLEM.Ui.Elements { child.ScrollOffset = new Point(0, offset); } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { - batch.Draw(this.Texture, this.DisplayArea.OffsetCopy(offset), Color.White * alpha, this.Scale); + public override void Draw(GameTime time, SpriteBatch batch, float alpha) { + batch.Draw(this.Texture, this.DisplayArea, Color.White * alpha, this.Scale); // if we handle overflow, draw using the render target in DrawUnbound if (!this.scrollOverflow) { - base.Draw(time, batch, alpha, offset); + base.Draw(time, batch, alpha); } else if (this.renderTarget != null) { // draw the actual render target (don't apply the alpha here because it's already drawn onto with alpha) - batch.Draw(this.renderTarget, this.GetRenderTargetArea().OffsetCopy(offset), Color.White); + batch.Draw(this.renderTarget, this.GetRenderTargetArea(), Color.White); } } @@ -108,11 +108,10 @@ namespace MLEM.Ui.Elements { // draw children onto the render target batch.GraphicsDevice.SetRenderTarget(this.renderTarget); batch.GraphicsDevice.Clear(Color.Transparent); - // we don't apply the matrix here because it's already applied when drawing the render target - batch.Begin(SpriteSortMode.Deferred, blendState, samplerState); // offset children by the render target's location var area = this.GetRenderTargetArea(); - base.Draw(time, batch, alpha, new Point(-area.X, -area.Y)); + batch.Begin(SpriteSortMode.Deferred, blendState, samplerState, null, null, null, Matrix.CreateTranslation(-area.X, -area.Y, 0)); + base.Draw(time, batch, alpha); batch.End(); batch.GraphicsDevice.SetRenderTarget(null); } diff --git a/MLEM.Ui/Elements/Paragraph.cs b/MLEM.Ui/Elements/Paragraph.cs index 81d70f4..e8c931c 100644 --- a/MLEM.Ui/Elements/Paragraph.cs +++ b/MLEM.Ui/Elements/Paragraph.cs @@ -66,17 +66,16 @@ namespace MLEM.Ui.Elements { this.Text = this.GetTextCallback(this); } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { + public override void Draw(GameTime time, SpriteBatch batch, float alpha) { if (this.Background != null) - batch.Draw(this.Background, this.Area.OffsetCopy(offset), this.BackgroundColor * alpha); + batch.Draw(this.Background, this.Area, this.BackgroundColor * alpha); var pos = this.DisplayArea.Location.ToVector2(); - var off = offset.ToVector2(); var sc = this.TextScale * this.Scale; // if we don't have any formatting codes, then we don't need to do complex drawing if (this.codeLocations.Count <= 0) { - this.regularFont.DrawString(batch, this.splitText, pos + off, this.TextColor * alpha, 0, Vector2.Zero, sc, SpriteEffects.None, 0); + this.regularFont.DrawString(batch, this.splitText, pos, this.TextColor * alpha, 0, Vector2.Zero, sc, SpriteEffects.None, 0); } else { // if we have formatting codes, we need to go through each index and see how it should be drawn var characterCounter = 0; @@ -112,12 +111,12 @@ namespace MLEM.Ui.Elements { innerOffset.X = 0; innerOffset.Y += this.regularFont.LineHeight * sc; } else { - currFont.DrawString(batch, cSt, pos + off + innerOffset, currColor * alpha, 0, Vector2.Zero, sc, SpriteEffects.None, 0); + currFont.DrawString(batch, cSt, pos + innerOffset, currColor * alpha, 0, Vector2.Zero, sc, SpriteEffects.None, 0); innerOffset.X += this.regularFont.MeasureString(cSt).X * sc; } } } - base.Draw(time, batch, alpha, offset); + base.Draw(time, batch, alpha); } protected override void InitStyle(UiStyle style) { diff --git a/MLEM.Ui/Elements/ScrollBar.cs b/MLEM.Ui/Elements/ScrollBar.cs index 7e02438..f4f4ed1 100644 --- a/MLEM.Ui/Elements/ScrollBar.cs +++ b/MLEM.Ui/Elements/ScrollBar.cs @@ -118,16 +118,16 @@ namespace MLEM.Ui.Elements { } } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { - batch.Draw(this.Background, this.DisplayArea.OffsetCopy(offset), Color.White * alpha, this.Scale); + public override void Draw(GameTime time, SpriteBatch batch, float alpha) { + batch.Draw(this.Background, this.DisplayArea, Color.White * alpha, this.Scale); - var scrollerPos = new Point(this.DisplayArea.X + offset.X + this.ScrollerOffset.X, this.DisplayArea.Y + offset.Y + this.ScrollerOffset.Y); + var scrollerPos = new Point(this.DisplayArea.X + this.ScrollerOffset.X, this.DisplayArea.Y + this.ScrollerOffset.Y); var scrollerOffset = new Point( !this.Horizontal ? 0 : (this.currValue / this.maxValue * (this.DisplayArea.Width - this.ScrollerSize.X * this.Scale)).Floor(), this.Horizontal ? 0 : (this.currValue / this.maxValue * (this.DisplayArea.Height - this.ScrollerSize.Y * this.Scale)).Floor()); var scrollerRect = new Rectangle(scrollerPos + scrollerOffset, this.ScrollerSize.Multiply(this.Scale)); batch.Draw(this.ScrollerTexture, scrollerRect, Color.White * alpha, this.Scale); - base.Draw(time, batch, alpha, offset); + base.Draw(time, batch, alpha); } protected override void InitStyle(UiStyle style) { diff --git a/MLEM.Ui/Elements/TextField.cs b/MLEM.Ui/Elements/TextField.cs index beb3b48..4f78d90 100644 --- a/MLEM.Ui/Elements/TextField.cs +++ b/MLEM.Ui/Elements/TextField.cs @@ -91,7 +91,7 @@ namespace MLEM.Ui.Elements { this.caretBlinkTimer = 0; } - public override void Draw(GameTime time, SpriteBatch batch, float alpha, Point offset) { + public override void Draw(GameTime time, SpriteBatch batch, float alpha) { var tex = this.Texture; var color = Color.White * alpha; if (this.IsMouseOver) { @@ -99,9 +99,9 @@ namespace MLEM.Ui.Elements { tex = this.HoveredTexture; color = this.HoveredColor * alpha; } - batch.Draw(tex, this.DisplayArea.OffsetCopy(offset), color, this.Scale); + batch.Draw(tex, this.DisplayArea, color, this.Scale); - var textPos = this.DisplayArea.Location.ToVector2() + new Vector2(offset.X + this.TextOffsetX * this.Scale, offset.Y + this.DisplayArea.Height / 2); + var textPos = this.DisplayArea.Location.ToVector2() + new Vector2(this.TextOffsetX * this.Scale, this.DisplayArea.Height / 2); if (this.text.Length > 0 || this.IsSelected) { var caret = this.IsSelected && this.caretBlinkTimer >= 0.5F ? "|" : ""; var display = this.text.ToString(this.textStartIndex, this.text.Length - this.textStartIndex) + caret; @@ -109,7 +109,7 @@ namespace MLEM.Ui.Elements { } else if (this.PlaceholderText != null) { this.font.DrawCenteredString(batch, this.PlaceholderText, textPos, this.TextScale * this.Scale, Color.Gray * alpha, false, true); } - base.Draw(time, batch, alpha, offset); + base.Draw(time, batch, alpha); } public void SetText(object text, bool removeMismatching = false) { diff --git a/MLEM.Ui/UiSystem.cs b/MLEM.Ui/UiSystem.cs index 6b79c42..a0ce2df 100644 --- a/MLEM.Ui/UiSystem.cs +++ b/MLEM.Ui/UiSystem.cs @@ -74,9 +74,9 @@ namespace MLEM.Ui { root.Element.AndChildren(e => e.OnTextInput?.Invoke(e, key, character)); }); - this.OnSelectedElementDrawn = (element, time, batch, alpha, offset) => { + this.OnSelectedElementDrawn = (element, time, batch, alpha) => { if (!this.Controls.SelectedLastElementWithMouse && element.SelectionIndicator != null) { - batch.Draw(element.SelectionIndicator, element.DisplayArea.OffsetCopy(offset), Color.White * alpha); + batch.Draw(element.SelectionIndicator, element.DisplayArea, Color.White * alpha); } }; } @@ -100,7 +100,7 @@ namespace MLEM.Ui { if (root.Element.IsHidden) continue; batch.Begin(SpriteSortMode.Deferred, this.BlendState, this.SamplerState, null, null, null, root.Transform); - root.Element.Draw(time, batch, this.DrawAlpha * root.Element.DrawAlpha, Point.Zero); + root.Element.Draw(time, batch, this.DrawAlpha * root.Element.DrawAlpha); batch.End(); } }