#ifndef BWIDGETS_EXAMPLES_EXAMPLE_WIDGET #define BWIDGETS_EXAMPLES_EXAMPLE_WIDGET #include #include #include #include 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