private void ClampSize(float?desiredLeft = null, float?desiredBottom = null) { if (Parent == null) { return; } // var top = Rect.Top; var right = Rect.Right; var left = desiredLeft ?? Rect.Left; var bottom = desiredBottom ?? Rect.Bottom; // clamp so it doesn't go too high or low (leave space for alerts UI) var maxBottom = Parent.Size.Y - MinDistanceFromBottom; if (maxBottom <= MinHeight) { // we can't fit in our given space (window made awkwardly small), so give up // and overlap at our min height bottom = MinHeight; } else { bottom = Math.Clamp(bottom, MinHeight, maxBottom); } var maxLeft = Parent.Size.X - MinWidth; if (maxLeft <= MinLeft) { // window too narrow, give up and overlap at our max left left = maxLeft; } else { left = Math.Clamp(left, MinLeft, maxLeft); } LayoutContainer.SetMarginLeft(this, -((right + 10) - left)); LayoutContainer.SetMarginBottom(this, bottom); ChatMgr.ChatBoxOnResized(new ChatResizedEventArgs(bottom)); }