private void ResizeText(TextFigure tf, Point pos)
 {
     if (_nowResizing == null)
     {
         var snappedTo = StepManager.SnapTo(pos, tf.GetMagnets(), tf.Center);
         if (snappedTo == tf.Start)
         {
             _nowResizing = new ResizeTextStep(tf, ResizeTextStep.Side.End, pos.X - _downPos.X,
                                               pos.Y - _downPos.Y);
         }
         else if (snappedTo == tf.End)
         {
             _nowResizing = new ResizeTextStep(tf, ResizeTextStep.Side.Start, pos.X - _downPos.X,
                                               pos.Y - _downPos.Y);
         }
         if (_nowResizing == null)
         {
             return;
         }
         StepManager.InsertNext(_nowResizing);
     }
     else
     {
         var rts     = (ResizeTextStep)_nowResizing;
         var snapped = StepManager.Snap(pos, _nowResizing.Figure);
         if (snapped != null)
         {
             if (rts.ResizeAround == ResizeTextStep.Side.End)
             {
                 rts.Resize("(" + snapped.X.ExprString + ") - " + rts.Figure.Name + ".x",
                            "(" + snapped.Y.ExprString + ") - " + rts.Figure.Name + ".y", snapped.Def);
             }
             else if (rts.ResizeAround == ResizeTextStep.Side.Start)
             {
                 rts.Resize("(" + snapped.X.ExprString + ") - (" + rts.Figure.Name + ".x + (" +
                            rts.Figure.Name + ".width))",
                            "(" + snapped.Y.ExprString + ") - (" + rts.Figure.Name + ".y + (" +
                            rts.Figure.Name + ".height))", snapped.Def);
             }
         }
         else
         {
             if (rts.ResizeAround == ResizeTextStep.Side.End)
             {
                 rts.Resize(pos.X - _downPos.X, pos.Y - _downPos.Y);
             }
             else if (rts.ResizeAround == ResizeTextStep.Side.Start)
             {
                 rts.Resize(pos.X - _downPos.X, pos.Y - _downPos.Y);
             }
         }
     }
 }
 private void ResizeRect(RectFigure rf, Point pos)
 {
     if (_nowResizing == null)
     {
         var snappedTo = StepManager.SnapTo(pos, rf.GetMagnets(), rf.Center);
         if (snappedTo == rf.Left)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Right, pos.X - _downPos.X);
         }
         else if (snappedTo == rf.Right)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Left, pos.X - _downPos.X);
         }
         else if (snappedTo == rf.Top)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Bottom, pos.Y - _downPos.Y);
         }
         else if (snappedTo == rf.Bottom)
         {
             _nowResizing = new ResizeRectStep(rf, ResizeRectStep.Side.Top, pos.Y - _downPos.Y);
         }
         if (_nowResizing == null)
         {
             return;
         }
         StepManager.InsertNext(_nowResizing);
     }
     else
     {
         var rrs     = (ResizeRectStep)_nowResizing;
         var snapped = StepManager.Snap(pos, _nowResizing.Figure);
         if (snapped != null)
         {
             if (rrs.ResizeAround == ResizeRectStep.Side.Right)
             {
                 rrs.Resize("(" + snapped.X.ExprString + ") - " + rrs.Figure.Name + ".x", snapped.Def);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Left)
             {
                 rrs.Resize("(" + snapped.X.ExprString + ") - (" + rrs.Figure.Name + ".x + (" +
                            rrs.Figure.Name + ".width))", snapped.Def);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Top)
             {
                 rrs.Resize("(" + snapped.Y.ExprString + ") - (" + rrs.Figure.Name + ".y + (" +
                            rrs.Figure.Name + ".height))", snapped.Def);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Bottom)
             {
                 rrs.Resize("(" + snapped.Y.ExprString + ") - " + rrs.Figure.Name + ".y", snapped.Def);
             }
         }
         else
         {
             if (rrs.ResizeAround == ResizeRectStep.Side.Right)
             {
                 rrs.Resize(pos.X - _downPos.X);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Left)
             {
                 rrs.Resize(pos.X - _downPos.X);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Top)
             {
                 rrs.Resize(pos.Y - _downPos.Y);
             }
             else if (rrs.ResizeAround == ResizeRectStep.Side.Bottom)
             {
                 rrs.Resize(pos.Y - _downPos.Y);
             }
         }
     }
 }
 public bool Reset()
 {
     _nowResizing = null;
     return(_moved);
 }
 private void ResizeEllipse(EllipseFigure ef, Point pos)
 {
     if (_nowResizing == null)
     {
         var snappedTo = StepManager.SnapTo(pos, ef.GetMagnets(), ef.Center);
         if (snappedTo == ef.Left)
         {
             _nowResizing = new ResizeEllipseStep(ef, ResizeEllipseStep.Side.Right, pos.X - _downPos.X);
         }
         else if (snappedTo == ef.Right)
         {
             _nowResizing = new ResizeEllipseStep(ef, ResizeEllipseStep.Side.Left, pos.X - _downPos.X);
         }
         else if (snappedTo == ef.Top)
         {
             _nowResizing = new ResizeEllipseStep(ef, ResizeEllipseStep.Side.Bottom, pos.Y - _downPos.Y);
         }
         else if (snappedTo == ef.Bottom)
         {
             _nowResizing = new ResizeEllipseStep(ef, ResizeEllipseStep.Side.Top, pos.Y - _downPos.Y);
         }
         if (_nowResizing == null)
         {
             return;
         }
         StepManager.InsertNext(_nowResizing);
     }
     else
     {
         var res     = (ResizeEllipseStep)_nowResizing;
         var snapped = StepManager.Snap(pos, _nowResizing.Figure);
         if (snapped != null)
         {
             if (res.ResizeAround == ResizeEllipseStep.Side.Right)
             {
                 res.Resize("(" + res.Figure.Name + ".x - " + res.Figure.Name + ".radius1 ) - (" +
                            snapped.X.ExprString + ")", snapped.Def);
             }
             else if (res.ResizeAround == ResizeEllipseStep.Side.Left)
             {
                 res.Resize("(" + snapped.X.ExprString + ") - (" + res.Figure.Name + ".x + (" +
                            res.Figure.Name + ".radius1))", snapped.Def);
             }
             else if (res.ResizeAround == ResizeEllipseStep.Side.Top)
             {
                 res.Resize("(" + res.Figure.Name + ".y + " + res.Figure.Name + ".radius2 ) - (" +
                            snapped.Y.ExprString + ")", snapped.Def);
             }
             else if (res.ResizeAround == ResizeEllipseStep.Side.Bottom)
             {
                 res.Resize("(" + snapped.Y.ExprString + ") - (" + res.Figure.Name + ".y - (" +
                            res.Figure.Name + ".radius2))", snapped.Def);
             }
         }
         else
         {
             if (res.ResizeAround == ResizeEllipseStep.Side.Right)
             {
                 res.Resize(_downPos.X - pos.X);
             }
             else if (res.ResizeAround == ResizeEllipseStep.Side.Left)
             {
                 res.Resize(pos.X - _downPos.X);
             }
             else if (res.ResizeAround == ResizeEllipseStep.Side.Top)
             {
                 res.Resize(_downPos.Y - pos.Y);
             }
             else if (res.ResizeAround == ResizeEllipseStep.Side.Bottom)
             {
                 res.Resize(pos.Y - _downPos.Y);
             }
         }
     }
 }