66 lines
1.1 KiB
C
66 lines
1.1 KiB
C
|
/**
|
||
|
* @file Widget.h
|
||
|
* @author apio (cloudapio.eu)
|
||
|
* @brief Abstract widget class.
|
||
|
*
|
||
|
* @copyright Copyright (c) 2023, the Luna authors.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#pragma once
|
||
|
#include <luna/Result.h>
|
||
|
#include <ui/Canvas.h>
|
||
|
#include <ui/Point.h>
|
||
|
#include <ui/Rect.h>
|
||
|
|
||
|
namespace ui
|
||
|
{
|
||
|
class Window;
|
||
|
|
||
|
enum class EventResult
|
||
|
{
|
||
|
DidHandle,
|
||
|
DidNotHandle,
|
||
|
};
|
||
|
|
||
|
class Widget
|
||
|
{
|
||
|
public:
|
||
|
virtual Result<EventResult> handle_mousemove(Point position);
|
||
|
|
||
|
virtual Result<void> draw(Canvas& canvas);
|
||
|
|
||
|
void set_window(Window* window, Rect rect, Badge<Window>)
|
||
|
{
|
||
|
m_window = window;
|
||
|
m_rect = rect;
|
||
|
}
|
||
|
|
||
|
void set_parent(Widget* parent)
|
||
|
{
|
||
|
m_parent = parent;
|
||
|
m_window = parent->m_window;
|
||
|
}
|
||
|
|
||
|
Widget* parent()
|
||
|
{
|
||
|
return m_parent;
|
||
|
}
|
||
|
|
||
|
Window* window()
|
||
|
{
|
||
|
return m_window;
|
||
|
}
|
||
|
|
||
|
Rect& rect()
|
||
|
{
|
||
|
return m_rect;
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
Widget* m_parent { nullptr };
|
||
|
Window* m_window;
|
||
|
Rect m_rect { 0, 0, 50, 50 };
|
||
|
};
|
||
|
}
|