diff --git a/SpriteLibrary/SpriteEntryForm.Designer.cs b/SpriteLibrary/SpriteEntryForm.Designer.cs index d494504..b800d54 100644 --- a/SpriteLibrary/SpriteEntryForm.Designer.cs +++ b/SpriteLibrary/SpriteEntryForm.Designer.cs @@ -81,6 +81,9 @@ this.pbImageField.Size = new System.Drawing.Size(213, 306); this.pbImageField.TabIndex = 0; this.pbImageField.TabStop = false; + this.pbImageField.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pbImageField_MouseDown); + this.pbImageField.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pbImageField_MouseMove); + this.pbImageField.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pbImageField_MouseUp); // // cbStartingImage // @@ -105,9 +108,9 @@ this.lblChosenArea.AutoSize = true; this.lblChosenArea.Location = new System.Drawing.Point(129, 44); this.lblChosenArea.Name = "lblChosenArea"; - this.lblChosenArea.Size = new System.Drawing.Size(46, 17); + this.lblChosenArea.Size = new System.Drawing.Size(86, 17); this.lblChosenArea.TabIndex = 3; - this.lblChosenArea.Text = "label2"; + this.lblChosenArea.Text = "ChosenArea"; // // tbNumFrames // diff --git a/SpriteLibrary/SpriteEntryForm.cs b/SpriteLibrary/SpriteEntryForm.cs index ea8c881..1c0e422 100644 --- a/SpriteLibrary/SpriteEntryForm.cs +++ b/SpriteLibrary/SpriteEntryForm.cs @@ -27,6 +27,10 @@ namespace SpriteLibrary int CurrentSIIndex = -1; //The information item we are editing. -1 means it is a new one. int CurrentSIAnimation = -1; + bool WeAreDragging = false; + Point DragStart = new Point(-1, -1); + Rectangle ChosenArea = new Rectangle(1,1,100,100); + internal SpriteEntryForm(SpriteDatabase theDatabase, List ListToWorkOn, Size GridSize) { InitializeComponent(); @@ -109,9 +113,15 @@ namespace SpriteLibrary if (!TCTabPages.TabPages.Contains(tpMirrorRotate)) TCTabPages.TabPages.Add(tpMirrorRotate); } + UpdateChosenAreaLabel(); ResumeLayout(); } + private void UpdateChosenAreaLabel() + { + lblChosenArea.Text = ChosenArea.X + "," + ChosenArea.Y + "," + ChosenArea.Width + "," + ChosenArea.Height; + } + private void SetUpEmptyInfo() { TempInformation = new SpriteInfo(); @@ -176,9 +186,63 @@ namespace SpriteLibrary } } + /// + /// Given two locations that we have clicked on, find the area we have selected + /// + /// + /// + /// + private Rectangle AreaFromGridPoints(Point Start, Point End) + { + //Get the points translated from locations on the picturebox + Point OneImagePoint = MyController.ReturnPointAdjustedForImage(Start); + Point TwoImagePoint = MyController.ReturnPointAdjustedForImage(End); + //Now, shrink them to figure out which grid points we have chosen + Point OneGridPoint = new Point(OneImagePoint.X / SnapGridSize.Width, OneImagePoint.Y / SnapGridSize.Height); + Point TwoGridPoint = new Point(TwoImagePoint.X / SnapGridSize.Width, TwoImagePoint.Y / SnapGridSize.Height); + //Find the top-left point and the bottom-right point + Point StartGridPoint = new Point(Math.Min(OneGridPoint.X, TwoGridPoint.X), Math.Min(OneGridPoint.Y, TwoGridPoint.Y)); + Point EndGridPoint = new Point(Math.Max(OneGridPoint.X, TwoGridPoint.X), Math.Max(OneGridPoint.Y, TwoGridPoint.Y)); + //Translate them back into points on the image + Point ReturnSPoint = new Point(StartGridPoint.X * SnapGridSize.Width, StartGridPoint.Y * SnapGridSize.Height); + Point ReturnEPoint = new Point((EndGridPoint.X +1) * SnapGridSize.Width, (EndGridPoint.Y +1) * SnapGridSize.Height); + //Change it into a rectangle and return it + Rectangle ReturnRec = new Rectangle(ReturnSPoint.X, ReturnSPoint.Y, ReturnEPoint.X - ReturnSPoint.X, ReturnEPoint.Y - ReturnSPoint.Y); + return ReturnRec; + } + private void SpriteEntryForm_FormClosing(object sender, FormClosingEventArgs e) { myDatabase.Save(); //try saving the file } + + private void pbImageField_MouseMove(object sender, MouseEventArgs e) + { + //If we are dragging, process the dragging + if (WeAreDragging) + { + ChosenArea = AreaFromGridPoints(DragStart, e.Location); + UpdateChosenAreaLabel(); + } + } + + private void pbImageField_MouseDown(object sender, MouseEventArgs e) + { + //When the mouse goes down, we note that we are trying to drag + WeAreDragging = true; + DragStart = e.Location; + } + + private void pbImageField_MouseUp(object sender, MouseEventArgs e) + { + //When the mouse goes up, stop dragging and update + if(WeAreDragging) + { + ChosenArea = AreaFromGridPoints(DragStart, e.Location); + UpdateChosenAreaLabel(); + } + WeAreDragging = false; + + } } }