#pragma once #include "RoundedRectangle.hpp" #include #include #include #include namespace sf { class Event; class RenderWindow; class Shader; } namespace QuickMedia { class Tabs { public: Tabs(sf::Shader *rounded_rectangle_shader, sf::Color shade_color = sf::Color(33, 37, 44)); static float get_height(); static float get_shade_height(); // Returns the id (index) of the tab. The ids start from 0 int add_tab(const std::string &title); void on_event(sf::Event &event); void draw(sf::RenderWindow &window, sf::Vector2f pos, float width); void set_text(int index, const std::string &text); void set_selected(int index); int get_selected() const; std::function on_change_tab = nullptr; private: float tab_index_to_x_offset(int index); private: std::vector tab_texts; std::vector tab_labels_utf8; RoundedRectangle background; sf::RectangleShape shade; int selected_tab = 0; float scroll = 0.0f; float width_per_tab = 0.0f; float tab_background_width = 0.0f; float container_width = 0.0f; int tab_offset = 0; sf::Color shade_color; }; }