예제 #1
0
 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;
                 }
             }
         }
     }
 }
예제 #3
0
 public ResizeOperation(ResizeProcedure resizer, AnchorProcedure binder)
 {
     _resizer = resizer;
     _binder = binder;
 }