#include #include namespace psemek::ui { namespace { struct button_impl : button { struct shape const & shape() const override { return shape_; } void reshape(geom::box const & bbox) override { shape_.box = bbox; } void draw(painter & p) const override { gfx::color_rgba color = gfx::red; if (state() == state_t::mouseover) color = gfx::light(color); else if (state() == state_t::mousedown) color = gfx::dark(color); p.draw_rect(shape_.box, color); } geom::box size_constraints() const override { return {{{100.f, 200.f}, {50.f, 100.f}}}; } private: box_shape shape_{{{{0.f, 0.f}, {0.f, 0.f}}}}; }; } std::unique_ptr