Unfail dialog drawing

This commit is contained in:
Paul Chote
2010-02-05 22:20:51 +13:00
parent 8090dda9ce
commit 4c5f02b801
3 changed files with 61 additions and 85 deletions

View File

@@ -29,8 +29,6 @@ namespace OpenRa
// Options menu (to be refactored) // Options menu (to be refactored)
bool optionsPressed = false; bool optionsPressed = false;
readonly Sprite[] optionsSprites;
readonly Sprite[] panelSprites;
// Buttons // Buttons
readonly Animation repairButton; readonly Animation repairButton;
@@ -98,25 +96,6 @@ namespace OpenRa
optionsButton = new Animation("tabs"); optionsButton = new Animation("tabs");
optionsButton.PlayRepeating("left-normal"); optionsButton.PlayRepeating("left-normal");
optionsSprites = new[]
{
SpriteSheetBuilder.LoadAllSprites("dd-top")[0],
SpriteSheetBuilder.LoadAllSprites("dd-botm")[0],
SpriteSheetBuilder.LoadAllSprites("dd-left")[0],
SpriteSheetBuilder.LoadAllSprites("dd-right")[0],
SpriteSheetBuilder.LoadAllSprites("dd-crnr")[0],
SpriteSheetBuilder.LoadAllSprites("dd-crnr")[1],
SpriteSheetBuilder.LoadAllSprites("dd-crnr")[2],
SpriteSheetBuilder.LoadAllSprites("dd-crnr")[3],
SpriteSheetBuilder.LoadAllSprites("dd-bkgnd")[0],
};
panelSprites = Graphics.Util.MakeArray(8,
n => ChromeProvider.GetImage(renderer, "panel", n.ToString()));
tabSprites = Rules.Info.Values tabSprites = Rules.Info.Values
.Where(u => u.Traits.Contains<BuildableInfo>()) .Where(u => u.Traits.Contains<BuildableInfo>())
.ToDictionary( .ToDictionary(
@@ -211,7 +190,7 @@ namespace OpenRa
return; return;
var r = new Rectangle((Game.viewport.Width - 400) / 2, Game.viewport.Height - 110, 400, 100); var r = new Rectangle((Game.viewport.Width - 400) / 2, Game.viewport.Height - 110, 400, 100);
DrawDialogBackground(r, optionsSprites, true); DrawDialogBackground(r, "dialog");
DrawCentered("Downloading: {0} (+{1} more)".F( DrawCentered("Downloading: {0} (+{1} more)".F(
PackageDownloader.CurrentPackage.Split(':')[0], PackageDownloader.CurrentPackage.Split(':')[0],
@@ -220,7 +199,7 @@ namespace OpenRa
Color.White); Color.White);
DrawDialogBackground(new Rectangle(r.Left + 30, r.Top + 50, r.Width - 60, 20), DrawDialogBackground(new Rectangle(r.Left + 30, r.Top + 50, r.Width - 60, 20),
panelSprites, false); "panel");
var x1 = r.Left + 35; var x1 = r.Left + 35;
var x2 = r.Right - 35; var x2 = r.Right - 35;
@@ -240,7 +219,7 @@ namespace OpenRa
var w = renderer.MeasureText(text).X + 120; var w = renderer.MeasureText(text).X + 120;
var h = 100; var h = 100;
var r = new Rectangle((Game.viewport.Width - w) / 2, (Game.viewport.Height - h) / 2, w, h); var r = new Rectangle((Game.viewport.Width - w) / 2, (Game.viewport.Height - h) / 2, w, h);
DrawDialogBackground(r, optionsSprites, true); DrawDialogBackground(r, "dialog");
DrawCentered(text, new int2(Game.viewport.Width / 2, Game.viewport.Height / 2 - 8), Color.White); DrawCentered(text, new int2(Game.viewport.Width / 2, Game.viewport.Height / 2 - 8), Color.White);
// don't allow clicks through the dialog // don't allow clicks through the dialog
@@ -274,7 +253,7 @@ namespace OpenRa
void AddUiButton(int2 pos, string text, Action<bool> a) void AddUiButton(int2 pos, string text, Action<bool> a)
{ {
var rect = new Rectangle(pos.X - 160 / 2, pos.Y - 4, 160, 24); var rect = new Rectangle(pos.X - 160 / 2, pos.Y - 4, 160, 24);
DrawDialogBackground( rect, panelSprites, false ); DrawDialogBackground( rect, "panel");
DrawCentered(text, new int2(pos.X, pos.Y), Color.White); DrawCentered(text, new int2(pos.X, pos.Y), Color.White);
AddButton(rect, a); AddButton(rect, a);
} }
@@ -284,11 +263,11 @@ namespace OpenRa
var w = 800; var w = 800;
var h = 600; var h = 600;
var r = new Rectangle( (Game.viewport.Width - w) / 2, (Game.viewport.Height - h) / 2, w, h ); var r = new Rectangle( (Game.viewport.Width - w) / 2, (Game.viewport.Height - h) / 2, w, h );
DrawDialogBackground(r, optionsSprites, true); DrawDialogBackground(r, "dialog");
DrawCentered("Choose Map", new int2(r.Left + w / 2, r.Top + 20), Color.White); DrawCentered("Choose Map", new int2(r.Left + w / 2, r.Top + 20), Color.White);
DrawDialogBackground(new Rectangle(r.Right - 200 - 160 / 2, DrawDialogBackground(new Rectangle(r.Right - 200 - 160 / 2,
r.Bottom - 50 + 6, 160, 24), panelSprites, false); r.Bottom - 50 + 6, 160, 24), "panel");
AddUiButton(new int2(r.Left + 200, r.Bottom - 40), "OK", AddUiButton(new int2(r.Left + 200, r.Bottom - 40), "OK",
_ => _ =>
@@ -313,7 +292,7 @@ namespace OpenRa
} }
var mapRect = new Rectangle(r.Right - 280, r.Top + 30, 256, 256); var mapRect = new Rectangle(r.Right - 280, r.Top + 30, 256, 256);
DrawDialogBackground(mapRect, panelSprites, false); DrawDialogBackground(mapRect, "panel");
rgbaRenderer.DrawSprite(mapChooserSprite, rgbaRenderer.DrawSprite(mapChooserSprite,
new float2(mapRect.Location) + new float2(4, 4), new float2(mapRect.Location) + new float2(4, 4),
"chrome", "chrome",
@@ -326,7 +305,7 @@ namespace OpenRa
{ {
var itemRect = new Rectangle(r.Left + 50, y - 2, r.Width - 340, 20); var itemRect = new Rectangle(r.Left + 50, y - 2, r.Width - 340, 20);
if (map == currentMap) if (map == currentMap)
DrawDialogBackground(itemRect, panelSprites, false); DrawDialogBackground(itemRect, "panel");
renderer.DrawText(map.Map.Title, new int2(r.Left + 60, y), Color.White); renderer.DrawText(map.Map.Title, new int2(r.Left + 60, y), Color.White);
var closureMap = map; var closureMap = map;
@@ -390,16 +369,11 @@ namespace OpenRa
var w = 800; var w = 800;
var h = 600; var h = 600;
var r = new Rectangle( (Game.viewport.Width - w) / 2, (Game.viewport.Height - h) / 2, w, h ); var r = new Rectangle( (Game.viewport.Width - w) / 2, (Game.viewport.Height - h) / 2, w, h );
DrawDialogBackground(r, optionsSprites, true); DrawDialogBackground(r, "dialog");
DrawCentered("OpenRA Multiplayer Lobby", new int2(r.Left + w / 2, r.Top + 20), Color.White); DrawCentered("OpenRA Multiplayer Lobby", new int2(r.Left + w / 2, r.Top + 20), Color.White);
DrawDialogBackground(new Rectangle(r.Left + 20, r.Top + 40, r.Width - 357, r.Bottom - 273 - r.Top - 40), DrawDialogBackground(new Rectangle(r.Right - 324, r.Top + 43, 304, 244),"panel");
panelSprites, false); var minimapRect = new Rectangle(r.Right - 322, r.Top + 45, 300, 240);
DrawDialogBackground(new Rectangle(r.Right - 330, r.Top + 40, 310, r.Bottom - 273 - r.Top - 40),
panelSprites, false);
var minimapRect = new Rectangle(r.Right - 325, r.Top + 45, 300, 240);
world.Minimap.Update(); world.Minimap.Update();
world.Minimap.Draw(minimapRect, true); world.Minimap.Draw(minimapRect, true);
@@ -407,23 +381,14 @@ namespace OpenRa
if (Game.world.LocalPlayer.Index == 0) if (Game.world.LocalPlayer.Index == 0)
{ {
// we are host // we are host
DrawDialogBackground(new Rectangle(minimapRect.Left + (minimapRect.Width - 160) / 2, AddUiButton(new int2(r.Right - 100, r.Top + 300), "Change Map",
minimapRect.Bottom + 6, 160, 24), panelSprites, false); _ =>
{
DrawCentered("Change Map...", new int2(minimapRect.Left + minimapRect.Width / 2, showMapChooser = true;
minimapRect.Bottom + 10), Color.White); currentMap = mapList.Value.Single(
m => m.Filename == Game.LobbyInfo.GlobalSettings.Map.ToLowerInvariant());
AddButton(new RectangleF(minimapRect.Left, minimapRect.Bottom, minimapRect.Width, 32), mapPreviewDirty = true;
isLmb => });
{
if (isLmb)
{
showMapChooser = true;
currentMap = mapList.Value.Single(
m => m.Filename == Game.LobbyInfo.GlobalSettings.Map.ToLowerInvariant());
mapPreviewDirty = true;
}
});
} }
renderer.DrawText2("Name", new int2(r.Left + 40, r.Top + 50), Color.White); renderer.DrawText2("Name", new int2(r.Left + 40, r.Top + 50), Color.White);
@@ -441,9 +406,9 @@ namespace OpenRa
{ {
// todo: name editing // todo: name editing
var nameRect = new Rectangle(r.Left + 30, y - 2, 185, 22); var nameRect = new Rectangle(r.Left + 30, y - 2, 185, 22);
DrawDialogBackground(nameRect, panelSprites, false); DrawDialogBackground(nameRect, "panel");
DrawDialogBackground(paletteRect, panelSprites, false); DrawDialogBackground(paletteRect, "panel");
AddButton(paletteRect, CyclePalette); AddButton(paletteRect, CyclePalette);
// TODO: Render using the System.Drawing.Color (Player.PlayerColors[client.PaletteIndex].c) // TODO: Render using the System.Drawing.Color (Player.PlayerColors[client.PaletteIndex].c)
@@ -451,11 +416,11 @@ namespace OpenRa
Player.PlayerColors[client.PaletteIndex].a); Player.PlayerColors[client.PaletteIndex].a);
var raceRect = new Rectangle(r.Left + 290, y - 2, 65, 22); var raceRect = new Rectangle(r.Left + 290, y - 2, 65, 22);
DrawDialogBackground(raceRect, panelSprites, false); DrawDialogBackground(raceRect, "panel");
AddButton(raceRect, CycleRace); AddButton(raceRect, CycleRace);
var readyRect = new Rectangle(r.Left + 360, y - 2, 95, 22); var readyRect = new Rectangle(r.Left + 360, y - 2, 95, 22);
DrawDialogBackground(readyRect, panelSprites, false); DrawDialogBackground(readyRect, "panel");
AddButton(readyRect, CycleReady); AddButton(readyRect, CycleReady);
} }
@@ -475,8 +440,8 @@ namespace OpenRa
var typingBox = new Rectangle(r.Left + 20, r.Bottom - 47, r.Width - 40, 27); var typingBox = new Rectangle(r.Left + 20, r.Bottom - 47, r.Width - 40, 27);
var chatBox = new Rectangle(r.Left + 20, r.Bottom - 269, r.Width - 40, 220); var chatBox = new Rectangle(r.Left + 20, r.Bottom - 269, r.Width - 40, 220);
DrawDialogBackground(typingBox, panelSprites, false); DrawDialogBackground(typingBox, "panel");
DrawDialogBackground(chatBox, panelSprites, false); DrawDialogBackground(chatBox, "panel");
DrawChat(typingBox, chatBox); DrawChat(typingBox, chatBox);
@@ -728,39 +693,39 @@ namespace OpenRa
var height = 300; var height = 300;
DrawDialogBackground(new Rectangle((Game.viewport.Width - width)/ 2, (Game.viewport.Height-height) / 2, DrawDialogBackground(new Rectangle((Game.viewport.Width - width)/ 2, (Game.viewport.Height-height) / 2,
width, height), optionsSprites, true); width, height), "dialog");
} }
} }
void DrawDialogBackground(Rectangle r, Sprite[] ss, bool isShp) void DrawDialogBackground(Rectangle r, string collection)
{ {
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height); renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height);
var sr = isShp ? shpRenderer : rgbaRenderer; string[] images = { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
var ss = Graphics.Util.MakeArray(9, n => ChromeProvider.GetImage(renderer, collection,images[n]));
if (ss.Length > 8)
for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X ) for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X )
for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y ) for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y )
sr.DrawSprite(ss[8], new float2(x, y), "chrome"); rgbaRenderer.DrawSprite(ss[8], new float2(x, y), "chrome");
//draw borders //draw borders
for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[2].size.Y) for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[2].size.Y)
{ {
sr.DrawSprite(ss[2], new float2(r.Left, y), "chrome"); rgbaRenderer.DrawSprite(ss[2], new float2(r.Left, y), "chrome");
sr.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome"); rgbaRenderer.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome");
} }
for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[0].size.X) for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[0].size.X)
{ {
sr.DrawSprite(ss[0], new float2(x, r.Top), "chrome"); rgbaRenderer.DrawSprite(ss[0], new float2(x, r.Top), "chrome");
sr.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome"); rgbaRenderer.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome");
} }
sr.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome"); rgbaRenderer.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome");
sr.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome"); rgbaRenderer.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome");
sr.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome"); rgbaRenderer.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome");
sr.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome"); rgbaRenderer.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome");
sr.Flush(); rgbaRenderer.Flush();
renderer.Device.DisableScissor(); renderer.Device.DisableScissor();
} }

