69 lines
1.3 KiB
C++
69 lines
1.3 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_mouse_move(Point position);
|
|
virtual Result<EventResult> handle_mouse_down(Point position, int buttons);
|
|
virtual Result<EventResult> handle_mouse_up(Point position, int buttons);
|
|
virtual Result<EventResult> handle_mouse_leave();
|
|
|
|
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 };
|
|
};
|
|
}
|