summaryrefslogtreecommitdiff
path: root/Userland/Services/WindowServer/AppletManager.h
blob: f92fe9979aa572652c96a1db189996cd8fb71189 (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
/*
 * Copyright (c) 2020, Hüseyin Aslıtürk <asliturk@hotmail.com>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <WindowServer/Window.h>
#include <WindowServer/WindowManager.h>

namespace WindowServer {

class AppletManager : public Core::Object {
    C_OBJECT(AppletManager)
public:
    ~AppletManager();

    static AppletManager& the();

    virtual void event(Core::Event&) override;

    void add_applet(Window& applet);
    void remove_applet(Window& applet);
    void draw();
    void invalidate_applet(const Window& applet, const Gfx::IntRect& rect);
    void relayout();

    void set_position(const Gfx::IntPoint&);

    Window* window() { return m_window; }
    const Window* window() const { return m_window; }

    void did_change_theme();

private:
    AppletManager();

    void repaint();
    void draw_applet(const Window& applet);
    void set_hovered_applet(Window*);

    Vector<WeakPtr<Window>> m_applets;
    RefPtr<Window> m_window;
    WeakPtr<Window> m_hovered_applet;
};

}