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;
}
}
}