protected Rectangle ClampRect(Rectangle r) { if (parent == null || !ClampMouseRectToParent) { return(r); } Rectangle parentRect = parent.ClampRect(parent.rect); if (parentRect.Width <= 0 || parentRect.Height <= 0) { return(Rectangle.Empty); } if (parentRect.X > r.X) { int diff = parentRect.X - r.X; r.X = parentRect.X; r.Width -= diff; } if (parentRect.Y > r.Y) { int diff = parentRect.Y - r.Y; r.Y = parentRect.Y; r.Height -= diff; } if (parentRect.X + parentRect.Width < r.X + r.Width) { int diff = (r.X + r.Width) - (parentRect.X + parentRect.Width); r.Width -= diff; } if (parentRect.Y + parentRect.Height < r.Y + r.Height) { int diff = (r.Y + r.Height) - (parentRect.Y + parentRect.Height); r.Height -= diff; } if (r.Width <= 0 || r.Height <= 0) { return(Rectangle.Empty); } return(r); }