View File

@@ -122,14 +122,25 @@
<image name="soviet-Ship" x="134" y="200" width="27" height="41" /> <image name="soviet-Ship" x="134" y="200" width="27" height="41" />
</collection> </collection>
<collection name="panel" src="widget-panel.png"> <collection name="panel" src="widget-panel.png">
<image name="0" x="4" y="0" width="248" height="4" /> <image name="border-t" x="4" y="0" width="248" height="4" />
<image name="1" x="4" y="252" width="248" height="4" /> <image name="border-b" x="4" y="252" width="248" height="4" />
<image name="2" x="0" y="4" width="4" height="248" /> <image name="border-l" x="0" y="4" width="4" height="248" />
<image name="3" x="252" y="4" width="4" height="248" /> <image name="border-r" x="252" y="4" width="4" height="248" />
<image name="4" x="0" y="0" width="4" height="4" /> <image name="corner-tl" x="0" y="0" width="4" height="4" />
<image name="5" x="252" y="0" width="4" height="4" /> <image name="corner-tr" x="252" y="0" width="4" height="4" />
<image name="6" x="0" y="252" width="4" height="4" /> <image name="corner-bl" x="0" y="252" width="4" height="4" />
<image name="7" x="252" y="252" width="4" height="4" /> <image name="corner-br" x="252" y="252" width="4" height="4" />
<image name="background" x="4" y="4" width="248" height="248" />
</collection>
<collection name="dialog" src="dialog.png">
<image name="background" x="0" y="0" width="624" height="384" />
<image name="border-r" x="624" y="0" width="14" height="200" />
<image name="border-l" x="638" y="0" width="14" height="200" />
<image name="border-b" x="46" y="399" width="320" height="16" />
<image name="border-t" x="46" y="384" width="320" height="16" />
<image name="corner-tl" x="0" y="384" width="23" height="24" />
<image name="corner-tr" x="23" y="384" width="23" height="24" />
<image name="corner-bl" x="0" y="407" width="23" height="24" />
<image name="corner-br" x="23" y="407" width="23" height="24" />
</collection> </collection>
</chrome> </chrome>

BIN
dialog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB