protected override void OnMouseDown(MouseEventArgs e) { Focus(); if (EditMode == EEditMode.EM_None) { if (e.Button == MouseButtons.Right) { Capture = true; EditMode = EEditMode.EM_Translate; LastMovePos[0] = e.X; LastMovePos[1] = e.Y; Cursor = Cursors.NoMove2D; } else if (e.Button == MouseButtons.Left) { /*if (Control.ModifierKeys == Keys.Shift) * { * Capture = true; * EditMode = EEditMode.EM_Translate; * LastMovePos[0] = e.X; * LastMovePos[1] = e.Y; * * Cursor = Cursors.NoMove2D; * } * else */if ((WorkingFrameItem != null) && (Cursor != cursors[0])) { for (int i = 0; i < cursors.Length; i++) { if (cursors[i] == Cursor) { Capture = true; EditMode = EEditMode.EM_Resize; ResizeDir = (EEdgeCorner)i; LastMovePos[0] = e.X; LastMovePos[1] = e.Y; } } } } } }
protected override void OnMouseMove(MouseEventArgs e) { if (e.Button == MouseButtons.None) { /*if (Control.ModifierKeys == Keys.Shift) * { * Cursor = Cursors.NoMove2D; * } * else*/ if (WorkingFrameItem != null) { Matrix IT = LastTransform.Clone(); IT.Invert(); Point[] p = new Point[] { new Point(e.X, e.Y) }; IT.TransformPoints(p); if (Globals.WorkingFrames.Img != null) { p[0].X -= LastImageOffset.X; p[0].Y -= LastImageOffset.Y; } _frameItem FI = Globals.WorkingFrames.GetItemUnder(p[0].X, p[0].Y, ValidFramesFlag); if (WorkingFrameItem == null) { cbFrameNames.Items.Clear(); } if (FI != null) { bool fromList = false; string name; foreach (_frameName fn in FI.names) { if ((fn.source & ValidFramesFlag) == 0) { continue; } name = fn.name; if (fn.source == FrameSource.Grid) { name += " (default)"; } else if (fn.source == FrameSource.List) { name += " (list)"; fromList = true; } else if (fn.source == FrameSource.Name) { name += " (name)"; } else if (fn.source == FrameSource.Alias) { name += " (alias)"; } if (WorkingFrameItem == null) { cbFrameNames.Items.Add(name); } } if (WorkingFrameItem == null) { cbFrameNames.SelectedIndex = 0; } if (fromList) { EEdgeCorner ec = FI.GetEdgeOrCorner(p[0].X, p[0].Y, 5); Cursor = cursors[(int)ec]; } } else { if (WorkingFrameItem == null) { cbFrameNames.Text = ""; } Cursor = cursors[0]; } } return; } if (EditMode == EEditMode.EM_Translate) { Translation[0] += e.X - LastMovePos[0]; Translation[1] += e.Y - LastMovePos[1]; LastMovePos[0] = e.X; LastMovePos[1] = e.Y; Invalidate(); } else if (EditMode == EEditMode.EM_Resize) { ResizeMovement[0] += (e.X - LastMovePos[0]) / (float)ZoomLevels[ZoomIndex]; ResizeMovement[1] += (e.Y - LastMovePos[1]) / (float)ZoomLevels[ZoomIndex]; LastMovePos[0] = e.X; LastMovePos[1] = e.Y; int rx = (int)ResizeMovement[0]; ResizeMovement[0] -= rx; int ry = (int)ResizeMovement[1]; ResizeMovement[1] -= ry; if (ResizeDir == EEdgeCorner.TopLeft) { if ((WorkingFrameItem.x + rx >= 0) && (WorkingFrameItem.width - rx > 1)) { WorkingFrameItem.x += rx; WorkingFrameItem.width -= rx; } if ((WorkingFrameItem.y + ry >= 0) && (WorkingFrameItem.height - ry > 1)) { WorkingFrameItem.y += ry; WorkingFrameItem.height -= ry; } } else if (ResizeDir == EEdgeCorner.Top) { if ((WorkingFrameItem.y + ry >= 0) && (WorkingFrameItem.height - ry > 1)) { WorkingFrameItem.y += ry; WorkingFrameItem.height -= ry; } } else if (ResizeDir == EEdgeCorner.TopRight) { if (WorkingFrameItem.width + rx > 1) { WorkingFrameItem.width += rx; } if ((WorkingFrameItem.y + ry >= 0) && (WorkingFrameItem.height - ry > 1)) { WorkingFrameItem.y += ry; WorkingFrameItem.height -= ry; } } else if (ResizeDir == EEdgeCorner.Left) { if ((WorkingFrameItem.x + rx >= 0) && (WorkingFrameItem.width - rx > 1)) { WorkingFrameItem.x += rx; WorkingFrameItem.width -= rx; } } else if (ResizeDir == EEdgeCorner.Right) { if (WorkingFrameItem.width + rx > 1) { WorkingFrameItem.width += rx; } } else if (ResizeDir == EEdgeCorner.BottomLeft) { if ((WorkingFrameItem.x + rx >= 0) && (WorkingFrameItem.width - rx > 1)) { WorkingFrameItem.x += rx; WorkingFrameItem.width -= rx; } if (WorkingFrameItem.height + ry > 1) { WorkingFrameItem.height += ry; } } else if (ResizeDir == EEdgeCorner.Bottom) { if (WorkingFrameItem.height + ry > 1) { WorkingFrameItem.height += ry; } } else if (ResizeDir == EEdgeCorner.BottomRight) { if (WorkingFrameItem.width + rx > 1) { WorkingFrameItem.width += rx; } if (WorkingFrameItem.height + ry > 1) { WorkingFrameItem.height += ry; } } if ((rx != 0) || (ry != 0)) { Globals.WorkingFrames.UpdateFrameListItem(WorkingFrameItem); Invalidate(); } } }