private void EnforceInnerMinimum() { // Find the available inner rectangle of our containing control Rectangle innerRect = DockingHelper.InnerRectangle(Control); // Do we need to adjust the left/right edge controls? if (innerRect.Width < InnerMinimum.Width) { EnforceInnerMinimum(InnerMinimum.Width - innerRect.Width, Orientation.Horizontal); } // Do we need to adjust the top/bottom edge controls? if (innerRect.Height < InnerMinimum.Height) { EnforceInnerMinimum(InnerMinimum.Height - innerRect.Height, Orientation.Vertical); } }
private Rectangle FindMovementRect(KryptonDockingDockspace dockspaceElement, Rectangle moveRect) { // Find the available inner rectangle of our containing control Rectangle innerRect = DockingHelper.InnerRectangle(Control); // How much can we reduce the width/height of the dockspace to reach the minimum Size dockspaceMinimum = dockspaceElement.DockspaceControl.MinimumSize; int reduceWidth = Math.Max(dockspaceElement.DockspaceControl.Width - dockspaceMinimum.Width, 0); int reduceHeight = Math.Max(dockspaceElement.DockspaceControl.Height - dockspaceMinimum.Height, 0); // Get the minimum size requested for the inner area of the control Size innerMinimum = Size.Empty; if (GetParentType(typeof(KryptonDockingControl)) is KryptonDockingControl dockingControl) { innerMinimum = dockingControl.InnerMinimum; } // How much can we expand the width/height of the dockspace to reach the inner minimum int expandWidth = Math.Max(innerRect.Width - innerMinimum.Width, 0); int expandHeight = Math.Max(innerRect.Height - innerMinimum.Height, 0); // Limit check we are not growing bigger than the maximum allowed Size dockspaceMaximum = dockspaceElement.DockspaceControl.MaximumSize; if (dockspaceMaximum.Width > 0) { expandWidth = Math.Min(expandWidth, dockspaceMaximum.Width); } if (dockspaceMaximum.Height > 0) { expandHeight = Math.Min(expandHeight, dockspaceMaximum.Height); } // Allow movement rectangle to extend inwards according to inner rectangle and outwards according to dockspace size Rectangle retRect = Rectangle.Empty; switch (Edge) { case DockingEdge.Left: retRect = new Rectangle(moveRect.X - reduceWidth, moveRect.Y, moveRect.Width + reduceWidth + expandWidth, moveRect.Height); break; case DockingEdge.Right: retRect = new Rectangle(moveRect.X - expandWidth, moveRect.Y, moveRect.Width + reduceWidth + expandWidth, moveRect.Height); break; case DockingEdge.Top: retRect = new Rectangle(moveRect.X, moveRect.Y - reduceHeight, moveRect.Width, moveRect.Height + reduceHeight + expandHeight); break; case DockingEdge.Bottom: retRect = new Rectangle(moveRect.X, moveRect.Y - expandHeight, moveRect.Width, moveRect.Height + reduceHeight + expandHeight); break; } // We do not allow negative width/height retRect.Width = Math.Max(retRect.Width, 0); retRect.Height = Math.Max(retRect.Height, 0); return(retRect); }