using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace Dongke.WinForm.Controls.InvoiceLayout
{
[ToolboxItem(false)]
internal partial class ItemFrame : UserControl
{
#region 枚举
///
/// 边框操作
///
private enum HitDownSquare
{
///
/// 无
///
HDS_NONE = 0,
///
/// 上中
///
HDS_TOP = 1,
///
/// 右中
///
HDS_RIGHT = 2,
///
/// 下中
///
HDS_BOTTOM = 3,
///
/// 左中
///
HDS_LEFT = 4,
///
/// 左上
///
HDS_LEFTTOP = 5,
///
/// 右上
///
HDS_RIGHTTOP = 6,
///
/// 左下
///
HDS_LEFTBOTTOM = 7,
///
/// 右下
///
HDS_RIGHTBOTTOM = 8,
///
/// 移动
///
HDS_MOVE = 9,
}
#endregion 枚举
#region 常量
private const int SQUARE_WIDTH = 7; // 操作场所的宽
private const int SQUARE_WIDTH_HALF = 3; // 操作场所的半宽
#endregion 常量
#region 成员变量
/* 操作场所 handler(#) / side-#-
* (0)---0---(4)---1---(1)
* | |
* 2 6
* | |
* (6) (8) (7)
* | |
* 3 7
* | |
* (2)---4---(5)---5---(3)
*/
private Rectangle[] _handlerRect;
private Rectangle[] _handlerDrawRect;
private Rectangle[] _sideRect;
private Rectangle _sideDrawRect;
private Rectangle _handlerRect8;
private HitDownSquare _currHitPlace;
private LayoutItem _item; // 选择状态的Item
private ItemLock _lock = ItemLock.None;
private int _startX; // 鼠标操作开始位置X
private int _startY; // 鼠标操作开始位置Y
private int _mouseMoveX; // 鼠标移动开始位置X
private int _mouseMoveY; // 鼠标移动开始位置Y
private bool _isMouseDown; // 是否鼠标按下
private bool _isMouseMoveInPaperArea; // 是否鼠标移动
private Rectangle[] _downRectangles; // Item原始范围
private Rectangle[] _moveRectangles; // Item随鼠标移动的范围
private bool[] _sideRatioFixeds;
private ItemLock[] _itemLockTyps;
private bool _isShiftDown = false;
private bool _isCtrlDown = false;
private bool _isRealFollow = false;
#endregion 成员变量
#region 构造函数
///
/// 构造函数
///
/// 选择状态的Item
public ItemFrame(LayoutItem item)
{
InitializeComponent();
TabStop = false;
SetStyle(ControlStyles.OptimizedDoubleBuffer
| ControlStyles.ResizeRedraw
| ControlStyles.AllPaintingInWmPaint
, true);
_handlerRect = new Rectangle[8];
_handlerDrawRect = new Rectangle[8];
_sideRect = new Rectangle[8];
_item = item;
if (_item != null)
{
_lock = _item.ItemLockType;
}
CreateFrame();
LostFocus += new EventHandler(RectTracker_LostFocus);
}
#endregion 构造函数
#region 事件处理
///
/// 发生于控制项失去焦点。
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_LostFocus(object sender, EventArgs e)
{
if (_moveRectangles != null && _isMouseMoveInPaperArea)
{
if (!_isRealFollow)
{
int count = _moveRectangles.Length;
for (int i = 0; i < count; i++)
{
DrawReversibleFrame(_itemLockTyps[i], _moveRectangles[i], null);
}
}
_isMouseDown = false;
_isMouseMoveInPaperArea = false;
_moveRectangles = null;
}
}
///
/// KeyDown 事件
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey && !_isShiftDown)
{
_isShiftDown = true;
}
else if (e.KeyCode == Keys.ControlKey && !_isCtrlDown)
{
_isCtrlDown = true;
}
else
{
return;
}
if (_isMouseMoveInPaperArea)
{
int count = _moveRectangles.Length;
for (int i = 0; i < count; i++)
{
ResizeToRectangle(new Point(_mouseMoveX, _mouseMoveY), i);
}
}
}
///
/// KeyUp 事件
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey && _isShiftDown)
{
_isShiftDown = false;
}
else if (e.KeyCode == Keys.ControlKey && _isCtrlDown)
{
_isCtrlDown = false;
}
else
{
return;
}
if (_isMouseMoveInPaperArea)
{
int count = _moveRectangles.Length;
for (int i = 0; i < count; i++)
{
ResizeToRectangle(new Point(_mouseMoveX, _mouseMoveY), i);
}
}
}
///
/// MouseDown 事件
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (Pointer(e.Location))
{
if (_isRealFollow)
{
_startX = e.X + this.Left;
_startY = e.Y + this.Top;
_mouseMoveX = _startX;
_mouseMoveY = _startY;
}
else
{
_startX = e.X;
_startY = e.Y;
_mouseMoveX = e.X;
_mouseMoveY = e.Y;
}
int count = _item.Owner.SelectedItems.Count;
_downRectangles = new Rectangle[count];
_moveRectangles = new Rectangle[count];
_sideRatioFixeds = new bool[count];
_itemLockTyps = new ItemLock[count];
for (int i = 0; i < count; i++)
{
LayoutItem item = _item.Owner.SelectedItems[i];
if (item == null)
{
continue;
}
_downRectangles[i] = item.ShapeBounds;
_moveRectangles[i] = _downRectangles[i];
_sideRatioFixeds[i] = item.SideRatioFixed;
_itemLockTyps[i] = item.ItemLockType;
_isMouseDown = true;
}
}
}
}
///
/// MouseMove 事件
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && _isMouseDown)
{
int mx = e.X;
int my = e.Y;
if (_isRealFollow)
{
mx = e.X + this.Left;
my = e.Y + this.Top;
}
if (_mouseMoveX != mx || _mouseMoveY != my)
{
int count = _moveRectangles.Length;
for (int i = 0; i < count; i++)
{
ResizeToRectangle(new Point(mx, my), i);
}
_isMouseMoveInPaperArea = true;
_mouseMoveX = mx;
_mouseMoveY = my;
}
}
else
{
Pointer(e.Location);
}
}
///
/// MouseUp 事件
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && _isMouseDown)
{
if (_isMouseMoveInPaperArea && !_isRealFollow)
{
_item.Owner.Capture = false;
int count = _moveRectangles.Length;
int paperAreaLeft = _item.Owner.PaperArea.Left;
int paperAreaTop = _item.Owner.PaperArea.Top;
for (int i = 0; i < count; i++)
{
DrawReversibleFrame(_itemLockTyps[i], _moveRectangles[i], null);
DragHandler(i);
}
}
_isMouseDown = false;
_isMouseMoveInPaperArea = false;
_moveRectangles = null;
}
}
///
/// Paint 事件
///
/// 指定的对象
/// 提供的事件数据
private void RectTracker_Paint(object sender, PaintEventArgs e)
{
DrawFrame(e.Graphics);
}
#endregion 事件处理
#region 函数
///
/// 创建边框
///
///
///
public void CreateFrame()
{
// 边界设置
Rectangle bounds = _item.ShapeBounds;
bounds.X -= SQUARE_WIDTH_HALF;
bounds.Y -= SQUARE_WIDTH_HALF;
bounds.Width += SQUARE_WIDTH;
bounds.Height += SQUARE_WIDTH;
Bounds = bounds;
// 可是范围设置
Region = new Region(SetViewRectangle());
Refresh();
BringToFront();
}
///
/// 调整范围
///
/// 鼠标所在坐标
/// 选择Item的索引
private void ResizeToRectangle(Point p, int index)
{
Rectangle rect = _moveRectangles[index];
if ((_isCtrlDown || _sideRatioFixeds[index]) && _isShiftDown)
{
# region
int changedX = p.X - _startX;
int changedY = p.Y - _startY;
// Move
if (_currHitPlace == HitDownSquare.HDS_MOVE)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = Math.Abs(changedY);
if (changedABCX < changedABCY)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
}
else
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
}
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height;
}
else
{
int rectW = _downRectangles[index].Width;
int rectH = _downRectangles[index].Height;
int rectWM = 0 - rectW;
int rectHM = 0 - rectH;
double sizeRatio = 1.0 * _downRectangles[index].Height / _downRectangles[index].Width;
switch (_currHitPlace)
{
// 左上
case HitDownSquare.HDS_LEFTTOP:
# region
// A
if (changedX < 0 && changedY < 0)
{
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// ABC
if (0 <= changedX && changedX <= rectW && changedY < 0)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// C
if (rectW < changedX && changedY < 0)
{
int changedABCX = changedX - rectW;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// BI
if (0 <= changedX && changedX <= rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// ADF
if (changedX < 0 && 0 <= changedY && changedY <= rectH)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// DI
if (changedX == 0 && 0 <= changedY && changedY <= rectH)
{
rect = _downRectangles[index];
break;
}
// I
if (0 < changedX && changedX < rectW && 0 < changedY && changedY < rectH)
{
if (changedX + changedX > rectW)
{
changedX = rectW - changedX;
}
if (changedY + changedY > rectH)
{
changedY = rectH - changedY;
}
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// IE
if (changedX == rectW && 0 <= changedY && changedY <= rectH)
{
rect = _downRectangles[index];
break;
}
// CEH
if (rectW < changedX && 0 <= changedY && changedY <= rectH)
{
changedY = System.Convert.ToInt32(
Math.Round((rectW - changedX) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// IG
if (0 <= changedX && changedX <= rectW && changedY == rectH)
{
rect = _downRectangles[index];
break;
}
// F
if (changedX < 0 && rectH < changedY)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY - rectH;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// FGH
if (0 <= changedX && changedX <= rectW && rectH < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round((rectH - changedY) / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// H
if (rectW < changedX && rectH < changedY)
{
if (changedX * sizeRatio < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
# endregion
break;
// 上中
case HitDownSquare.HDS_TOP:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
// 右上
case HitDownSquare.HDS_RIGHTTOP:
# region
// A
if (changedX < rectWM && changedY < 0)
{
int changedABCX = rectWM - changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// ABC
if (rectWM <= changedX && changedX <= 0 && changedY < 0)
{
changedX = rectWM + System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// C
if (0 < changedX && changedY < 0)
{
int changedABCX = changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// BI
if (rectWM <= changedX && changedX <= 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// ADF
if (changedX < rectWM && 0 <= changedY && changedY <= rectH)
{
changedY = System.Convert.ToInt32(
Math.Round((changedX - rectWM) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// DI
if (changedX == rectWM && 0 <= changedY && changedY <= rectH)
{
rect = _downRectangles[index];
break;
}
// I
if (rectWM < changedX && changedX < 0 && 0 < changedY && changedY < rectH)
{
if (changedX + changedX < rectWM)
{
changedX = rectWM - changedX;
}
if (changedY + changedY > rectH)
{
changedY = rectH - changedY;
}
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// IE
if (changedX == 0 && 0 <= changedY && changedY <= rectH)
{
rect = _downRectangles[index];
break;
}
// CEH
if (0 < changedX && 0 <= changedY && changedY <= rectH)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// IG
if (rectWM <= changedX && changedX <= 0 && changedY == rectH)
{
rect = _downRectangles[index];
break;
}
// F
if (changedX < rectWM && rectH < changedY)
{
int changedABCX = rectWM - changedX;
int changedABCY = changedY - rectH;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// FGH
if (rectWM <= changedX && changedX <= 0 && rectH < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round((changedY - rectH) / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
// H
if (0 < changedX && rectH < changedY)
{
int changedABCX = changedX;
int changedABCY = changedY - rectH;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
}
# endregion
break;
// 左中
case HitDownSquare.HDS_LEFT:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height;
break;
// 左下
case HitDownSquare.HDS_LEFTBOTTOM:
# region
// A
if (changedX < 0 && changedY < rectHM)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = rectHM - changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// ABC
if (0 <= changedX && changedX <= rectW && changedY < rectHM)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round((rectHM - changedY) / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// C
if (rectW < changedX && changedY < rectHM)
{
int changedABCX = changedX - rectW;
int changedABCY = rectHM - changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// BI
if (0 <= changedX && changedX <= rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// ADF
if (changedX < 0 && rectHM <= changedY && changedY <= 0)
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round((changedX - rectW) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// DI
if (changedX == 0 && rectHM <= changedY && changedY <= 0)
{
rect = _downRectangles[index];
break;
}
// I
if (0 < changedX && changedX < rectW && rectHM < changedY && changedY < 0)
{
if (changedX + changedX > rectW)
{
changedX = rectW - changedX;
}
if (changedY + changedY < rectHM)
{
changedY = rectHM - changedY;
}
int changedABCX = changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio > changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// IE
if (changedX == rectW && rectHM <= changedY && changedY <= 0)
{
rect = _downRectangles[index];
break;
}
// CEH
if (rectW < changedX && rectHM <= changedY && changedY <= 0)
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round((changedX - rectW) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// IG
if (0 <= changedX && changedX <= rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// F
if (changedX < 0 && 0 < changedY)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// FGH
if (0 <= changedX && changedX <= rectW && 0 < changedY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// H
if (rectW < changedX && 0 < changedY)
{
int changedABCX = changedX - rectW;
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
# endregion
break;
// 右中
case HitDownSquare.HDS_RIGHT:
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height;
break;
// 下中
case HitDownSquare.HDS_BOTTOM:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
// 右下
case HitDownSquare.HDS_RIGHTBOTTOM:
# region
// A
if (changedX < rectWM && changedY < rectHM)
{
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// ABC
if (rectWM <= changedX && changedX <= 0 && changedY < rectHM)
{
changedX = System.Convert.ToInt32(
Math.Round((rectHM - changedY) / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// C
if (0 < changedX && changedY < rectHM)
{
int changedABCX = changedX;
int changedABCY = rectHM - changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// BI
if (rectWM <= changedX && changedX <= 0 && changedY == rectHM)
{
rect = _downRectangles[index];
break;
}
// ADF
if (changedX < rectWM && rectHM <= changedY && changedY <= 0)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// DI
if (changedX == rectWM && rectHM <= changedY && changedY <= 0)
{
rect = _downRectangles[index];
break;
}
// I
if (rectWM < changedX && changedX < 0 && rectHM < changedY && changedY < 0)
{
if (changedX + changedX < rectWM)
{
changedX = rectWM - changedX;
}
if (changedY + changedY < rectHM)
{
changedY = rectHM - changedY;
}
if (changedX * sizeRatio < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// IE
if (changedX == 0 && rectHM <= changedY && changedY <= 0)
{
rect = _downRectangles[index];
break;
}
// CEH
if (0 < changedX && rectHM <= changedY && changedY <= 0)
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// IG
if (rectWM <= changedX && changedX <= 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// F
if (changedX < rectWM && 0 < changedY)
{
int changedABCX = rectWM - changedX;
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// FGH
if (rectWM <= changedX && changedX <= 0 && 0 < changedY)
{
changedX = rectWM - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
// H
if (0 < changedX && 0 < changedY)
{
if (changedX * sizeRatio < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
}
# endregion
break;
default:
break;
}
}
# endregion
}
else if (_isCtrlDown || _sideRatioFixeds[index])
{
# region
int changedX = p.X - _startX;
int changedY = p.Y - _startY;
// Move
if (_currHitPlace == HitDownSquare.HDS_MOVE)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height;
}
else
{
int rectW = _downRectangles[index].Width;
int rectH = _downRectangles[index].Height;
int rectW2 = rectW + rectW;
int rectH2 = rectH + rectH;
int rectWM = 0 - rectW;
int rectHM = 0 - rectH;
int rectWM2 = 0 - rectW2;
int rectHM2 = 0 - rectH2;
double sizeRatio = 1.0 * _downRectangles[index].Height / _downRectangles[index].Width;
switch (_currHitPlace)
{
// 左上
case HitDownSquare.HDS_LEFTTOP:
# region
// A
if (changedX < 0 && changedY < 0)
{
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// AB
if (changedX == 0 && changedY < 0)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// B
if (0 < changedX && changedX < rectW && changedY < 0)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// BC
if (changedX == rectW && changedY < 0)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// C
if (rectW < changedX && changedX < rectW2 && changedY < 0)
{
changedX = rectW2
- System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// CC1
if (changedX == rectW2 && changedY < 0)
{
changedX = rectW2
- System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// C1
if (rectW2 < changedX && changedY < 0)
{
int changedABCX = changedX - rectW2;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW2 + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// AD
if (changedX < 0 && changedY == 0)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// ABDI
if (changedX == 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// BI
if (0 < changedX && changedX < rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// BCIE
if (changedX == rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// CE
if (rectW < changedX && changedX <= rectW2 && changedY == 0)
{
changedX = rectW2;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// CEC1E1
if (changedX == rectW2 && changedY == 0)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// C1E1
if (rectW2 < changedX && changedY == 0)
{
int changedABCX = changedX - rectW2;
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// D
if (changedX < 0 && 0 < changedY && changedY < rectH)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// DI
if (changedX == 0 && 0 < changedY && changedY < rectH)
{
rect = _downRectangles[index];
break;
}
// I
if (0 < changedX && changedX < rectW && 0 < changedY && changedY < rectH)
{
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// IE
if (changedX == rectW && 0 < changedY && changedY < rectH)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// E
if (rectW < changedX
&& changedX < rectW2
&& 0 < changedY
&& changedY < rectH)
{
int changedABCX = rectW2 - changedX;
int changedABCY = changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = rectW2
- System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// EE1
if (changedX == rectW2
&& 0 < changedY
&& changedY < rectH)
{
changedY = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// E1
if (rectW2 < changedX
&& 0 < changedY
&& changedY < rectH)
{
int changedABCX = changedX - rectW2;
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// DF
if (changedX < 0 && changedY == rectH)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// DIFG
if (changedX == 0 && changedY == rectH)
{
rect = _downRectangles[index];
break;
}
// IG
if (0 < changedX && changedX < rectW && changedY == rectH)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// IEGH
if (changedX == rectW && changedY == rectH)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// EH
if (rectW < changedX
&& changedX < rectW2
&& changedY == rectH)
{
int changedABCX = rectW2 - changedX;
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// EE1HH1
if (changedX == rectW2 && changedY == rectH)
{
changedY = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// E1H1
if (rectW2 < changedX && changedY == rectH)
{
int changedABCX = changedX - rectW2;
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F
if (changedX < 0 && rectH < changedY && changedY < rectH2)
{
changedY = rectH2 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// FG
if (changedX == 0 && rectH < changedY && changedY < rectH2)
{
changedY = rectH2;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// G
if (0 < changedX && changedX < rectW
&& rectH < changedY && changedY < rectH2)
{
int changedABCX = changedX;
int changedABCY = rectH2 - changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH2 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// GH
if (changedX == rectW
&& rectH < changedY && changedY < rectH2)
{
int changedABCY = rectH2 - changedY;
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H
if (rectW < changedX
&& changedX < rectW2
&& rectH < changedY
&& changedY < rectH2)
{
int changedABCX = rectW2 - changedX;
int changedABCY = rectH2 - changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = rectW2 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH2 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// HH1
if (changedX == rectW2
&& rectH < changedY && changedY < rectH2)
{
changedY = rectH2;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H1
if (rectW2 < changedX
&& rectH < changedY && changedY < rectH2)
{
int changedABCX = changedX - rectW2;
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// FF1
if (changedX < 0 && changedY == rectH2)
{
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// FGF1G1
if (changedX == 0 && changedY == rectH2)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// GG1
if (0 < changedX && changedX < rectW
&& changedY == rectH2)
{
changedX = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// GHG1H2
if (changedX == rectW
&& changedY == rectH2)
{
changedX = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// HH2
if (rectW < changedX
&& changedX < rectW2 && changedY == rectH2)
{
changedX = rectW2;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// HH1H2H3
if (changedX == rectW2 && changedY == rectH2)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H1H3
if (rectW2 < changedX && changedY == rectH2)
{
int changedABCX = changedX - rectW2;
changedY = rectH2 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F1
if (changedX < 0 && rectH2 < changedY)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY - rectH2;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F1G1
if (changedX == 0 && rectH2 < changedY)
{
int changedABCY = changedY - rectH2;
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// G1
if (0 < changedX && changedX < rectW
&& rectH2 < changedY)
{
int changedABCY = changedY - rectH2;
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// G1H2
if (changedX == rectW
&& rectH2 < changedY)
{
int changedABCY = changedY - rectH2;
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H2
if (rectW < changedX
&& changedX < rectW2
&& rectH2 < changedY)
{
int changedABCY = changedY - rectH2;
changedX = rectW2 + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H2H3
if (changedX == rectW2 && rectH2 < changedY)
{
int changedABCY = changedY - rectH2;
changedX = rectW2 + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H3
if (rectW2 < changedX && rectH2 < changedY)
{
int changedABCX = changedX - rectW2;
int changedABCY = changedY - rectH2;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW2 + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
# endregion
break;
// 上中
case HitDownSquare.HDS_TOP:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height - changedY;
break;
// 右上
case HitDownSquare.HDS_RIGHTTOP:
# region
// A1
if (changedX < rectWM2 && changedY < 0)
{
int changedABCX = rectWM2 - changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM2 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// A1A
if (changedX == rectWM2 && changedY < 0)
{
changedX = rectWM2 + System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// A
if (rectWM2 < changedX && changedX < rectWM && changedY < 0)
{
changedX = rectWM2 + System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// AB
if (changedX == rectWM && changedY < 0)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// B
if (rectWM < changedX && changedX < 0 && changedY < 0)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// BC
if (changedX == 0 && changedY < 0)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// C
if (0 < changedX && changedY < 0)
{
int changedABCX = changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// A1D1
if (changedX < rectWM2 && changedY == 0)
{
int changedABCX = rectWM2 - changedX;
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// A1AD1D
if (changedX == rectWM2 && changedY == 0)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height;
break;
}
// AD
if (rectWM2 < changedX && changedX < rectWM && changedY == 0)
{
changedX = rectWM2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// ABDI
if (changedX == rectWM && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// BI
if (rectWM < changedX && changedX < 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// BCIE
if (changedX == 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// CE
if (0 < changedX && changedY == 0)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// D1
if (changedX < rectWM2 && 0 < changedY && changedY < rectH)
{
int changedABCX = rectWM2 - changedX;
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// D1D
if (changedX == rectWM2 && 0 < changedY && changedY < rectH)
{
changedY = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// D
if (rectWM2 < changedX && changedX < rectWM && 0 < changedY && changedY < rectH)
{
int changedABCX = changedX - rectWM2;
int changedABCY = changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = rectWM2 + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// DI
if (changedX == rectWM && 0 < changedY && changedY < rectH)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// I
if (rectWM < changedX && changedX < 0 && 0 < changedY && changedY < rectH)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// IE
if (changedX == 0 && 0 < changedY && changedY < rectH)
{
rect = _downRectangles[index];
break;
}
// E
if (0 < changedX && 0 < changedY && changedY < rectH)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// D1F1
if (changedX < rectWM2 && changedY == rectH)
{
int changedABCX = rectWM2 - changedX;
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// D1DF1F
if (changedX == rectWM2 && changedY == rectH)
{
changedY = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// DF
if (rectWM2 < changedX && changedX < rectWM && changedY == rectH)
{
int changedABCX = changedX - rectWM2;
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// DIFG
if (changedX == rectWM && changedY == rectH)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// IG
if (rectWM < changedX && changedX < 0 && changedY == rectH)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// IEGH
if (changedX == 0 && changedY == rectH)
{
rect = _downRectangles[index];
break;
}
// EH
if (0 < changedX && changedY == rectH)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F1
if (changedX < rectWM2 && rectH < changedY && changedY < rectH2)
{
int changedABCX = Math.Abs(changedX);
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F1F
if (changedX == rectWM2 && rectH < changedY && changedY < rectH2)
{
changedY = rectH2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F
if (rectWM2 < changedX && changedX < rectWM && rectH < changedY && changedY < rectH2)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// FG
if (changedX == rectWM && rectH < changedY && changedY < rectH2)
{
int changedABCY = changedY - rectH2;
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// G
if (rectWM < changedX && changedX < 0 && rectH < changedY && changedY < rectH2)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = rectH2 - changedY;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH2 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// GH
if (changedX == 0 && rectH < changedY && changedY < rectH2)
{
changedY = rectH2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H
if (0 < changedX && rectH < changedY && changedY < rectH2)
{
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F1F3
if (changedX < rectWM2 && changedY == rectH2)
{
int changedABCX = Math.Abs(changedX);
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F1FF3F2
if (changedX == rectWM2 && changedY == rectH2)
{
changedY = rectH2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// FF2
if (rectWM2 < changedX && changedX < rectWM && changedY == rectH2)
{
changedX = rectWM2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// FGF2G1
if (changedX == rectWM && changedY == rectH2)
{
changedX = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// GG1
if (rectWM < changedX && changedX < 0 && changedY == rectH2)
{
changedX = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// GHG1H2
if (changedX == 0 && changedY == rectH2)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// HH2
if (0 < changedX && changedY == rectH2)
{
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F3
if (changedX < rectWM2 && rectH2 < changedY)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F3F2
if (changedX == rectWM2 && rectH2 < changedY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F2
if (rectWM2 < changedX && changedX < rectWM && rectH2 < changedY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// F2G1
if (changedX == rectWM && rectH2 < changedY)
{
changedX = rectWM2 + System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// G1
if (rectWM < changedX && changedX < 0 && rectH2 < changedY)
{
changedX = rectWM2 + System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// G1H2
if (changedX == 0 && rectH2 < changedY)
{
changedX = rectWM2 + System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
// H2
if (0 < changedX && rectH2 < changedY)
{
int changedABCX = changedX;
int changedABCY = changedY - rectH2;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectH2 + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
}
# endregion
break;
// 左中
case HitDownSquare.HDS_LEFT:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height;
break;
// 左下
case HitDownSquare.HDS_LEFTBOTTOM:
# region
// A2
if (changedX < 0 && changedY < rectHM2)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = rectHM2 - changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM2 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2B1
if (0 == changedX && changedY < rectHM2)
{
int changedABCY = changedY - rectHM2;
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1
if (0 < changedX && changedX < rectW && changedY < rectHM2)
{
int changedABCY = changedY - rectHM2;
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1C2
if (changedX == rectW && changedY < rectHM2)
{
int changedABCY = changedY - rectHM2;
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C2
if (rectW < changedX && changedX < rectW2 && changedY < rectHM2)
{
int changedABCY = Math.Abs(changedY);
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C2C3
if (rectW2 == changedX && changedY < rectHM2)
{
int changedABCY = Math.Abs(changedY);
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C3
if (rectW2 < changedX && changedY < rectHM2)
{
int changedABCX = changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2A
if (changedX < 0 && changedY == rectHM2)
{
changedY = rectHM2 + System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2B1AB
if (0 == changedX && changedY == rectHM2)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1B
if (0 < changedX && changedX < rectW && changedY == rectHM2)
{
changedX = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1C2BC
if (changedX == rectW && changedY == rectHM2)
{
changedX = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C2C
if (rectW < changedX && changedX < rectW2 && changedY == rectHM2)
{
changedX = rectW2;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C2C3CC1
if (rectW2 == changedX && changedY == rectHM2)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C3C1
if (rectW2 < changedX && changedY == rectHM2)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A
if (changedX < 0 && rectHM2 < changedY && changedY < rectHM)
{
changedY = rectHM2 + System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// AB
if (0 == changedX && rectHM2 < changedY && changedY < rectHM)
{
changedY = rectHM2;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B
if (0 < changedX && changedX < rectW && rectHM2 < changedY && changedY < rectHM)
{
int changedABCX = changedX;
int changedABCY = changedY - rectHM2;
if (changedABCX * sizeRatio > changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM2 + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// BC
if (changedX == rectW && rectHM2 < changedY && changedY < rectHM)
{
int changedABCY = changedY - rectHM2;
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C
if (rectW < changedX && changedX < rectW2 && rectHM2 < changedY && changedY < rectHM)
{
int changedABCX = changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// CC1
if (rectW2 == changedX && rectHM2 < changedY && changedY < rectHM)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C1
if (rectW2 < changedX && rectHM2 < changedY && changedY < rectHM)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// AD
if (changedX < 0 && changedY == rectHM)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// ABDI
if (0 == changedX && changedY == rectHM)
{
rect = _downRectangles[index];
break;
}
// BI
if (0 < changedX && changedX < rectW && changedY == rectHM)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// BCIE
if (changedX == rectW && changedY == rectHM)
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// CE
if (rectW < changedX && changedX < rectW2 && changedY == rectHM)
{
changedY = rectHM + System.Convert.ToInt32(
Math.Round((changedX - rectW) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// CC1EE1
if (rectW2 == changedX && changedY == rectHM)
{
changedY = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C1E1
if (rectW2 < changedX && changedY == rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round((changedX - rectW2) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// D
if (changedX < 0 && rectHM < changedY && changedY < 0)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// DI
if (0 == changedX && rectHM < changedY && changedY < 0)
{
rect = _downRectangles[index];
break;
}
// I
if (0 < changedX && changedX < rectW && rectHM < changedY && changedY < 0)
{
int changedABCX = changedX;
int changedABCY = Math.Abs(changedY);
if (changedABCX * sizeRatio > changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// IE
if (changedX == rectW && rectHM < changedY && changedY < 0)
{
int changedABCY = Math.Abs(changedY);
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// E
if (rectW < changedX && changedX < rectW2 && rectHM < changedY && changedY < 0)
{
int changedABCX = changedX - rectW;
int changedABCY = changedY + rectH;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// EE1
if (rectW2 == changedX && rectHM < changedY && changedY < 0)
{
changedY = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// E1
if (rectW2 < changedX && rectHM < changedY && changedY < 0)
{
changedY = System.Convert.ToInt32(
Math.Round((changedX - rectW2) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// DF
if (changedX < 0 && changedY == 0)
{
changedY = 0 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// DIFG
if (0 == changedX && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// IG
if (0 < changedX && changedX < rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// IEGH
if (changedX == rectW && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// EH
if (rectW < changedX && changedX < rectW2 && changedY == 0)
{
changedY = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// EE1HH1
if (rectW2 == changedX && changedY == 0)
{
changedY = 0;
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// E1H1
if (rectW2 < changedX && changedY == 0)
{
changedY = System.Convert.ToInt32(
Math.Round((changedX - rectW2) * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// F
if (changedX < 0 && 0 < changedY)
{
int changedABCX = Math.Abs(changedX);
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// FG
if (0 == changedX && 0 < changedY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// G
if (0 < changedX && changedX < rectW && 0 < changedY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// GH
if (changedX == rectW && 0 < changedY)
{
changedX = 0 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// H
if (rectW < changedX && changedX < rectW2 && 0 < changedY)
{
int changedABCY = changedY + rectH;
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// HH1
if (rectW2 == changedX && 0 < changedY)
{
int changedABCY = changedY + rectH;
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// H1
if (rectW2 < changedX && 0 < changedY)
{
int changedABCX = changedX - rectW2;
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectW + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio,
0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
# endregion
break;
// 右中
case HitDownSquare.HDS_RIGHT:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height;
break;
// 下中
case HitDownSquare.HDS_BOTTOM:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height + changedY;
break;
// 右下
case HitDownSquare.HDS_RIGHTBOTTOM:
# region
// A3
if (changedX < rectWM2 && changedY < rectHM2)
{
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A3A2
if (changedX == rectWM2 && changedY < rectHM2)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2
if (rectWM2 < changedX && changedX < rectWM && changedY < rectHM2)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2B1
if (changedX == rectWM && changedY < rectHM2)
{
changedX = System.Convert.ToInt32(
Math.Round((rectHM2 - changedY) / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1
if (rectWM < changedX && changedX < 0 && changedY < rectHM2)
{
changedX = System.Convert.ToInt32(
Math.Round((rectHM2 - changedY) / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1C2
if (changedX == 0 && changedY < rectHM2)
{
changedX = System.Convert.ToInt32(
Math.Round((rectHM2 - changedY) / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C2
if (0 < changedX && changedY < rectHM2)
{
int changedABCX = changedX;
int changedABCY = rectHM2 - changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM2 - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A3A1
if (changedX < rectWM2 && changedY == rectHM2)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A3A2A1A
if (changedX == rectWM2 && changedY == rectHM2)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2A
if (rectWM2 < changedX && changedX < rectWM && changedY == rectHM2)
{
changedX = rectWM2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A2B1AB
if (changedX == rectWM && changedY == rectHM2)
{
changedX = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1B
if (rectWM < changedX && changedX < 0 && changedY == rectHM2)
{
changedX = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B1C2BC
if (changedX == 0 && changedY == rectHM2)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C2C
if (0 < changedX && changedY == rectHM2)
{
changedY = rectHM2 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A1
if (changedX < rectWM2 && rectHM2 < changedY && changedY < rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A1A
if (changedX == rectWM2 && rectHM2 < changedY && changedY < rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A
if (rectWM2 < changedX && changedX < rectWM && rectHM2 < changedY && changedY < rectHM)
{
if (changedX * sizeRatio > changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// AB
if (changedX == rectWM && rectHM2 < changedY && changedY < rectHM)
{
changedX = rectWM - System.Convert.ToInt32(
Math.Round((changedY + rectH) / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// B
if (rectWM < changedX && changedX < 0 && rectHM2 < changedY && changedY < rectHM)
{
int changedABCX = rectW + changedX;
int changedABCY = rectHM - changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM + System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM - System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio, 0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// BC
if (changedX == 0 && rectHM2 < changedY && changedY < rectHM)
{
changedY = rectHM2;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// C
if (0 < changedX && rectHM2 < changedY && changedY < rectHM)
{
changedY = rectHM2 - System.Convert.ToInt32(
Math.Round(changedX * sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A1D1
if (changedX < rectWM2 && changedY == rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round((rectWM2 - changedX) * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// A1AD1D
if (changedX == rectWM2 && changedY == rectHM)
{
changedX = rectWM2;
changedY = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// AD
if (rectWM2 < changedX && changedX < rectWM && changedY == rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round((rectWM + changedX) * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// ABDI
if (changedX == rectWM && changedY == rectHM)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// BI
if (rectWM < changedX && changedX < 0 && changedY == rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// BCIE
if (changedX == 0 && changedY == rectHM)
{
rect = _downRectangles[index];
break;
}
// CE
if (0 < changedX && changedY == rectHM)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// D1
if (changedX < rectWM2 && rectHM < changedY && changedY < 0)
{
changedY = System.Convert.ToInt32(
Math.Round((rectWM2 - changedX) * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// D1D
if (changedX == rectWM2 && rectHM < changedY && changedY < 0)
{
changedX = rectWM2;
changedY = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// D
if (rectWM2 < changedX && changedX < rectWM && rectHM < changedY && changedY < 0)
{
int changedABCX = rectWM - changedX;
int changedABCY = rectH + changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = rectHM + System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// DI
if (changedX == rectWM && rectHM < changedY && changedY < 0)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// I
if (rectWM < changedX && changedX < 0 && rectHM < changedY && changedY < 0)
{
if (changedX * sizeRatio < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// IE
if (changedX == 0 && rectHM < changedY && changedY < 0)
{
rect = _downRectangles[index];
break;
}
// E
if (0 < changedX && rectHM < changedY && changedY < 0)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// D1F1
if (changedX < rectWM2 && changedY == 0)
{
changedY = System.Convert.ToInt32(
Math.Round((rectWM2 - changedX) * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// D1DF1F
if (changedX == rectWM2 && changedY == 0)
{
changedX = rectWM2;
changedY = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// DF
if (rectWM2 < changedX && changedX < rectWM && changedY == 0)
{
changedX = rectWM2;
changedY = 0;
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// DIFG
if (changedX == rectWM && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// IG
if (rectWM < changedX && changedX < 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// IEGH
if (changedX == 0 && changedY == 0)
{
rect = _downRectangles[index];
break;
}
// EH
if (0 < changedX && changedY == 0)
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// F1
if (changedX < rectWM2 && 0 < changedY)
{
int changedABCX = rectWM2 - changedX;
int changedABCY = changedY;
if (changedABCX * sizeRatio < changedABCY)
{
changedX = rectWM2 - System.Convert.ToInt32(
Math.Round(changedABCY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedABCX * sizeRatio,
0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// F1F
if (changedX == rectWM2 && 0 < changedY)
{
changedX = rectWM2 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// F
if (rectWM2 < changedX && changedX < rectWM && 0 < changedY)
{
changedX = rectHM2 - System.Convert.ToInt32(
Math.Round(changedY / sizeRatio,
0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// FG
if (changedX == rectWM && 0 < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// G
if (rectWM < changedX && changedX < 0 && 0 < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// GH
if (changedX == 0 && 0 < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
// H
if (0 < changedX && 0 < changedY)
{
if (changedX * sizeRatio < changedY)
{
changedX = System.Convert.ToInt32(
Math.Round(changedY / sizeRatio, 0, MidpointRounding.AwayFromZero));
}
else
{
changedY = System.Convert.ToInt32(
Math.Round(changedX * sizeRatio, 0, MidpointRounding.AwayFromZero));
}
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
}
# endregion
break;
default:
break;
}
}
# endregion
}
else if (_isShiftDown)
{
# region
int changedX = p.X - _startX;
int changedY = p.Y - _startY;
switch (_currHitPlace)
{
// 左上
case HitDownSquare.HDS_LEFTTOP:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
// 上中
case HitDownSquare.HDS_TOP:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
// 右上
case HitDownSquare.HDS_RIGHTTOP:
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
- changedY - changedY;
break;
// 左中
case HitDownSquare.HDS_LEFT:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height;
break;
// 左下
case HitDownSquare.HDS_LEFTBOTTOM:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
- changedX - changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
// 右中
case HitDownSquare.HDS_RIGHT:
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height;
break;
// 下中
case HitDownSquare.HDS_BOTTOM:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
// 右下
case HitDownSquare.HDS_RIGHTBOTTOM:
rect.X = _downRectangles[index].Left - changedX;
rect.Y = _downRectangles[index].Top - changedY;
rect.Width = _downRectangles[index].Width
+ changedX + changedX;
rect.Height = _downRectangles[index].Height
+ changedY + changedY;
break;
// Move
case HitDownSquare.HDS_MOVE:
int changedABCX = Math.Abs(changedX);
int changedABCY = Math.Abs(changedY);
if (changedABCX < changedABCY)
{
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
}
else
{
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
}
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height;
break;
default:
break;
}
# endregion
}
else
{
# region
int changedX = p.X - _startX;
int changedY = p.Y - _startY;
switch (_currHitPlace)
{
// 左上
case HitDownSquare.HDS_LEFTTOP:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
// 上中
case HitDownSquare.HDS_TOP:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height - changedY;
break;
// 右上
case HitDownSquare.HDS_RIGHTTOP:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height - changedY;
break;
// 左中
case HitDownSquare.HDS_LEFT:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height;
break;
// 右中
case HitDownSquare.HDS_RIGHT:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height;
break;
// 左下
case HitDownSquare.HDS_LEFTBOTTOM:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width - changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
// 下中
case HitDownSquare.HDS_BOTTOM:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height + changedY;
break;
// 右下
case HitDownSquare.HDS_RIGHTBOTTOM:
rect.X = _downRectangles[index].Left;
rect.Y = _downRectangles[index].Top;
rect.Width = _downRectangles[index].Width + changedX;
rect.Height = _downRectangles[index].Height + changedY;
break;
// Move
case HitDownSquare.HDS_MOVE:
rect.X = _downRectangles[index].Left + changedX;
rect.Y = _downRectangles[index].Top + changedY;
rect.Width = _downRectangles[index].Width;
rect.Height = _downRectangles[index].Height;
break;
default:
break;
}
# endregion
}
if (_isRealFollow)
{
DragHandler(index);
}
else
{
DrawReversibleFrame(_itemLockTyps[index], _moveRectangles[index], rect);
}
_moveRectangles[index] = rect;
}
///
/// 绘制范围需框
///
/// item锁定类别
/// 原范围
/// 当前范围
private void DrawReversibleFrame(ItemLock itemLock, Rectangle? rectOriginal, Rectangle? rectCurrent)
{
// 需框范围
if (_item != null && _item.Owner != null)
{
if (itemLock == ItemLock.LockLocationAndSize)
{
return;
}
if (itemLock == ItemLock.LockSize)
{
if (_currHitPlace != HitDownSquare.HDS_MOVE && _currHitPlace != HitDownSquare.HDS_NONE)
{
return;
}
}
if (rectCurrent.HasValue)
{
Rectangle rect = rectCurrent.Value;
rect.Width += 1;
rect.Height += 1;
_item.Owner.DrawReversibleFrame(rect);
}
if (rectOriginal.HasValue && _isMouseMoveInPaperArea)
{
Rectangle rect = rectOriginal.Value;
rect.Width += 1;
rect.Height += 1;
_item.Owner.DrawReversibleFrame(rect);
}
}
}
///
/// 改变图形位置尺寸
///
/// 选择Item的索引
private void DragHandler(int index)
{
ItemLock itemLock = _itemLockTyps[index];
if (itemLock == ItemLock.LockLocationAndSize)
{
return;
}
else if (itemLock == ItemLock.LockSize)
{
if (_currHitPlace == HitDownSquare.HDS_MOVE || _currHitPlace == HitDownSquare.HDS_NONE)
{
}
else
{
return;
}
}
else
{
}
Rectangle rect = _moveRectangles[index];
LayoutItem item = _item.Owner.SelectedItems[index];
int top = 0;
int left = 0;
int width = 0;
int height = 0;
if (rect.Width < 0)
{
left = rect.Right;
width -= rect.Width;
}
else
{
left = rect.Left;
width = rect.Width;
}
if (rect.Height < 0)
{
top = rect.Bottom;
height -= rect.Height;
}
else
{
top = rect.Top;
height = rect.Height;
}
// 图形超出Layout范围
if (left < 0
|| item.Owner.MaxItemLeft < left
|| top < 0
|| item.Owner.MaxItemTop < top
|| width < item.Owner.MinItemWidth
|| item.Owner.MaxItemWidth < width
|| height < item.Owner.MinItemHeight
|| item.Owner.MaxItemHeight < height
|| item.Owner.PaperArea.Width - 1 < left
|| item.Owner.PaperArea.Height - 1 < top
)
{
return;
}
item.MoveItem(left, top);
item.ChangeItemSize(width, height);
item.ResetItemFrame();
}
///
/// 可视化范围设置
///
/// 可视化范围
private GraphicsPath SetViewRectangle()
{
GraphicsPath path = new GraphicsPath();
if (_item == null)
{
return path;
}
// 左上
_handlerRect[0] = new Rectangle(0, 0, SQUARE_WIDTH, SQUARE_WIDTH);
// 右上
_handlerRect[1] = new Rectangle(Bounds.Width - SQUARE_WIDTH, 0,
SQUARE_WIDTH, SQUARE_WIDTH);
// 左下
_handlerRect[2] = new Rectangle(0, Bounds.Height - SQUARE_WIDTH,
SQUARE_WIDTH, SQUARE_WIDTH);
// 右下
_handlerRect[3] = new Rectangle(_handlerRect[1].X, _handlerRect[2].Y,
SQUARE_WIDTH, SQUARE_WIDTH);
// 上中
_handlerRect[4] = new Rectangle((Bounds.Width) / 2 - SQUARE_WIDTH_HALF, 0,
SQUARE_WIDTH, SQUARE_WIDTH);
// 下中
_handlerRect[5] = new Rectangle(_handlerRect[4].X, _handlerRect[2].Y,
SQUARE_WIDTH, SQUARE_WIDTH);
// 左中
_handlerRect[6] = new Rectangle(0, (Bounds.Height) / 2 - SQUARE_WIDTH_HALF,
SQUARE_WIDTH, SQUARE_WIDTH);
// 右中
_handlerRect[7] = new Rectangle(_handlerRect[1].X, _handlerRect[6].Y,
SQUARE_WIDTH, SQUARE_WIDTH);
for (int i = 0; i < 8; i++)
{
_handlerDrawRect[i] = _handlerRect[i];
_handlerDrawRect[i].Width--;
_handlerDrawRect[i].Height--;
}
path.AddRectangles(_handlerRect);
if (_lock != ItemLock.LockLocationAndSize)
{
// 上左
_sideRect[0] = new Rectangle(
_handlerRect[0].X + SQUARE_WIDTH,
_handlerRect[0].Y + SQUARE_WIDTH_HALF,
_handlerRect[4].X - _handlerRect[0].X - SQUARE_WIDTH,
1
);
// 上右
_sideRect[1] = new Rectangle(
_handlerRect[4].X + SQUARE_WIDTH,
_sideRect[0].Y,
_handlerRect[1].X - _handlerRect[4].X - SQUARE_WIDTH,
1
);
// 左上
_sideRect[2] = new Rectangle(
_handlerRect[0].X + SQUARE_WIDTH_HALF,
_handlerRect[0].Y + SQUARE_WIDTH,
1,
_handlerRect[6].Y - _handlerRect[0].Y - SQUARE_WIDTH
);
// 左下
_sideRect[3] = new Rectangle(
_sideRect[2].X,
_handlerRect[6].Y + SQUARE_WIDTH,
1,
_handlerRect[2].Y - _handlerRect[6].Y - SQUARE_WIDTH
);
// 下左
_sideRect[4] = new Rectangle(
_sideRect[0].X,
_handlerRect[2].Y + SQUARE_WIDTH_HALF,
_sideRect[0].Width,
1
);
// 下右
_sideRect[5] = new Rectangle(
_sideRect[1].X,
_sideRect[4].Y,
_sideRect[1].Width,
1
);
// 右上
_sideRect[6] = new Rectangle(
_handlerRect[1].X + SQUARE_WIDTH_HALF,
_sideRect[2].Y,
1,
_sideRect[2].Height
);
// 右下
_sideRect[7] = new Rectangle(
_sideRect[6].X,
_handlerRect[7].Y + SQUARE_WIDTH,
1,
_sideRect[3].Height
);
_sideDrawRect = new Rectangle(
SQUARE_WIDTH_HALF,
SQUARE_WIDTH_HALF,
Bounds.Width - SQUARE_WIDTH,
Bounds.Height - SQUARE_WIDTH
);
path.AddRectangles(_sideRect);
}
return path;
}
///
/// 绘制边框。
///
private void DrawFrame(Graphics graphics)
{
if (_item == null)
{
return;
}
using (Pen pen = new Pen(Color.Black, 1))
{
pen.DashStyle = DashStyle.Solid;
if (_lock == ItemLock.None)
{
graphics.FillRectangles(Brushes.White, _handlerRect);
graphics.DrawRectangles(pen, _handlerDrawRect);
}
else
{
graphics.FillRectangles(Brushes.Black, _handlerRect);
}
if (_lock != ItemLock.LockLocationAndSize)
{
// 显示框的范围
pen.DashStyle = DashStyle.Dash;
graphics.DrawRectangle(pen, _sideDrawRect);
}
}
}
///
/// 根据鼠标位置设置操作类型。
///
/// 鼠标坐标点
///
/// true :有操作
/// false:无操作
///
private bool Pointer(Point point)
{
if (_lock == ItemLock.LockLocationAndSize)
{
_currHitPlace = HitDownSquare.HDS_NONE;
return false;
}
if (_handlerRect8.Contains(point)
|| _sideRect[0].Contains(point)
|| _sideRect[1].Contains(point)
|| _sideRect[2].Contains(point)
|| _sideRect[3].Contains(point)
|| _sideRect[4].Contains(point)
|| _sideRect[5].Contains(point)
|| _sideRect[6].Contains(point)
|| _sideRect[7].Contains(point)
)
{
Cursor.Current = Cursors.SizeAll;
_currHitPlace = HitDownSquare.HDS_MOVE;
return true;
}
if (_lock == ItemLock.LockSize)
{
_currHitPlace = HitDownSquare.HDS_NONE;
return false;
}
if (!ClientRectangle.Contains(point))
{
_currHitPlace = HitDownSquare.HDS_NONE;
return false;
}
// 左上
if (_handlerRect[0].Contains(point))
{
Cursor.Current = Cursors.SizeNWSE;
_currHitPlace = HitDownSquare.HDS_LEFTTOP;
return true;
}
// 右下
if (_handlerRect[3].Contains(point))
{
Cursor.Current = Cursors.SizeNWSE;
_currHitPlace = HitDownSquare.HDS_RIGHTBOTTOM;
return true;
}
// 右上
if (_handlerRect[1].Contains(point))
{
Cursor.Current = Cursors.SizeNESW;
_currHitPlace = HitDownSquare.HDS_RIGHTTOP;
return true;
}
// 左下
if (_handlerRect[2].Contains(point))
{
Cursor.Current = Cursors.SizeNESW;
_currHitPlace = HitDownSquare.HDS_LEFTBOTTOM;
return true;
}
// 上中
if (_handlerRect[4].Contains(point))
{
Cursor.Current = Cursors.SizeNS;
_currHitPlace = HitDownSquare.HDS_TOP;
return true;
}
// 下中
if (_handlerRect[5].Contains(point))
{
Cursor.Current = Cursors.SizeNS;
_currHitPlace = HitDownSquare.HDS_BOTTOM;
return true;
}
// 左中
if (_handlerRect[6].Contains(point))
{
Cursor.Current = Cursors.SizeWE;
_currHitPlace = HitDownSquare.HDS_LEFT;
return true;
}
// 右中
if (_handlerRect[7].Contains(point))
{
Cursor.Current = Cursors.SizeWE;
_currHitPlace = HitDownSquare.HDS_RIGHT;
return true;
}
// 移动
if (_handlerRect8.Contains(point)
|| _sideRect[0].Contains(point)
|| _sideRect[1].Contains(point)
|| _sideRect[2].Contains(point)
|| _sideRect[3].Contains(point)
|| _sideRect[4].Contains(point)
|| _sideRect[5].Contains(point)
|| _sideRect[6].Contains(point)
|| _sideRect[7].Contains(point)
)
{
Cursor.Current = Cursors.SizeAll;
_currHitPlace = HitDownSquare.HDS_MOVE;
return true;
}
return false;
}
#endregion 函数
}
}