public ResizeAnchor(Window owner, Point mousePosition, ResizeOperation op) { _resizer = op.Resizer; _anchor = op.Binder(owner, mousePosition); }
public void OnMouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Middle) { CaptureMouse(); } if (ActiveProcedure != null) { ActiveProcedure.Update(); } else if (e.ChangedButton == MouseButton.Left && SelectedObj != null) { var offset = LoadedImages["roaam_arrows"].offset; var cell_offset = new Vector(-SelectedObj.CellX * ROAAM_CONST.CELL_WIDTH, SelectedObj.CellY * ROAAM_CONST.CELL_HEIGHT); var center = (cell_offset + new Vector(SelectedObj.X * ROAAM_CONST.GRID_SIZE, SelectedObj.Y * ROAAM_CONST.GRID_SIZE)); if (SelectedObj is Zone zone) { center += new Vector(zone.TriggerWidth / 2, zone.TriggerHeight / 2); } if (SelectedPath != -1) { var targpoint = (SelectedObj as Target).Path[SelectedPath]; center = new Vector(targpoint.X * ROAAM_CONST.GRID_SIZE, targpoint.Y * ROAAM_CONST.GRID_SIZE); } Rect centerRect = new Rect(new Point(center.X - 7 / zoomLevel, center.Y - 7 / zoomLevel), new Size(15 / zoomLevel, 15 / zoomLevel)); Rect upRect = new Rect(new Point(center.X - 8 / zoomLevel, center.Y - 56 / zoomLevel), new Size(19 / zoomLevel, 49 / zoomLevel)); Rect rightRect = new Rect(new Point(center.X + 8 / zoomLevel, center.Y - 10 / zoomLevel), new Size(50 / zoomLevel, 20 / zoomLevel)); var point = e.GetPosition(this); var transform = GetTransform(); var absPoint = transform.Transform(point); int movingDir = -1; if (centerRect.Contains(absPoint)) { movingDir = 0; } else if (upRect.Contains(absPoint)) { movingDir = 1; } else if (rightRect.Contains(absPoint)) { movingDir = 2; } if (movingDir > -1) { CaptureMouse(); ProcedureBase proc; if (SelectedPath == -1) { proc = new TranslateProcedure(ApplicationSettings.Instance.ActiveProject, SelectedObj, movingDir); } else { proc = new PathTranslateProcedure(ApplicationSettings.Instance.ActiveProject, SelectedObj as Target, movingDir, SelectedPath); } SetActiveProcedure(proc); } else if (SelectedObj is Zone z) { for (int i = 0; i < ROAAM_CONST.ZONE_POINTS.Length; i++) { var p = ROAAM_CONST.ZONE_POINTS[i]; Size s = new Size(36 / zoomLevel, 36 / zoomLevel); Rect r = new Rect(new Point(z.RealPoint.X + p.X * z.TriggerWidth - s.Width / 2, z.RealPoint.Y + p.Y * z.TriggerHeight - s.Height / 2), s); if (r.Contains(absPoint)) { ProcedureBase proc = new ResizeProcedure(ApplicationSettings.Instance.ActiveProject, z, i); SetActiveProcedure(proc); break; } } } } }
public ResizeOperation(ResizeProcedure resizer, AnchorProcedure binder) { _resizer = resizer; _binder = binder; }