diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj
index dbe245d211..374a043b92 100755
--- a/OpenRA.Game/OpenRA.Game.csproj
+++ b/OpenRA.Game/OpenRA.Game.csproj
@@ -217,6 +217,7 @@
+
diff --git a/OpenRA.Game/Widgets/PasswordFieldWidget.cs b/OpenRA.Game/Widgets/PasswordFieldWidget.cs
new file mode 100644
index 0000000000..ee8c127667
--- /dev/null
+++ b/OpenRA.Game/Widgets/PasswordFieldWidget.cs
@@ -0,0 +1,61 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2010 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see LICENSE.
+ */
+#endregion
+
+using System;
+using System.Drawing;
+using OpenRA.Graphics;
+
+namespace OpenRA.Widgets
+{
+ public class PasswordFieldWidget : TextFieldWidget
+ {
+ public PasswordFieldWidget()
+ : base()
+ {
+ }
+
+ protected PasswordFieldWidget(PasswordFieldWidget widget)
+ : base(widget)
+ {
+
+ }
+
+ public override void DrawInner( WorldRenderer wr )
+ {
+ int margin = 5;
+ var font = (Bold) ? Game.Renderer.BoldFont : Game.Renderer.RegularFont;
+ var cursor = (showCursor && Focused) ? "|" : "";
+ var textSize = font.Measure(new string('*', Text.Length) + "|");
+ var pos = RenderOrigin;
+
+ WidgetUtils.DrawPanel("dialog3",
+ new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height));
+
+ // Inset text by the margin and center vertically
+ var textPos = pos + new int2(margin, (Bounds.Height - textSize.Y) / 2 - VisualHeight);
+
+ // Right align when editing and scissor when the text overflows
+ if (textSize.X > Bounds.Width - 2 * margin)
+ {
+ if (Focused)
+ textPos += new int2(Bounds.Width - 2 * margin - textSize.X, 0);
+
+ Game.Renderer.EnableScissor(pos.X + margin, pos.Y, Bounds.Width - 2 * margin, Bounds.Bottom);
+ }
+
+ font.DrawText(new string('*', Text.Length) + cursor, textPos, Color.White);
+
+ if (textSize.X > Bounds.Width - 2 * margin)
+ Game.Renderer.DisableScissor();
+ }
+
+ public override Widget Clone() { return new PasswordFieldWidget(this); }
+ }
+}
\ No newline at end of file
diff --git a/OpenRA.Game/Widgets/TextFieldWidget.cs b/OpenRA.Game/Widgets/TextFieldWidget.cs
index faed63b7e3..8174bf3f90 100644
--- a/OpenRA.Game/Widgets/TextFieldWidget.cs
+++ b/OpenRA.Game/Widgets/TextFieldWidget.cs
@@ -96,8 +96,8 @@ namespace OpenRA.Widgets
}
}
- int blinkCycle = 10;
- bool showCursor = true;
+ protected int blinkCycle = 10;
+ protected bool showCursor = true;
public override void Tick()
{
if (--blinkCycle <= 0)