/// <summary> /// /// </summary> /// <param name="region"></param> private void SetRegion(CornerRegionType region) { _region = region; switch (region) { case CornerRegionType.TopLeft: btnCSTL.PerformClick(); break; case CornerRegionType.TopCenter: btnCSTC.PerformClick(); break; case CornerRegionType.TopRight: btnCSTR.PerformClick(); break; case CornerRegionType.MiddleLeft: btnCSML.PerformClick(); break; case CornerRegionType.MiddleCenter: btnCSMC.PerformClick(); break; case CornerRegionType.MiddleRight: btnCSMR.PerformClick(); break; case CornerRegionType.BottomLeft: btnCSBL.PerformClick(); break; case CornerRegionType.BottomCenter: btnCSBC.PerformClick(); break; case CornerRegionType.BottomRight: btnCSBR.PerformClick(); break; default: btnCSTL.Checked = false; btnCSTC.Checked = false; btnCSTR.Checked = false; btnCSML.Checked = false; btnCSMC.Checked = false; btnCSMR.Checked = false; btnCSBL.Checked = false; btnCSBC.Checked = false; btnCSBR.Checked = false; break; } }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Viewer_MouseUp(object sender, MouseEventArgs e) { if (e.Clicks >= 1 && e.Button == MouseButtons.Right) { Viewer.SelectNone(); } mSelection = false; mMoveRegion = false; mResizeRegion = false; mCornerSide = false; mStart = false; mPos = CornerRegionType.None; Viewer.Cursor = Cursors.Default; }
/// <summary> /// /// </summary> /// <returns></returns> private CornerRegionType GetRegion() { if (btnCSTL.Checked) { _region = CornerRegionType.TopLeft; } else if (btnCSTC.Checked) { _region = CornerRegionType.TopCenter; } else if (btnCSTR.Checked) { _region = CornerRegionType.TopRight; } else if (btnCSML.Checked) { _region = CornerRegionType.MiddleLeft; } else if (btnCSMC.Checked) { _region = CornerRegionType.MiddleCenter; } else if (btnCSMR.Checked) { _region = CornerRegionType.MiddleRight; } else if (btnCSBL.Checked) { _region = CornerRegionType.BottomLeft; } else if (btnCSBC.Checked) { _region = CornerRegionType.BottomCenter; } else if (btnCSBR.Checked) { _region = CornerRegionType.BottomRight; } else { _region = CornerRegionType.None; } return(_region); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCS_Click(object sender, EventArgs e) { if (sender == btnCSTL) { _region = CornerRegionType.TopLeft; } else if (sender == btnCSTC) { _region = CornerRegionType.TopCenter; } else if (sender == btnCSTR) { _region = CornerRegionType.TopRight; } else if (sender == btnCSML) { _region = CornerRegionType.MiddleLeft; } else if (sender == btnCSMC) { _region = CornerRegionType.MiddleCenter; } else if (sender == btnCSMR) { _region = CornerRegionType.MiddleRight; } else if (sender == btnCSBL) { _region = CornerRegionType.BottomLeft; } else if (sender == btnCSBC) { _region = CornerRegionType.BottomCenter; } else if (sender == btnCSBR) { _region = CornerRegionType.BottomRight; } else { _region = CornerRegionType.None; } this.CornetRegionClick?.Invoke(this, e); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Viewer_MouseMove(object sender, MouseEventArgs e) { PointF pN = Viewer.PointToImage(e.X, e.Y); if (e.Button == MouseButtons.Left) { if (mSelection) { #region Mouse Selection if (!mStart) { selection.X = pO.X; selection.Y = pO.Y; mStart = true; } float dX = pN.X - pO.X; float dY = pN.Y - pO.Y; if (dX < 0) { selection.X = pN.X; selection.Width = -dX; } else { selection.Width = dX; } if (dY < 0) { selection.Y = pN.Y; selection.Height = -dY; } else { selection.Height = dY; } #endregion } else if (mMoveRegion) { #region Mouse Move SelectionRegion float dX = pN.X - pO.X; float dY = pN.Y - pO.Y; selection.X = pS.X + dX; selection.Y = pS.Y + dY; #endregion } else if (mResizeRegion) { #region Resize SelectionRegion float dX = pN.X - pL.X; float dY = pN.Y - pL.Y; pL.X = pN.X; pL.Y = pN.Y; if (_selectionKeepAspectRatio) { #region Keep Aspect Ration Resize SelectionRegion switch (mPos) { case CornerRegionType.TopLeft: selection.X += dX; selection.Y += dY; selection.Width -= dX; selection.Height -= dY; break; case CornerRegionType.TopCenter: selection.Y += dY; selection.Height -= dY; selection.Inflate((selection.Height * cropAspectFactor - selection.Width) / 2.0f, 0); break; case CornerRegionType.TopRight: selection.Y += dY; selection.Width += dX; selection.Height -= dY; break; case CornerRegionType.MiddleLeft: selection.X += dX; selection.Width -= dX; selection.Inflate(0, (selection.Width / cropAspectFactor - selection.Height) / 2.0f); break; case CornerRegionType.MiddleCenter: break; case CornerRegionType.MiddleRight: selection.Width += dX; selection.Inflate(0, (selection.Width / cropAspectFactor - selection.Height) / 2.0f); break; case CornerRegionType.BottomLeft: selection.X += dX; selection.Width -= dX; selection.Height += dY; break; case CornerRegionType.BottomCenter: selection.Height += dY; selection.Inflate((selection.Height * cropAspectFactor - selection.Width) / 2.0f, 0); break; case CornerRegionType.BottomRight: selection.Width += dX; selection.Height += dY; break; } #endregion } else { #region Normal Resize Selection Region switch (mPos) { case CornerRegionType.TopLeft: selection.X += dX; selection.Width -= dX; selection.Y += dY; selection.Height -= dY; break; case CornerRegionType.TopCenter: selection.Y += dY; selection.Height -= dY; break; case CornerRegionType.TopRight: selection.Width += dX; selection.Y += dY; selection.Height -= dY; break; case CornerRegionType.MiddleLeft: selection.X += dX; selection.Width -= dX; break; case CornerRegionType.MiddleCenter: break; case CornerRegionType.MiddleRight: selection.Width += dX; break; case CornerRegionType.BottomLeft: selection.X += dX; selection.Width -= dX; selection.Height += dY; break; case CornerRegionType.BottomCenter: selection.Height += dY; break; case CornerRegionType.BottomRight: selection.Width += dX; selection.Height += dY; break; } #endregion } #endregion } Viewer.SelectionRegion = selection; selectionCorner = new CornerRegion(selection); } else if (e.Button == MouseButtons.None) { if (selection.Width > 0 && selection.Height > 0) { #region Detect Mouse Role Cursor cur = Cursors.Default; mCornerSide = selection.GetPosOfRegion(pN, out mPos, out cur); Viewer.Cursor = cur; #endregion } else { mPos = CornerRegionType.None; mCornerSide = false; Viewer.Cursor = Cursors.Default; } } }
private void imgPreview_MouseMove(object sender, MouseEventArgs e) { PointF pN = imgPreview.PointToImage(e.X, e.Y); if (e.Button == MouseButtons.Left) { if (mSelection) { #region Mouse Selection if (!mStart) { selection.X = pO.X; selection.Y = pO.Y; mStart = true; } float dX = pN.X - pO.X; float dY = pN.Y - pO.Y; if (dX < 0) { selection.X = pN.X; selection.Width = -dX; } else { selection.Width = dX; } if (dY < 0) { selection.Y = pN.Y; selection.Height = -dY; } else { selection.Height = dY; } #endregion } else if (mMoveRegion) { #region Mouse Move SelectionRegion float dX = pN.X - pO.X; float dY = pN.Y - pO.Y; selection.X = pS.X + dX; selection.Y = pS.Y + dY; #endregion } else if (mResizeRegion) { #region Resize SelectionRegion float dX = pN.X - pL.X; float dY = pN.Y - pL.Y; pL.X = pN.X; pL.Y = pN.Y; float min = 0; if (cropMode == CropMode.AspectRatio) { #region Keep Aspect Ration Resize SelectionRegion switch (mPos) { case CornerRegionType.TopLeft: selection.X += dX; selection.Y += dY; selection.Width -= dX; selection.Height -= dY; break; case CornerRegionType.TopCenter: selection.Y += dY; selection.Height -= dY; selection.Inflate((selection.Height * cropAspectFactor - selection.Width) / 2.0f, 0); break; case CornerRegionType.TopRight: selection.Y += dY; selection.Width += dX; selection.Height -= dY; break; case CornerRegionType.MiddleLeft: selection.X += dX; selection.Width -= dX; selection.Inflate(0, (selection.Width / cropAspectFactor - selection.Height) / 2.0f); break; case CornerRegionType.MiddleCenter: break; case CornerRegionType.MiddleRight: selection.Width += dX; selection.Inflate(0, (selection.Width / cropAspectFactor - selection.Height) / 2.0f); break; case CornerRegionType.BottomLeft: selection.X += dX; selection.Width -= dX; selection.Height += dY; break; case CornerRegionType.BottomCenter: selection.Height += dY; selection.Inflate((selection.Height * cropAspectFactor - selection.Width) / 2.0f, 0); break; case CornerRegionType.BottomRight: selection.Width += dX; selection.Height += dY; min = Math.Min(selection.Width, selection.Height); if (selection.Width > selection.Height) { selection.Height = selection.Width / cropAspectFactor; } else { selection.Width = selection.Height * cropAspectFactor; } break; } #endregion } else { #region Normal Resize Selection Region switch (mPos) { case CornerRegionType.TopLeft: selection.X += dX; selection.Width -= dX; selection.Y += dY; selection.Height -= dY; break; case CornerRegionType.TopCenter: selection.Y += dY; selection.Height -= dY; break; case CornerRegionType.TopRight: selection.Width += dX; selection.Y += dY; selection.Height -= dY; break; case CornerRegionType.MiddleLeft: selection.X += dX; selection.Width -= dX; break; case CornerRegionType.MiddleCenter: break; case CornerRegionType.MiddleRight: selection.Width += dX; break; case CornerRegionType.BottomLeft: selection.X += dX; selection.Width -= dX; selection.Height += dY; break; case CornerRegionType.BottomCenter: selection.Height += dY; break; case CornerRegionType.BottomRight: selection.Width += dX; selection.Height += dY; break; } #endregion } #if DEBUG string log = $"Region: X[{selection.X}], Y[{selection.Y}], W[{selection.Width}], H[{selection.Height}]"; host.OnCommandPropertiesChange(new CommandPropertiesChangeEventArgs(AddinCommand.Log, log)); #endif #endregion } imgPreview.SelectionRegion = selection; selectionCorner = new CornerRegion(selection); } else if (e.Button == MouseButtons.None) { if (selection.Width > 0 && selection.Height > 0) { #region Detect Mouse Role Cursor cur = Cursors.Default; mCornerSide = AddinUtils.GetPosOfRegion(selection, pN, out mPos, out cur); imgPreview.Cursor = cur; #endregion } else { mPos = CornerRegionType.None; mCornerSide = false; imgPreview.Cursor = Cursors.Default; } } }