Sine Striker
2023-12-13 a51b5688e1c33d3ce96b48c869603b00f908f513
src/core/contexts/abstractwindowcontext.cpp
@@ -7,8 +7,14 @@
namespace QWK {
    AbstractWindowContext::AbstractWindowContext() {
    }
    QWK_USED static constexpr const struct {
        const quint32 activeLight = MAKE_RGBA_COLOR(210, 233, 189, 226);
        const quint32 activeDark = MAKE_RGBA_COLOR(177, 205, 190, 240);
        const quint32 inactiveLight = MAKE_RGBA_COLOR(193, 195, 211, 203);
        const quint32 inactiveDark = MAKE_RGBA_COLOR(240, 240, 250, 255);
    } kSampleColorSet;
    AbstractWindowContext::AbstractWindowContext() = default;
    AbstractWindowContext::~AbstractWindowContext() = default;
@@ -28,7 +34,7 @@
        if (!setupHost()) {
            m_host = nullptr;
            m_delegate = nullptr;
            m_delegate.reset();
            m_windowHandle = nullptr;
            return false;
        }
@@ -90,10 +96,6 @@
        }
        m_titleBar = item;
        return true;
    }
    void AbstractWindowContext::showSystemMenu(const QPoint &pos) {
        virtual_hook(ShowSystemMenuHook, &const_cast<QPoint &>(pos));
    }
    QRegion AbstractWindowContext::hitTestShape() const {
@@ -172,52 +174,25 @@
        return {};
    }
    static constexpr const struct {
        const quint32 lilac = MAKE_RGBA_COLOR(210, 233, 189, 226);
        const quint32 pink = MAKE_RGBA_COLOR(177, 205, 190, 240);
        const quint32 tile = MAKE_RGBA_COLOR(193, 195, 211, 203);
        const quint32 azure = MAKE_RGBA_COLOR(25, 90, 190, 255);
    } kSampleColorSet{};
    void AbstractWindowContext::virtual_hook(int id, void *data) {
        switch (id) {
            case CentralizeHook: {
                // TODO: Qt
                break;
            }
            case ShowSystemMenuHook: {
                const auto &pos = *reinterpret_cast<const QPoint *>(data);
                // ...
                return;
                // TODO: Qt
                break;
            }
            case NeedsDrawBordersHook: {
                auto &result = *reinterpret_cast<bool *>(data);
                result = false;
                return;
            }
            case DrawBordersHook: {
                auto args = reinterpret_cast<void **>(data);
                auto &painter = *reinterpret_cast<QPainter *>(args[0]);
                auto &rect = *reinterpret_cast<const QRect *>(args[1]);
                QPen pen{};
                pen.setWidth(1);
                // Top
                pen.setColor(kSampleColorSet.lilac);
                painter.setPen(pen);
                painter.drawLine(rect.topLeft(), rect.topRight());
                // Right
                pen.setColor(kSampleColorSet.pink);
                painter.setPen(pen);
                painter.drawLine(rect.topRight(), rect.bottomRight());
                // Bottom
                pen.setColor(kSampleColorSet.tile);
                painter.setPen(pen);
                painter.drawLine(rect.bottomLeft(), rect.bottomRight());
                // Right
                pen.setColor(kSampleColorSet.azure);
                painter.setPen(pen);
                painter.drawLine(rect.topLeft(), rect.bottomLeft());
            case DefaultColorsHook: {
                auto &map = *static_cast<QMap<QString, QColor> *>(data);
                map.clear();
                map.insert(QStringLiteral("activeLight"), kSampleColorSet.activeLight);
                map.insert(QStringLiteral("activeDark"), kSampleColorSet.activeDark);
                map.insert(QStringLiteral("inactiveLight"), kSampleColorSet.inactiveLight);
                map.insert(QStringLiteral("inactiveDark"), kSampleColorSet.inactiveDark);
                return;
            }
            default:
@@ -225,4 +200,8 @@
        }
    }
    void AbstractWindowContext::showSystemMenu(const QPoint &pos) {
        virtual_hook(ShowSystemMenuHook, &const_cast<QPoint &>(pos));
    }
}