summaryrefslogtreecommitdiff
path: root/Kernel/WindowComposer.cpp
blob: b616d40398893b922cb4e7c5b29a0a15a4110d42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "WindowComposer.h"
#include "Process.h"
#include <Widgets/Font.h>
#include <Widgets/FrameBuffer.h>
#include <Widgets/WindowManager.h>
#include <Widgets/EventLoop.h>
#include <Widgets/MsgBox.h>
#include <Widgets/TextBox.h>
#include <Widgets/Label.h>
#include <Widgets/ListBox.h>
#include <Widgets/Button.h>
#include <Widgets/CheckBox.h>
#include <Widgets/Window.h>

void WindowComposer_main()
{
    auto info = current->get_display_info();

    dbgprintf("Screen is %ux%ux%ubpp\n", info.width, info.height, info.bpp);

    FrameBuffer framebuffer((dword*)info.framebuffer, info.width, info.height);

    MsgBox(nullptr, "Serenity Operating System");

    {
        auto* widgetTestWindow = new Window;
        widgetTestWindow->setTitle("Widget test");
        widgetTestWindow->setRect({ 20, 40, 100, 180 });

        auto* widgetTestWindowWidget = new Widget;
        widgetTestWindowWidget->setWindowRelativeRect({ 0, 0, 100, 100 });
        widgetTestWindow->setMainWidget(widgetTestWindowWidget);

        auto* l = new Label(widgetTestWindowWidget);
        l->setWindowRelativeRect({ 0, 0, 100, 20 });
        l->setText("Label");

        auto* b = new Button(widgetTestWindowWidget);
        b->setWindowRelativeRect({ 0, 20, 100, 20 });
        b->setCaption("Button");

        b->onClick = [] (Button& button) {
            printf("Button %p clicked!\n", &button);
        };

        auto* c = new CheckBox(widgetTestWindowWidget);
        c->setWindowRelativeRect({ 0, 40, 100, 20 });
        c->setCaption("CheckBox");

        auto *lb = new ListBox(widgetTestWindowWidget);
        lb->setWindowRelativeRect({ 0, 60, 100, 100 });
        lb->addItem("This");
        lb->addItem("is");
        lb->addItem("a");
        lb->addItem("ListBox");

        auto *tb = new TextBox(widgetTestWindowWidget);
        tb->setWindowRelativeRect({ 0, 160, 100, 20 });
        tb->setText("Hello!");
        tb->setFocus(true);

        tb->onReturnPressed = [] (TextBox& textBox) {
            printf("TextBox %p return pressed: '%s'\n", &textBox, textBox.text().characters());
            MsgBox(nullptr, textBox.text());
        };

        WindowManager::the().setActiveWindow(widgetTestWindow);
    }

    dbgprintf("Entering WindowComposer main loop.\n");
    EventLoop::main().exec();

    ASSERT_NOT_REACHED();
}