void SignalModelContainer_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (activeSignal != null && ClientRectangle.Contains(e.X, e.Y))
{
Rectangle r1 = activeSignal.Bounds;
activeSignal.Location = new Point(e.X - activeLocationX, e.Y - activeLocationY);
int left = Math.Max(0, Math.Min(r1.Left, activeSignal.Location.X));
int top = Math.Max(0, Math.Min(r1.Top, activeSignal.Location.Y));
int right = Math.Max(left + r1.Width, activeLocationX + activeSignal.Width);
int bottom = Math.Max(top + r1.Height, activeLocationY + activeSignal.Height);
Rectangle r2 = new Rectangle(left, top, right + 10, bottom + 10);
Region region = new Region(r1);
region.Union(r2);
region.Union(activeSignal.getAffectedRegion());
Invalidate(region);
Update();
activeLocationX = e.X - activeSignal.Location.X;
activeLocationY = e.Y - activeSignal.Location.Y;
}
}
}