summaryrefslogtreecommitdiff
path: root/DevTools/HackStudio/FormWidget.cpp
blob: 4168f7e965f5275e09f09d0e025826e333fce421 (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
75
#include "FormWidget.h"
#include "FormEditorWidget.h"
#include "Tool.h"
#include <LibGUI/GPainter.h>

FormWidget::FormWidget(FormEditorWidget& parent)
    : GWidget(&parent)
{
    set_fill_with_background_color(true);
    set_background_color(Color::WarmGray);
    set_relative_rect(5, 5, 400, 300);

    set_greedy_for_hits(true);
}

FormWidget::~FormWidget()
{
}

FormEditorWidget& FormWidget::editor()
{
    return static_cast<FormEditorWidget&>(*parent());
}

const FormEditorWidget& FormWidget::editor() const
{
    return static_cast<const FormEditorWidget&>(*parent());
}

void FormWidget::paint_event(GPaintEvent& event)
{
    GPainter painter(*this);
    painter.add_clip_rect(event.rect());

    for (int y = 0; y < height(); y += m_grid_size) {
        for (int x = 0; x < width(); x += m_grid_size) {
            painter.set_pixel({ x, y }, Color::from_rgb(0x404040));
        }
    }
}

void FormWidget::second_paint_event(GPaintEvent& event)
{
    if (editor().selection().is_empty())
        return;

    GPainter painter(*this);
    painter.add_clip_rect(event.rect());
    for_each_child_widget([&](auto& child) {
        if (editor().selection().contains(child)) {
            painter.draw_rect(child.relative_rect(), Color::Blue);
        }
        return IterationDecision::Continue;
    });
}

void FormWidget::mousedown_event(GMouseEvent& event)
{
    editor().tool().on_mousedown(event);
}

void FormWidget::mouseup_event(GMouseEvent& event)
{
    editor().tool().on_mouseup(event);
}

void FormWidget::mousemove_event(GMouseEvent& event)
{
    editor().tool().on_mousemove(event);
}

void FormWidget::keydown_event(GKeyEvent& event)
{
    editor().tool().on_keydown(event);
}