ladybird/Widgets/MsgBox.cpp
Andreas Kling f6d2c3ed87 Hook everything up to run the GUI on top of the kernel.
Okay things kinda sorta work. Both Bochs and QEMU now boot into GUI mode.
There's a ton of stuff that doesn't make sense and so many things to rework.

Still it's quite cool to have made it this far. :^)
2019-01-10 23:19:29 +01:00

59 lines
1.7 KiB
C++

#include "MsgBox.h"
#include "Font.h"
#include "AbstractScreen.h"
#include "Window.h"
#include "Label.h"
#include "Button.h"
void MsgBox(Window* owner, String&& text)
{
Font& font = Font::defaultFont();
auto screenRect = AbstractScreen::the().rect();
int textWidth = text.length() * font.glyphWidth() + 8;
int textHeight = font.glyphHeight() + 8;
int horizontalPadding = 16;
int verticalPadding = 16;
int buttonWidth = 60;
int buttonHeight = 20;
int windowWidth = textWidth + horizontalPadding * 2;
int windowHeight = textHeight + buttonHeight + verticalPadding * 3;
Rect windowRect(
screenRect.center().x() - windowWidth / 2,
screenRect.center().y() - windowHeight / 2,
windowWidth,
windowHeight
);
Rect buttonRect(
windowWidth / 2 - buttonWidth / 2,
windowHeight - verticalPadding - buttonHeight,
buttonWidth,
buttonHeight
);
auto* window = new Window;
window->setTitle("MsgBox");
window->setRect(windowRect);
auto* widget = new Widget;
widget->setWindowRelativeRect({ 0, 0, windowWidth, windowHeight });
widget->setFillWithBackgroundColor(true);
window->setMainWidget(widget);
auto* label = new Label(widget);
label->setWindowRelativeRect({
horizontalPadding,
verticalPadding,
textWidth,
textHeight
});
label->setText(move(text));
auto* button = new Button(widget);
button->setCaption("OK");
button->setWindowRelativeRect(buttonRect);
button->onClick = [] (Button& button) {
printf("MsgBox button pressed, closing MsgBox :)\n");
button.window()->close();
};
}