Confirm/Cancel button positioning logic for Cut Out tool

This commit is contained in:
Niels Martin Hansen 2022-08-16 19:14:19 +02:00
parent d5f522ab80
commit 8b0c5d0d66

View file

@ -52,21 +52,55 @@ public override void OnUpdate()
if (confirmButton != null && cancelButton != null)
{
if (Rectangle.Bottom + buttonOffset + buttonSize.Height > Manager.Form.ClientArea.Bottom &&
Rectangle.Width > (buttonSize.Width * 2) + (buttonOffset * 3) &&
Rectangle.Height > buttonSize.Height + (buttonOffset * 2))
if (IsVerticalTrim)
{
confirmButton.Rectangle = new RectangleF(Rectangle.Right - (buttonOffset * 2) - (buttonSize.Width * 2),
Rectangle.Bottom - buttonOffset - buttonSize.Height, buttonSize.Width, buttonSize.Height);
cancelButton.Rectangle = new RectangleF(Rectangle.Right - buttonOffset - buttonSize.Width,
Rectangle.Bottom - buttonOffset - buttonSize.Height, buttonSize.Width, buttonSize.Height);
float spaceBelow = Manager.Form.ClientArea.Bottom - Rectangle.Bottom;
bool positionBelow = spaceBelow >= buttonSize.Height + 2 * buttonOffset;
float buttonsTop = positionBelow ? Rectangle.Bottom + buttonOffset : Rectangle.Top - buttonOffset - buttonSize.Height;
float buttonsLeft = Rectangle.Left + Rectangle.Width / 2 - (2 * buttonSize.Width + buttonOffset) / 2;
float buttonsRight = buttonsLeft + 2 * buttonSize.Width + buttonOffset;
bool overflowsLeft = buttonsLeft < Manager.Form.ClientArea.Left + buttonOffset;
bool overflowsRight = buttonsRight >= Manager.Form.ClientArea.Right - buttonOffset;
if (overflowsLeft && overflowsRight)
{
// can't fix
}
else if (overflowsLeft)
{
buttonsLeft = Manager.Form.ClientArea.Left + buttonOffset;
}
else if (overflowsRight)
{
buttonsRight = Manager.Form.ClientArea.Right - buttonOffset;
buttonsLeft = buttonsRight - 2 * buttonSize.Width - buttonOffset;
}
confirmButton.Rectangle = new RectangleF(buttonsLeft, buttonsTop, buttonSize.Width, buttonSize.Height);
cancelButton.Rectangle = confirmButton.Rectangle.LocationOffset(buttonSize.Width + buttonOffset, 0);
}
else
{
confirmButton.Rectangle = new RectangleF(Rectangle.Right - (buttonSize.Width * 2) - buttonOffset,
Rectangle.Bottom + buttonOffset, buttonSize.Width, buttonSize.Height);
cancelButton.Rectangle = new RectangleF(Rectangle.Right - buttonSize.Width,
Rectangle.Bottom + buttonOffset, buttonSize.Width, buttonSize.Height);
float spaceRight = Manager.Form.ClientArea.Right - Rectangle.Right;
bool positionRight = spaceRight >= buttonSize.Width + 2 * buttonOffset;
float buttonsLeft = positionRight ? Rectangle.Right + buttonOffset : Rectangle.Left - buttonOffset - buttonSize.Width;
float buttonsTop = Rectangle.Top + Rectangle.Height / 2 - (2 * buttonSize.Height + buttonOffset) / 2;
float buttonsBottom = buttonsTop + 2 * buttonSize.Height + buttonOffset;
bool overflowsTop = buttonsTop < Manager.Form.ClientArea.Top + buttonOffset;
bool overflowsBottom = buttonsBottom >= Manager.Form.ClientArea.Bottom - buttonOffset;
if (overflowsTop && overflowsBottom)
{
// can't fix
}
else if (overflowsTop)
{
buttonsTop = Manager.Form.ClientArea.Top + buttonOffset;
}
else if (overflowsBottom)
{
buttonsBottom = Manager.Form.ClientArea.Bottom - buttonOffset;
buttonsTop = buttonsBottom - 2 * buttonSize.Height - buttonOffset;
}
confirmButton.Rectangle = new RectangleF(buttonsLeft, buttonsTop, buttonSize.Width, buttonSize.Height);
cancelButton.Rectangle = confirmButton.Rectangle.LocationOffset(0, buttonSize.Height + buttonOffset);
}
}
}