59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
#ifndef BWIDGETS_EXAMPLES_EXAMPLE_WIDGET
|
|
#define BWIDGETS_EXAMPLES_EXAMPLE_WIDGET
|
|
|
|
#include <SDL2/SDL_timer.h>
|
|
|
|
#include <basic_widgets/core/math.hpp>
|
|
#include <basic_widgets/core/renderer.hpp>
|
|
#include <basic_widgets/w/base/widget.hpp>
|
|
|
|
using bwidgets::Color;
|
|
using bwidgets::rect_margin;
|
|
using bwidgets::Size;
|
|
using bwidgets::Widget;
|
|
|
|
class Example final : public Widget
|
|
{
|
|
private:
|
|
void _handle_geometry_change(const SDL_Rect& vp) noexcept override
|
|
{
|
|
_widget_area = {2, 2, vp.w - 4, vp.h - 4};
|
|
}
|
|
|
|
void _handle_rendering() override
|
|
{
|
|
auto now = SDL_GetTicks();
|
|
uint8_t r = 255 * (now % cycle_r / (float)cycle_r); // NOLINT
|
|
uint8_t g = 255 * (now % cycle_g / (float)cycle_g); // NOLINT
|
|
uint8_t b = 255 * (now % cycle_b / (float)cycle_b); // NOLINT
|
|
// NOLINTNEXTLINE(readability-magic-numbers)
|
|
Color base_color {r, g, b, 255};
|
|
|
|
const int border = 10;
|
|
for (auto i = 0; i < border; i += 3) {
|
|
uint8_t alpha = 255 * i / border; // NOLINT(readability-magic-numbers)
|
|
_renderer
|
|
->draw_color({
|
|
{base_color().r, base_color().g, base_color().b, alpha}
|
|
})
|
|
->draw_rect(rect_margin(_widget_area, {i, i}));
|
|
}
|
|
|
|
_renderer->draw_color(base_color)
|
|
->draw_rect(nullptr)
|
|
->fill_rect(rect_margin(_widget_area, {border * 2, border * 2}));
|
|
}
|
|
|
|
public:
|
|
unsigned int cycle_r {3500}; // NOLINT(readability-magic-numbers)
|
|
unsigned int cycle_g {3500}; // NOLINT(readability-magic-numbers)
|
|
unsigned int cycle_b {3500}; // NOLINT(readability-magic-numbers)
|
|
|
|
[[nodiscard]] auto size() const noexcept -> Size override
|
|
{
|
|
return {128, 64}; // NOLINT(readability-magic-numbers)
|
|
}
|
|
};
|
|
|
|
#endif
|