Update drag info

This commit is contained in:
Tim Young 2017-09-17 17:07:39 -05:00
parent a415e89cd0
commit 7dea96b266
2 changed files with 69 additions and 2 deletions

View File

@ -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
//

View File

@ -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<SpriteInfo> 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
}
}
/// <summary>
/// Given two locations that we have clicked on, find the area we have selected
/// </summary>
/// <param name="Start"></param>
/// <param name="End"></param>
/// <returns></returns>
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;
}
}
}