Added zoom to editor. Fixed crashes. Added sane tabbing to new map dialog. Added selection on tab - new map dialog

This commit is contained in:
Caleb Anderson
2010-09-09 02:50:03 -05:00
committed by Chris Forbes
parent ed5a3338fe
commit b284e82aa7
3 changed files with 130 additions and 41 deletions

22
OpenRA.Editor/NewMapDialog.Designer.cs generated Normal file → Executable file
View File

@@ -55,7 +55,7 @@
this.button2.Location = new System.Drawing.Point(229, 160); this.button2.Location = new System.Drawing.Point(229, 160);
this.button2.Name = "button2"; this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23); this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 12; this.button2.TabIndex = 7;
this.button2.Text = "OK"; this.button2.Text = "OK";
this.button2.UseVisualStyleBackColor = true; this.button2.UseVisualStyleBackColor = true;
// //
@@ -65,7 +65,7 @@
this.button1.Location = new System.Drawing.Point(310, 160); this.button1.Location = new System.Drawing.Point(310, 160);
this.button1.Name = "button1"; this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23); this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 13; this.button1.TabIndex = 8;
this.button1.Text = "Cancel"; this.button1.Text = "Cancel";
this.button1.UseVisualStyleBackColor = true; this.button1.UseVisualStyleBackColor = true;
// //
@@ -106,12 +106,13 @@
0}); 0});
this.cordonBottom.Name = "cordonBottom"; this.cordonBottom.Name = "cordonBottom";
this.cordonBottom.Size = new System.Drawing.Size(105, 20); this.cordonBottom.Size = new System.Drawing.Size(105, 20);
this.cordonBottom.TabIndex = 8; this.cordonBottom.TabIndex = 5;
this.cordonBottom.Value = new decimal(new int[] { this.cordonBottom.Value = new decimal(new int[] {
112, 112,
0, 0,
0, 0,
0}); 0});
this.cordonBottom.Enter += new System.EventHandler(this.SelectText);
// //
// cordonTop // cordonTop
// //
@@ -129,6 +130,7 @@
0, 0,
0, 0,
0}); 0});
this.cordonTop.Enter += new System.EventHandler(this.SelectText);
// //
// cordonRight // cordonRight
// //
@@ -140,12 +142,13 @@
0}); 0});
this.cordonRight.Name = "cordonRight"; this.cordonRight.Name = "cordonRight";
this.cordonRight.Size = new System.Drawing.Size(105, 20); this.cordonRight.Size = new System.Drawing.Size(105, 20);
this.cordonRight.TabIndex = 5; this.cordonRight.TabIndex = 4;
this.cordonRight.Value = new decimal(new int[] { this.cordonRight.Value = new decimal(new int[] {
112, 112,
0, 0,
0, 0,
0}); 0});
this.cordonRight.Enter += new System.EventHandler(this.SelectText);
// //
// cordonLeft // cordonLeft
// //
@@ -157,12 +160,13 @@
0}); 0});
this.cordonLeft.Name = "cordonLeft"; this.cordonLeft.Name = "cordonLeft";
this.cordonLeft.Size = new System.Drawing.Size(105, 20); this.cordonLeft.Size = new System.Drawing.Size(105, 20);
this.cordonLeft.TabIndex = 7; this.cordonLeft.TabIndex = 2;
this.cordonLeft.Value = new decimal(new int[] { this.cordonLeft.Value = new decimal(new int[] {
16, 16,
0, 0,
0, 0,
0}); 0});
this.cordonLeft.Enter += new System.EventHandler(this.SelectText);
// //
// height // height
// //
@@ -179,12 +183,13 @@
0}); 0});
this.height.Name = "height"; this.height.Name = "height";
this.height.Size = new System.Drawing.Size(105, 20); this.height.Size = new System.Drawing.Size(105, 20);
this.height.TabIndex = 6; this.height.TabIndex = 1;
this.height.Value = new decimal(new int[] { this.height.Value = new decimal(new int[] {
128, 128,
0, 0,
0, 0,
0}); 0});
this.height.Enter += new System.EventHandler(this.SelectText);
// //
// width // width
// //
@@ -201,12 +206,13 @@
0}); 0});
this.width.Name = "width"; this.width.Name = "width";
this.width.Size = new System.Drawing.Size(105, 20); this.width.Size = new System.Drawing.Size(105, 20);
this.width.TabIndex = 4; this.width.TabIndex = 0;
this.width.Value = new decimal(new int[] { this.width.Value = new decimal(new int[] {
128, 128,
0, 0,
0, 0,
0}); 0});
this.width.Enter += new System.EventHandler(this.SelectText);
// //
// label4 // label4
// //
@@ -224,7 +230,7 @@
this.theater.Location = new System.Drawing.Point(169, 121); this.theater.Location = new System.Drawing.Point(169, 121);
this.theater.Name = "theater"; this.theater.Name = "theater";
this.theater.Size = new System.Drawing.Size(216, 21); this.theater.Size = new System.Drawing.Size(216, 21);
this.theater.TabIndex = 15; this.theater.TabIndex = 6;
// //
// NewMapDialog // NewMapDialog
// //

