/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Viewer_SelectionRegionChanged(object sender, EventArgs e) { if (!mMoveRegion || !mSelection) { selection = Viewer.SelectionRegion; selectionCorner = new CornerRegion(selection); } }
private void imgPreview_SelectionRegionChanged(object sender, EventArgs e) { if (!mMoveRegion || !mSelection) { selection = imgPreview.SelectionRegion; selectionCorner = new CornerRegion(selection); } selectionSrc = AddinUtils.RemapRegion(imgPreview.SelectionRegion, thumb, addin.ImageData); toolTip.SetToolTip(imgPreview, $"X:{selectionSrc.X}, Y:{selectionSrc.Y}, W:{selectionSrc.Width}, H:{selectionSrc.Height}]"); }
/// <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; } } }