feat(service-menu): pobla VIDEO amb zoom, fullscreen, vsync, AA i postfx
This commit is contained in:
@@ -28,6 +28,8 @@
|
||||
#include "core/graphics/vector_text.hpp"
|
||||
#include "core/rendering/render_context.hpp"
|
||||
|
||||
class SDLManager;
|
||||
|
||||
namespace System {
|
||||
|
||||
class ServiceMenu {
|
||||
@@ -48,7 +50,12 @@ namespace System {
|
||||
Kind kind = Kind::LABEL;
|
||||
std::string label_key; // Clau de locale
|
||||
bool selectable = true;
|
||||
// SUBMENU / ACTION: callback en ENTER / RIGHT.
|
||||
std::function<void()> on_activate;
|
||||
// TOGGLE / CYCLE / INT_RANGE: text del valor actual (renderitzat a la dreta).
|
||||
std::function<std::string()> get_value_text;
|
||||
// TOGGLE / CYCLE / INT_RANGE: callback amb +1 (RIGHT/ENTER) o -1 (LEFT).
|
||||
std::function<void(int)> on_change;
|
||||
};
|
||||
|
||||
struct Page {
|
||||
@@ -57,9 +64,10 @@ namespace System {
|
||||
std::size_t cursor = 0;
|
||||
};
|
||||
|
||||
// Inicialitza el singleton amb el renderer global (propietat del
|
||||
// Director via SDLManager). Posterior get() retorna instancia valida.
|
||||
static void init(Rendering::Renderer* renderer);
|
||||
// Inicialitza el singleton amb el renderer global i l'SDLManager (per
|
||||
// a operar amb video toggles: fullscreen, vsync, AA, postfx, zoom).
|
||||
// Tots dos son propietat del Director i sobreviuen al menu.
|
||||
static void init(Rendering::Renderer* renderer, SDLManager* sdl);
|
||||
static void destroy();
|
||||
[[nodiscard]] static auto get() -> ServiceMenu*;
|
||||
|
||||
@@ -75,14 +83,18 @@ namespace System {
|
||||
auto handleEvent(const SDL_Event& event) -> bool;
|
||||
|
||||
private:
|
||||
explicit ServiceMenu(Rendering::Renderer* renderer);
|
||||
ServiceMenu(Rendering::Renderer* renderer, SDLManager* sdl);
|
||||
|
||||
void buildRootPage();
|
||||
void pushSubmenuPlaceholder(const std::string& title_key);
|
||||
[[nodiscard]] auto buildVideoPage() const -> Page;
|
||||
void pushPage(Page page);
|
||||
void popPage();
|
||||
void moveCursor(int direction);
|
||||
void activateCurrent();
|
||||
// RIGHT (direction=+1) / LEFT (direction=-1). Per a TOGGLE/CYCLE/INT_RANGE
|
||||
// crida on_change. Per a SUBMENU/ACTION nomes +1 (entra/activa).
|
||||
void changeValue(int direction);
|
||||
|
||||
// Alçada objectiu de la caixa per a la pagina superior (sense animacio).
|
||||
[[nodiscard]] auto computeTargetHeight() const -> float;
|
||||
@@ -91,6 +103,7 @@ namespace System {
|
||||
[[nodiscard]] static auto computeItemTopY(float box_y, std::size_t index) -> float;
|
||||
|
||||
Rendering::Renderer* renderer_;
|
||||
SDLManager* sdl_;
|
||||
Graphics::VectorText text_;
|
||||
|
||||
std::vector<Page> stack_;
|
||||
|
||||
Reference in New Issue
Block a user