5
OpenRA.Editor/NewMapDialog.cs Normal file → Executable file
View File

@@ -18,5 +18,10 @@ namespace OpenRA.Editor
{ {
InitializeComponent(); InitializeComponent();
} }
private void SelectText(object sender, System.EventArgs e)
{
(sender as NumericUpDown).Select(0, (sender as NumericUpDown).ToString().Length);
}
} }
} }

144
OpenRA.Editor/Surface.cs Normal file → Executable file
View File

@@ -25,6 +25,8 @@ namespace OpenRA.Editor
public Palette Palette { get; private set; } public Palette Palette { get; private set; }
int2 Offset; int2 Offset;
float Zoom = 1.0f;
BrushTemplate Brush; BrushTemplate Brush;
ActorTemplate Actor; ActorTemplate Actor;
ResourceTemplate Resource; ResourceTemplate Resource;
@@ -80,7 +82,34 @@ namespace OpenRA.Editor
Offset -= dx; Offset -= dx;
Invalidate(); Invalidate();
} }
protected override void OnMouseWheel(MouseEventArgs e)
{
base.OnMouseWheel(e);
Zoom *= e.Delta > 0 ? 4.0f / 3.0f : .75f;
Invalidate();
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
this.Parent.Focus();
Invalidate();
}
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseLeave(e);
this.Focus();
Invalidate();
}
protected override void OnMouseMove(MouseEventArgs e) protected override void OnMouseMove(MouseEventArgs e)
{ {
base.OnMouseMove(e); base.OnMouseMove(e);
@@ -96,7 +125,7 @@ namespace OpenRA.Editor
Erase(); Erase();
if (e.Button == MouseButtons.Left) if (e.Button == MouseButtons.Left)
Draw(); Draw();
Invalidate(); Invalidate();
} }
@@ -208,18 +237,27 @@ namespace OpenRA.Editor
void Erase() void Erase()
{ {
// Crash preventing
var BrushLocation = GetBrushLocation();
if (Map == null || BrushLocation.X >= Map.MapSize.X ||
BrushLocation.Y >= Map.MapSize.Y ||
BrushLocation.X < 0 ||
BrushLocation.Y < 0)
return;
Actor = null; Actor = null;
Brush = null; Brush = null;
Resource = null; Resource = null;
Waypoint = null; Waypoint = null;
var key = Map.Actors.FirstOrDefault(a => a.Value.Location() == GetBrushLocation()); var key = Map.Actors.FirstOrDefault(a => a.Value.Location() == BrushLocation);
if (key.Key != null) Map.Actors.Remove(key.Key); if (key.Key != null) Map.Actors.Remove(key.Key);
if (Map.MapResources[GetBrushLocation().X, GetBrushLocation().Y].type != 0) if (Map.MapResources[BrushLocation.X, BrushLocation.Y].type != 0)
{ {
Map.MapResources[GetBrushLocation().X, GetBrushLocation().Y] = new TileReference<byte, byte>(); Map.MapResources[BrushLocation.X, BrushLocation.Y] = new TileReference<byte, byte>();
var ch = new int2((GetBrushLocation().X) / ChunkSize, (GetBrushLocation().Y) / ChunkSize); var ch = new int2((BrushLocation.X) / ChunkSize, (BrushLocation.Y) / ChunkSize);
if (Chunks.ContainsKey(ch)) if (Chunks.ContainsKey(ch))
{ {
Chunks[ch].Dispose(); Chunks[ch].Dispose();
@@ -227,7 +265,7 @@ namespace OpenRA.Editor
} }
} }
var k = Map.Waypoints.FirstOrDefault(a => a.Value == GetBrushLocation()); var k = Map.Waypoints.FirstOrDefault(a => a.Value == BrushLocation);
if (k.Key != null) Map.Waypoints.Remove(k.Key); if (k.Key != null) Map.Waypoints.Remove(k.Key);
AfterChange(); AfterChange();
@@ -358,28 +396,56 @@ namespace OpenRA.Editor
int2 GetBrushLocation() int2 GetBrushLocation()
{ {
var v = MousePos - Offset; var vX = (int)Math.Floor((MousePos.X - Offset.X) / Zoom);
return new int2(v.X / 24, v.Y / 24); var vY = (int)Math.Floor((MousePos.Y - Offset.Y) / Zoom);
return new int2(vX / 24, vY / 24);
} }
void DrawActor(System.Drawing.Graphics g, int2 p, ActorTemplate t) void DrawActor(System.Drawing.Graphics g, int2 p, ActorTemplate t)
{ {
g.DrawImage(t.Bitmap, float OffsetX = t.Centered ? t.Bitmap.Width / 2 - 12 : 0;
((24 * p + Offset float DrawX = 24 * p.X * Zoom + Offset.X - OffsetX;
- (t.Centered
? new int2(t.Bitmap.Width / 2 - 12, t.Bitmap.Height / 2 - 12) float OffsetY = t.Centered ? t.Bitmap.Height / 2 - 12 : 0;
: int2.Zero)).ToPoint())); float DrawY = 24 * p.Y * Zoom + Offset.Y - OffsetY;
float width = t.Bitmap.Width * Zoom;
float height = t.Bitmap.Height * Zoom;
RectangleF sourceRect = new RectangleF(0, 0, t.Bitmap.Width, t.Bitmap.Height);
RectangleF destRect = new RectangleF(DrawX, DrawY, width, height);
g.DrawImage(t.Bitmap, destRect, sourceRect, GraphicsUnit.Pixel);
}
void DrawImage(System.Drawing.Graphics g, Bitmap bmp, int2 location)
{
float OffsetX = bmp.Width / 2 - 12;
float DrawX = 24 * location.X * Zoom + Offset.X - OffsetX;
float OffsetY = bmp.Height / 2 - 12;
float DrawY = 24 * location.Y * Zoom + Offset.Y - OffsetY;
float width = bmp.Width * Zoom;
float height = bmp.Height * Zoom;
RectangleF sourceRect = new RectangleF(0, 0, bmp.Width, bmp.Height);
RectangleF destRect = new RectangleF(DrawX, DrawY, width, height);
g.DrawImage(bmp, destRect, sourceRect, GraphicsUnit.Pixel);
} }
void DrawActorBorder(System.Drawing.Graphics g, int2 p, ActorTemplate t) void DrawActorBorder(System.Drawing.Graphics g, int2 p, ActorTemplate t)
{ {
var origin = (24 * p + Offset float OffsetX = t.Centered ? t.Bitmap.Width / 2 - 12 : 0;
- (t.Centered float DrawX = 24 * p.X * Zoom + Offset.X - OffsetX;
? new int2(t.Bitmap.Width / 2 - 12, t.Bitmap.Height / 2 - 12)
: int2.Zero)).ToPoint(); float OffsetY = t.Centered ? t.Bitmap.Height / 2 - 12 : 0;
float DrawY = 24 * p.Y * Zoom + Offset.Y - OffsetY;
float width = t.Bitmap.Width * Zoom;
float height = t.Bitmap.Height * Zoom;
RectangleF sourceRect = new RectangleF(0, 0, t.Bitmap.Width, t.Bitmap.Height);
RectangleF destRect = new RectangleF(DrawX, DrawY, width, height);
g.DrawRectangle(CordonPen, g.DrawRectangle(CordonPen,
origin.X, origin.Y, DrawX, DrawY,
t.Bitmap.Width, t.Bitmap.Height ); t.Bitmap.Width * Zoom, t.Bitmap.Height * Zoom);
} }
protected override void OnPaint(PaintEventArgs e) protected override void OnPaint(PaintEventArgs e)
@@ -392,37 +458,49 @@ namespace OpenRA.Editor
{ {
var x = new int2(u/ChunkSize,v/ChunkSize); var x = new int2(u/ChunkSize,v/ChunkSize);
if (!Chunks.ContainsKey(x)) Chunks[x] = RenderChunk(u / ChunkSize, v / ChunkSize); if (!Chunks.ContainsKey(x)) Chunks[x] = RenderChunk(u / ChunkSize, v / ChunkSize);
e.Graphics.DrawImage(Chunks[x], (24 * ChunkSize * x + Offset).ToPoint());
Bitmap bmp = Chunks[x];
float DrawX = 24.0f * (float)ChunkSize * (float)x.X * Zoom + Offset.X;
float DrawY = 24.0f * (float)ChunkSize * (float)x.Y * Zoom + Offset.Y;
RectangleF sourceRect = new RectangleF(0, 0, bmp.Width, bmp.Height);
RectangleF destRect = new RectangleF(DrawX, DrawY, bmp.Width * Zoom, bmp.Height * Zoom);
e.Graphics.DrawImage(bmp, destRect, sourceRect, GraphicsUnit.Pixel);
} }
e.Graphics.DrawRectangle(CordonPen, e.Graphics.DrawRectangle(CordonPen,
new Rectangle(Map.XOffset * 24 + Offset.X, Map.YOffset * 24 + Offset.Y, Map.Width * 24, Map.Height * 24)); Map.XOffset * 24 * Zoom + Offset.X,
Map.YOffset * 24 * Zoom + Offset.Y,
Map.Width * 24 * Zoom,
Map.Height * 24 * Zoom);
foreach (var ar in Map.Actors) foreach (var ar in Map.Actors)
DrawActor(e.Graphics, ar.Value.Location(), ActorTemplates[ar.Value.Type]); DrawActor(e.Graphics, ar.Value.Location(), ActorTemplates[ar.Value.Type]);
foreach (var wp in Map.Waypoints) foreach (var wp in Map.Waypoints)
e.Graphics.DrawRectangle(Pens.LimeGreen, new Rectangle( e.Graphics.DrawRectangle(Pens.LimeGreen,
24 * wp.Value.X + Offset.X + 4, 24 * wp.Value.X * Zoom + Offset.X + 4,
24 * wp.Value.Y + Offset.Y + 4, 24 * wp.Value.Y * Zoom + Offset.Y + 4,
16, 16)); 16 * Zoom, 16 * Zoom);
if (Brush != null) if (Brush != null)
e.Graphics.DrawImage(Brush.Bitmap, e.Graphics.DrawImage(Brush.Bitmap,
(24 * GetBrushLocation() + Offset).ToPoint()); 24 * GetBrushLocation().X * Zoom + Offset.X,
24 * GetBrushLocation().Y * Zoom + Offset.Y,
Brush.Bitmap.Width * Zoom,
Brush.Bitmap.Height * Zoom);
if (Actor != null) if (Actor != null)
DrawActor(e.Graphics, GetBrushLocation(), Actor); DrawActor(e.Graphics, GetBrushLocation(), Actor);
if (Resource != null) if (Resource != null)
e.Graphics.DrawImage(Resource.Bitmap, DrawImage(e.Graphics, Resource.Bitmap, GetBrushLocation());
(24 * GetBrushLocation() + Offset).ToPoint());
if (Waypoint != null) if (Waypoint != null)
e.Graphics.DrawRectangle(Pens.LimeGreen, new Rectangle( e.Graphics.DrawRectangle(Pens.LimeGreen,
24 * GetBrushLocation().X + Offset.X + 4, 24 * GetBrushLocation().X * Zoom + Offset.X + 4,
24 * GetBrushLocation().Y + Offset.Y + 4, 24 * GetBrushLocation().Y * Zoom + Offset.Y + 4,
16, 16)); 16 * Zoom, 16 * Zoom);
if (Brush == null && Actor == null && Resource == null) if (Brush == null && Actor == null && Resource == null)
{ {