/// <summary> /// Show the dock guiders buttons /// </summary> /// <param name="allowedDockMode">allowed dock mode. Guiders will be shown depending on this mode.</param> /// <param name="screenClientBounds">screen client bounds of the container</param> public void ShowDockGuiders(zDockMode allowedDockMode, Rectangle screenClientBounds) { if (allowedDockMode == zDockMode.None) { HideDockGuiders(); return; } if (_lastAllowedDock == allowedDockMode && _lastScreenClientBounds == screenClientBounds) { return; } _lastAllowedDock = allowedDockMode; _lastScreenClientBounds = screenClientBounds; int width = screenClientBounds.Width; int height = screenClientBounds.Height; Point offset = screenClientBounds.Location; Point center = new Point(width / 2, height / 2); Point leftPosition1 = new Point(12, center.Y - _dockLeftGuider1.Height / 2); Point topPosition1 = new Point(center.X - _dockTopGuider1.Width / 2, 12); Point rightPosition1 = new Point(width - _dockRightGuider1.Width - 12, center.Y - _dockRightGuider1.Height / 2); Point bottomPosition1 = new Point(center.X - _dockBottomGuider1.Width / 2, height - _dockBottomGuider1.Height - 12); Point fillPosition = new Point(center.X - _dockFillGuider.Width / 2, center.Y - _dockFillGuider.Height / 2); Point leftPosition2 = new Point(fillPosition.X - _dockLeftGuider2.Width + 7, center.Y - _dockLeftGuider2.Height / 2); Point topPosition2 = new Point(center.X - _dockTopGuider2.Width / 2 - 1, fillPosition.Y - _dockTopGuider2.Height + 7); Point rightPosition2 = new Point(fillPosition.X + _dockFillGuider.Width - 7, center.Y - _dockRightGuider2.Height / 2); Point bottomPosition2 = new Point(center.X - _dockBottomGuider2.Width / 2, fillPosition.Y + _dockBottomGuider2.Height + 7); leftPosition1.Offset(offset); rightPosition1.Offset(offset); topPosition1.Offset(offset); bottomPosition1.Offset(offset); fillPosition.Offset(offset); leftPosition2.Offset(offset); rightPosition2.Offset(offset); topPosition2.Offset(offset); bottomPosition2.Offset(offset); _dockLeftGuider1.Location = leftPosition1; _dockRightGuider1.Location = rightPosition1; _dockTopGuider1.Location = topPosition1; _dockBottomGuider1.Location = bottomPosition1; _dockFillGuider.Location = fillPosition; _dockLeftGuider2.Location = leftPosition2; _dockRightGuider2.Location = rightPosition2; _dockTopGuider2.Location = topPosition2; _dockBottomGuider2.Location = bottomPosition2; _dockFillGuider.Show(); bool showLeft = EnumUtility.Contains(allowedDockMode, zDockMode.Left); _dockLeftGuider1.Visible = showLeft; _dockLeftGuider2.Visible = showLeft; bool showRight = EnumUtility.Contains(allowedDockMode, zDockMode.Right); _dockRightGuider1.Visible = showRight; _dockRightGuider2.Visible = showRight; bool showTop = EnumUtility.Contains(allowedDockMode, zDockMode.Top); _dockTopGuider1.Visible = showTop; _dockTopGuider2.Visible = showTop; bool showBottom = EnumUtility.Contains(allowedDockMode, zDockMode.Bottom); _dockBottomGuider1.Visible = showBottom; _dockBottomGuider2.Visible = showBottom; _dockFillGuider.ShowFillPreview = EnumUtility.Contains(allowedDockMode, zDockMode.Fill); if (VisibleChanged != null) { VisibleChanged(this, EventArgs.Empty); } }