diff --git a/SpriteMapEditor/Form1.Designer.cs b/SpriteMapEditor/Form1.Designer.cs index 25bfa18..cf870a4 100644 --- a/SpriteMapEditor/Form1.Designer.cs +++ b/SpriteMapEditor/Form1.Designer.cs @@ -60,6 +60,7 @@ this.loadMapDialog = new System.Windows.Forms.OpenFileDialog(); this.saveMapDialog = new System.Windows.Forms.SaveFileDialog(); this.spriteViewerPanel = new System.Windows.Forms.Panel(); + this.spriteSheetViewer = new SpriteMapEditor.PictureBoxWithInterpolationMode(); this.zoomInButton = new System.Windows.Forms.Button(); this.zoomOutButton = new System.Windows.Forms.Button(); this.zoomLabel = new System.Windows.Forms.Label(); @@ -71,6 +72,7 @@ this.saveProjectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveProjectAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.importSpriteSheetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.importSpriteMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exportSpriteMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -81,8 +83,6 @@ this.viewEditPanel = new System.Windows.Forms.Panel(); this.saveProjectDialog = new System.Windows.Forms.SaveFileDialog(); this.openProjectDialog = new System.Windows.Forms.OpenFileDialog(); - this.importSpriteSheetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.spriteSheetViewer = new SpriteMapEditor.PictureBoxWithInterpolationMode(); this.spriteListEditPanel.SuspendLayout(); this.spriteEditPanel.SuspendLayout(); this.originEditPanel.SuspendLayout(); @@ -93,9 +93,9 @@ ((System.ComponentModel.ISupportInitialize)(this.spriteYPosBox)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.spriteXPosBox)).BeginInit(); this.spriteViewerPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.spriteSheetViewer)).BeginInit(); this.menuStrip1.SuspendLayout(); this.viewEditPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spriteSheetViewer)).BeginInit(); this.SuspendLayout(); // // spriteList @@ -456,6 +456,23 @@ this.spriteViewerPanel.TabIndex = 14; this.spriteViewerPanel.Scroll += new System.Windows.Forms.ScrollEventHandler(this.spriteViewerPanel_Scroll); // + // spriteSheetViewer + // + this.spriteSheetViewer.BackgroundImage = global::SpriteMapEditor.Properties.Resources.transparentUI; + this.spriteSheetViewer.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.spriteSheetViewer.Location = new System.Drawing.Point(0, 0); + this.spriteSheetViewer.Margin = new System.Windows.Forms.Padding(0); + this.spriteSheetViewer.Name = "spriteSheetViewer"; + this.spriteSheetViewer.Size = new System.Drawing.Size(147, 143); + this.spriteSheetViewer.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.spriteSheetViewer.TabIndex = 13; + this.spriteSheetViewer.TabStop = false; + this.spriteSheetViewer.Paint += new System.Windows.Forms.PaintEventHandler(this.spriteSheetViewer_Paint); + this.spriteSheetViewer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.spriteSheetViewer_MouseDown); + this.spriteSheetViewer.MouseLeave += new System.EventHandler(this.spriteSheetViewer_MouseLeave); + this.spriteSheetViewer.MouseMove += new System.Windows.Forms.MouseEventHandler(this.spriteSheetViewer_MouseMove); + this.spriteSheetViewer.MouseUp += new System.Windows.Forms.MouseEventHandler(this.spriteSheetViewer_MouseUp); + // // zoomInButton // this.zoomInButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -555,6 +572,13 @@ this.toolStripMenuItem2.Name = "toolStripMenuItem2"; this.toolStripMenuItem2.Size = new System.Drawing.Size(181, 6); // + // importSpriteSheetToolStripMenuItem + // + this.importSpriteSheetToolStripMenuItem.Name = "importSpriteSheetToolStripMenuItem"; + this.importSpriteSheetToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.importSpriteSheetToolStripMenuItem.Text = "Import Sprite Sheet..."; + this.importSpriteSheetToolStripMenuItem.Click += new System.EventHandler(this.importSpriteSheetToolStripMenuItem_Click); + // // importSpriteMapToolStripMenuItem // this.importSpriteMapToolStripMenuItem.Enabled = false; @@ -641,30 +665,6 @@ this.openProjectDialog.Filter = "QUROGames Sprite Map Editor Project|*.smappr"; this.openProjectDialog.Title = "Open Project"; // - // importSpriteSheetToolStripMenuItem - // - this.importSpriteSheetToolStripMenuItem.Name = "importSpriteSheetToolStripMenuItem"; - this.importSpriteSheetToolStripMenuItem.Size = new System.Drawing.Size(184, 22); - this.importSpriteSheetToolStripMenuItem.Text = "Import Sprite Sheet..."; - this.importSpriteSheetToolStripMenuItem.Click += new System.EventHandler(this.importSpriteSheetToolStripMenuItem_Click); - // - // spriteSheetViewer - // - this.spriteSheetViewer.BackgroundImage = global::SpriteMapEditor.Properties.Resources.transparentUI; - this.spriteSheetViewer.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.spriteSheetViewer.Location = new System.Drawing.Point(0, 0); - this.spriteSheetViewer.Margin = new System.Windows.Forms.Padding(0); - this.spriteSheetViewer.Name = "spriteSheetViewer"; - this.spriteSheetViewer.Size = new System.Drawing.Size(147, 143); - this.spriteSheetViewer.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.spriteSheetViewer.TabIndex = 13; - this.spriteSheetViewer.TabStop = false; - this.spriteSheetViewer.Paint += new System.Windows.Forms.PaintEventHandler(this.spriteSheetViewer_Paint); - this.spriteSheetViewer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.spriteSheetViewer_MouseDown); - this.spriteSheetViewer.MouseLeave += new System.EventHandler(this.spriteSheetViewer_MouseLeave); - this.spriteSheetViewer.MouseMove += new System.Windows.Forms.MouseEventHandler(this.spriteSheetViewer_MouseMove); - this.spriteSheetViewer.MouseUp += new System.Windows.Forms.MouseEventHandler(this.spriteSheetViewer_MouseUp); - // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -695,11 +695,11 @@ ((System.ComponentModel.ISupportInitialize)(this.spriteYPosBox)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.spriteXPosBox)).EndInit(); this.spriteViewerPanel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.spriteSheetViewer)).EndInit(); this.menuStrip1.ResumeLayout(false); this.menuStrip1.PerformLayout(); this.viewEditPanel.ResumeLayout(false); this.viewEditPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spriteSheetViewer)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/SpriteMapEditor/Form1.cs b/SpriteMapEditor/Form1.cs index 21c17fd..c3f6c5e 100644 --- a/SpriteMapEditor/Form1.cs +++ b/SpriteMapEditor/Form1.cs @@ -84,17 +84,6 @@ namespace SpriteMapEditor private List preDragBounds; - private int drawingRectangleOffset - { - get - { - if (zoomLevel > 2) - return (zoomLevel - 1) / 2; - else - return 0; - } - } - public Form1() { InitializeComponent(); @@ -298,10 +287,8 @@ namespace SpriteMapEditor private Rectangle GetDrawingRect(Microsoft.Xna.Framework.Rectangle baseRect, bool outline = true) { var drawingRect = new Rectangle(baseRect.X, baseRect.Y, baseRect.Width, baseRect.Height); - drawingRect.X = drawingRect.X * zoomLevel - (zoomLevel - 1); - drawingRect.Y = drawingRect.Y * zoomLevel - (zoomLevel - 1); - drawingRect.X += drawingRectangleOffset; - drawingRect.Y += drawingRectangleOffset; + drawingRect.X = drawingRect.X * zoomLevel + 1; + drawingRect.Y = drawingRect.Y * zoomLevel + 1; drawingRect.Width *= zoomLevel; drawingRect.Height *= zoomLevel; @@ -314,10 +301,8 @@ namespace SpriteMapEditor private Point GetOriginDrawingPoint(SpriteMapRegion sprite) { var drawingPoint = new Point(sprite.Bounds.X, sprite.Bounds.Y); - drawingPoint.X = drawingPoint.X * zoomLevel - (zoomLevel - 1); - drawingPoint.Y = drawingPoint.Y * zoomLevel - (zoomLevel - 1); - drawingPoint.X += drawingRectangleOffset; - drawingPoint.Y += drawingRectangleOffset; + drawingPoint.X = drawingPoint.X * zoomLevel; + drawingPoint.Y = drawingPoint.Y * zoomLevel; drawingPoint.X += (int)sprite.Origin.X * zoomLevel; drawingPoint.Y += (int)sprite.Origin.Y * zoomLevel; return drawingPoint; @@ -352,11 +337,21 @@ namespace SpriteMapEditor InitializeMask(); foreach (SpriteMapRegion currentSprite in selectedSprites) { - for (int currentY = 0; currentY < currentSprite.Bounds.Height; currentY++) + var highlightRect = currentSprite.Bounds; + + //make sure highlight mask update doesn't attempt to write to pixels that are out of bounds + var oobX = highlightRect.X + highlightRect.Width - spriteSheet.Width; + var oobY = highlightRect.Y + highlightRect.Height - spriteSheet.Height; + if (oobX > 0) + highlightRect.Width -= oobX; + if (oobY > 0) + highlightRect.Height -= oobY; + + for (int currentY = 0; currentY < highlightRect.Height; currentY++) { - for (int currentX = 0; currentX < currentSprite.Bounds.Width; currentX++) + for (int currentX = 0; currentX < highlightRect.Width; currentX++) { - highlightMask.SetPixel(currentX + currentSprite.Bounds.X, currentY + currentSprite.Bounds.Y, Color.Transparent); + highlightMask.SetPixel(currentX + highlightRect.X, currentY + highlightRect.Y, Color.Transparent); } } } diff --git a/SpriteMapEditor/PictureBoxWithInterpolationMode.cs b/SpriteMapEditor/PictureBoxWithInterpolationMode.cs index 29249f7..b9d0f98 100644 --- a/SpriteMapEditor/PictureBoxWithInterpolationMode.cs +++ b/SpriteMapEditor/PictureBoxWithInterpolationMode.cs @@ -14,6 +14,7 @@ namespace SpriteMapEditor protected override void OnPaint(PaintEventArgs paintEventArgs) { paintEventArgs.Graphics.InterpolationMode = InterpolationMode; + paintEventArgs.Graphics.PixelOffsetMode = PixelOffsetMode.Half; base.OnPaint(paintEventArgs); } }