1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #pragma once
- #ifndef SNAKE_BUTTON_HXX
- #define SNAKE_BUTTON_HXX
- #include <SDL.h>
- #include <SDL_ttf.h>
- #include <functional>
- #include <string>
- #include "../../NonCopyable.hxx"
- #include "UiColor.hxx"
- #include "../AssetManager.hxx"
- class Button final : private NonCopyable {
- public:
- static int constexpr MIN_WIDTH = 12;
- static int constexpr MIN_HEIGHT = 14;
- Button(int x, int y, int w, int h, UiColor color = UiColor::Grey);
- void set_title(std::string const& title);
- [[nodiscard]] std::string const& title() const;
- void set_pressed(bool pressed);
- [[nodiscard]] bool is_pressed() const;
- void set_visible(bool visible);
- [[nodiscard]] bool is_visible() const;
- void update();
- void render(SDLRenderer& renderer);
- void trigger();
- void set_on_click(std::function<void()> handler);
- void move(int x, int y);
- void resize(int w, int h);
- [[nodiscard]] SDL_Rect get_bounding_box() const;
- private:
- std::string title_{};
- int x_, y_, w_, h_;
- bool pressed_;
- bool visible_;
- std::function<void()> on_click_;
- Asset<SDL_Texture*> up_;
- Asset<SDL_Texture*> down_;
- Asset<TTF_Font*> font_;
- };
- #endif // SNAKE_BUTTON_HXX
|