diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj
index e63a294bc2..7aec37fb59 100755
--- a/OpenRA.Game/OpenRA.Game.csproj
+++ b/OpenRA.Game/OpenRA.Game.csproj
@@ -181,6 +181,7 @@
+
diff --git a/OpenRA.Game/Widgets/ProgressBarWidget.cs b/OpenRA.Game/Widgets/ProgressBarWidget.cs
new file mode 100644
index 0000000000..f2fb407776
--- /dev/null
+++ b/OpenRA.Game/Widgets/ProgressBarWidget.cs
@@ -0,0 +1,40 @@
+#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;
+using System.Collections.Generic;
+
+namespace OpenRA.Widgets
+{
+ public class ProgressBarWidget : Widget
+ {
+ public int Percentage = 0;
+
+ public ProgressBarWidget() : base() {}
+ protected ProgressBarWidget(ProgressBarWidget widget)
+ : base(widget)
+ {
+ Percentage = widget.Percentage;
+ }
+
+ public override void DrawInner()
+ {
+ WidgetUtils.DrawPanel("dialog3", RenderBounds);
+
+ var barRect = new Rectangle(RenderBounds.X + 2, RenderBounds.Y + 2, Percentage * (RenderBounds.Width - 4) / 100, RenderBounds.Height - 4);
+ if (barRect.Width > 0)
+ WidgetUtils.DrawPanel("dialog2", barRect);
+ }
+
+ public override Widget Clone() { return new ProgressBarWidget(this); }
+ }
+}
\ No newline at end of file
diff --git a/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs
index 63315a036a..84656627e2 100755
--- a/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs
+++ b/OpenRA.Mods.RA/Widgets/Delegates/GameInitDelegate.cs
@@ -81,8 +81,13 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
var status = window.GetWidget("STATUS");
status.GetText = () => "Initializing...";
+ var progress = window.GetWidget("PROGRESS");
+
var dl = DownloadUrl(Info.PackageURL, Info.PackagePath,
- (_,i) => status.GetText = () => "{0}% {1}/{2} bytes".F(i.ProgressPercentage, i.BytesReceived, i.TotalBytesToReceive),
+ (_,i) => {
+ status.GetText = () => "Downloading {1}/{2} kB ({0}%)".F(i.ProgressPercentage, i.BytesReceived/1024, i.TotalBytesToReceive/1024);
+ progress.Percentage = i.ProgressPercentage;
+ },
(_,i) => status.GetText = () => "Download Complete");
window.GetWidget("CANCEL").OnMouseUp = mi => { CancelDownload(dl); ShowInstallMethodDialog(); return true; };
diff --git a/mods/cnc/chrome/gameinit.yaml b/mods/cnc/chrome/gameinit.yaml
index ec1aa20d21..ec1bd2a943 100644
--- a/mods/cnc/chrome/gameinit.yaml
+++ b/mods/cnc/chrome/gameinit.yaml
@@ -75,7 +75,8 @@ Background@INIT_DOWNLOAD:
Text:Downloading C&C Content
Align:Center
Bold:True
- TextField@PROGRESS:
+ ProgressBar@PROGRESS:
+ Id:PROGRESS
X:50
Y:65
Width:PARENT_RIGHT - 100