2021-06-03 19:14:02 +02:00
|
|
|
#ifndef WIDGET_HPP
|
|
|
|
#define WIDGET_HPP
|
|
|
|
|
2021-07-10 19:55:53 +02:00
|
|
|
#include <SDL2/SDL_events.h>
|
|
|
|
#include <SDL2/SDL_rect.h>
|
2021-06-03 19:14:02 +02:00
|
|
|
|
2021-07-16 17:18:13 +02:00
|
|
|
#include <basic_widgets/sdl/data_type.hpp>
|
|
|
|
#include <basic_widgets/sdl/renderer.hpp>
|
|
|
|
|
2021-07-10 19:55:53 +02:00
|
|
|
struct SDL_Renderer;
|
|
|
|
|
|
|
|
namespace bwidgets::abstract
|
2021-06-03 19:14:02 +02:00
|
|
|
{
|
2021-07-10 19:55:53 +02:00
|
|
|
class Widget
|
2021-06-13 15:44:11 +02:00
|
|
|
{
|
2021-07-10 19:55:53 +02:00
|
|
|
protected:
|
2021-07-16 17:18:13 +02:00
|
|
|
sdl::Renderer* _renderer {nullptr};
|
|
|
|
SDL_Rect _viewport {0, 0, 0, 0};
|
|
|
|
SDL_Rect _widget_area {0, 0, 0, 0};
|
2021-07-10 19:55:53 +02:00
|
|
|
|
2021-07-16 17:18:13 +02:00
|
|
|
virtual void _handle_geometry_change(const SDL_Rect&) noexcept = 0;
|
|
|
|
virtual void _handle_renderer_change(sdl::Renderer*) {}
|
|
|
|
virtual void _handle_rendering() = 0;
|
2021-07-10 19:55:53 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
Widget* parent;
|
|
|
|
|
2021-07-16 17:18:13 +02:00
|
|
|
Widget(Widget* p=nullptr) : parent(p) {}
|
2021-07-10 19:55:53 +02:00
|
|
|
|
2021-07-16 17:18:13 +02:00
|
|
|
//*********************************************
|
|
|
|
//
|
|
|
|
virtual ~Widget() noexcept = default;
|
2021-07-10 19:55:53 +02:00
|
|
|
virtual void handle_event(const SDL_Event&);
|
2021-07-16 17:18:13 +02:00
|
|
|
// -----
|
|
|
|
inline virtual sdl::Size size() const noexcept
|
2021-07-12 00:58:59 +02:00
|
|
|
{
|
|
|
|
return {_widget_area.w, _widget_area.h};
|
|
|
|
}
|
2021-07-16 17:18:13 +02:00
|
|
|
//
|
|
|
|
//*********************************************
|
|
|
|
|
|
|
|
virtual void render() final;
|
|
|
|
// -----
|
|
|
|
virtual inline void renderer(sdl::Renderer* r) final
|
|
|
|
{
|
|
|
|
_handle_renderer_change(r);
|
|
|
|
_renderer = r;
|
|
|
|
}
|
|
|
|
virtual inline void viewport(const SDL_Rect& vp) noexcept final
|
|
|
|
{
|
|
|
|
_handle_geometry_change(vp);
|
|
|
|
_viewport = vp;
|
|
|
|
}
|
2021-07-10 19:55:53 +02:00
|
|
|
};
|
|
|
|
}
|
2021-06-03 19:14:02 +02:00
|
|
|
|
|
|
|
#endif
|