JKSV/include/ui/IconMenu.hpp
2025-08-06 19:35:23 -04:00

51 lines
1.9 KiB
C++

#pragma once
#include "ui/Menu.hpp"
#include <memory>
namespace ui
{
/// @brief This is a hacky derived class to use Menu's code with Icons instead.
class IconMenu final : public ui::Menu
{
public:
/// @brief Default constructor.
IconMenu() = default;
/// @brief This constructor calls initialize.
/// @param x X coordinate to render the menu to.
/// @param y Y coordinate to render the menu to.
/// @param renderTargetHeight Height of the render target to calculate how many options can be displayed at once.
IconMenu(int x, int y, int renderTargetHeight);
/// @brief Required destructor.
~IconMenu() {};
std::shared_ptr<ui::IconMenu> create(int x, int y, int renderTargetHeight);
/// @brief Initializes the menu.
/// @param x X coordinate to render the menu to.
/// @param y Y coordinate to render the menu to.
/// @param renderTargetHeight Height of the render target to calculate how many options can be displayed at
/// once.
void initialize(int x, int y, int renderTargetHeight);
/// @brief Runs the update routine.
/// @param hasFocus Whether or not the containing state has focus.
void update(bool hasFocus) override;
/// @brief Runs the render routine.
/// @param target Target to render to.
/// @param hasFocus Whether or not the containing state has focus.
void render(sdl::SharedTexture &target, bool hasFocus) override;
/// @brief Adds a new icon to the menu.
/// @param newOption Icon to add.
void add_option(sdl::SharedTexture newOption);
private:
/// @brief Vector of shared texture pointers to textures used.
std::vector<sdl::SharedTexture> m_options;
};
} // namespace ui