ladybird/Widgets/WindowManager.h

84 lines
1.8 KiB
C
Raw Normal View History

2018-10-11 17:52:40 +03:00
#pragma once
#include "Object.h"
2018-10-12 02:03:22 +03:00
#include "Rect.h"
#include "Color.h"
2018-10-11 17:52:40 +03:00
#include <AK/HashTable.h>
2019-01-09 05:16:58 +03:00
#include <AK/InlineLinkedList.h>
#include <AK/WeakPtr.h>
2018-10-11 17:52:40 +03:00
2018-10-12 02:20:06 +03:00
class MouseEvent;
class PaintEvent;
class Widget;
class Window;
class GraphicsBitmap;
2018-10-11 17:52:40 +03:00
class WindowManager : public Object {
public:
static WindowManager& the();
2018-10-12 02:03:22 +03:00
void addWindow(Window&);
void removeWindow(Window&);
2018-10-11 17:52:40 +03:00
2018-10-12 02:03:22 +03:00
void notifyTitleChanged(Window&);
void notifyRectChanged(Window&, const Rect& oldRect, const Rect& newRect);
2018-10-11 17:52:40 +03:00
Window* activeWindow() { return m_activeWindow.ptr(); }
void setActiveWindow(Window*);
bool isVisible(Window&) const;
void did_paint(Window&);
2019-01-09 05:16:58 +03:00
void move_to_front(Window&);
static void initialize();
void redraw_cursor();
void invalidate(const Window&);
void invalidate(const Rect&);
void invalidate();
void flush(const Rect&);
2018-10-11 17:52:40 +03:00
private:
WindowManager();
virtual ~WindowManager() override;
2018-10-11 17:52:40 +03:00
2018-10-12 02:20:06 +03:00
void processMouseEvent(MouseEvent&);
void handleTitleBarMouseEvent(Window&, MouseEvent&);
virtual void event(Event&) override;
2018-10-11 17:52:40 +03:00
Color m_activeWindowBorderColor;
Color m_activeWindowTitleColor;
Color m_inactiveWindowBorderColor;
Color m_inactiveWindowTitleColor;
void compose();
void paintWindowFrame(Window&);
2018-10-12 02:03:22 +03:00
HashTable<Window*> m_windows;
2019-01-09 05:16:58 +03:00
InlineLinkedList<Window> m_windows_in_order;
WeakPtr<Window> m_activeWindow;
WeakPtr<Window> m_dragWindow;
Point m_dragOrigin;
Point m_dragWindowOrigin;
Rect m_lastDragRect;
Rect m_dragStartRect;
Rect m_dragEndRect;
Rect m_last_cursor_rect;
unsigned m_recompose_count { 0 };
RetainPtr<GraphicsBitmap> m_front_bitmap;
RetainPtr<GraphicsBitmap> m_back_bitmap;
Vector<Rect> m_invalidated_rects;
bool m_pending_compose_event { false };
2018-10-11 17:52:40 +03:00
};