Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef BALL_ICON_H
- #define BALL_ICON_H
- #include "abstract_widgets.h"
- namespace widgets {
- struct ball_icon final : widget {
- private:
- int cur_radius;
- public:
- explicit ball_icon(int radius_) : cur_radius(radius_) {
- }
- [[nodiscard]] int width() const final {
- return 2 * cur_radius + 1;
- }
- [[nodiscard]] int height() const final {
- return 2 * cur_radius + 1;
- }
- ball_icon *child_at(int x, int y) final {
- if ((cur_radius - x) * (cur_radius - x) +
- (cur_radius - y) * (cur_radius - y) <=
- cur_radius * cur_radius) {
- return this;
- }
- return nullptr;
- }
- [[nodiscard]] int radius() const {
- return this->cur_radius;
- }
- void radius(int new_radius) {
- this->cur_radius = new_radius;
- }
- };
- inline auto make_ball_icon(int radius) {
- return std::make_unique<ball_icon>(radius);
- }
- } // namespace widgets
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement