internal void SizeScrollBars ()
{
if (lock_sizing)
return;
if (!IsHandleCreated)
return;
if (Controls.Count == 0 || ((Form) Controls [0]).WindowState == FormWindowState.Maximized) {
if (hbar != null)
hbar.Visible = false;
if (vbar != null)
vbar.Visible = false;
if (sizegrip != null)
sizegrip.Visible = false;
return;
}
int right = 0;
int left = 0;
int top = 0;
int bottom = 0;
foreach (Form child in Controls) {
if (!child.Visible)
continue;
if (child.Right > right)
right = child.Right;
if (child.Left < left) {
left = child.Left;
}
if (child.Bottom > bottom)
bottom = child.Bottom;
if (child.Top < 0) {
top = child.Top;
}
}
int available_width = ClientSize.Width;
int available_height = ClientSize.Height;
bool need_hbar = false;
bool need_vbar = false;
if (right - left > available_width || left < 0) {
need_hbar = true;
available_height -= SystemInformation.HorizontalScrollBarHeight;
}
if (bottom - top > available_height || top < 0) {
need_vbar = true;
available_width -= SystemInformation.VerticalScrollBarWidth;
if (!need_hbar && (right - left > available_width || left < 0)) {
need_hbar = true;
available_height -= SystemInformation.HorizontalScrollBarHeight;
}
}
if (need_hbar) {
if (hbar == null) {
hbar = new ImplicitHScrollBar ();
Controls.AddImplicit (hbar);
}
hbar.Visible = true;
CalcHBar (left, right, need_vbar);
} else if (hbar != null)
hbar.Visible = false;
if (need_vbar) {
if (vbar == null) {
vbar = new ImplicitVScrollBar ();
Controls.AddImplicit (vbar);
}
vbar.Visible = true;
CalcVBar (top, bottom, need_hbar);
} else if (vbar != null)
vbar.Visible = false;
if (need_hbar && need_vbar) {
if (sizegrip == null) {
sizegrip = new SizeGrip (this.ParentForm);
Controls.AddImplicit (sizegrip);
}
sizegrip.Location = new Point (hbar.Right, vbar.Bottom);
sizegrip.Visible = true;
XplatUI.SetZOrder (sizegrip.Handle, vbar.Handle, false, false);
} else if (sizegrip != null) {
sizegrip.Visible = false;
}
XplatUI.InvalidateNC (Handle);
}