--- name: slider kind: function lang: cpp domain: core version: "1.0.0" purity: impure signature: "bool slider_float(const char* label, float* v, float min, float max, const char* fmt); bool slider_float_log(...); bool slider_int(const char* label, int* v, int min, int max, const char* fmt); bool slider_double(const char* label, double* v, double min, double max, const char* fmt)" description: "Slider ImGui con label muted arriba, estilo acorde con fn_tokens (radius, border, primary grab). Variantes float, float_log (logaritmico), int, double. Equivalente al de Mantine / fn_library." tags: [imgui, slider, ui, tokens, mantine, core] uses_functions: ["tokens_cpp_core"] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [imgui.h, cstdio] tested: false tests: [] test_file_path: "" file_path: "cpp/functions/core/slider.cpp" framework: imgui params: - name: label desc: "Texto del label (mostrado en text_muted arriba). Tambien se usa como id ImGui (concatenado con ##)." - name: value desc: "Pointer al valor; mutado in-place si el usuario lo cambia." - name: min_v desc: "Limite inferior." - name: max_v desc: "Limite superior." - name: fmt desc: "printf-format para el value display. Float default '%.3f'; int default '%d'." output: "Renderiza label + slider full-width. Devuelve true si el valor cambio este frame." --- # slider Slider canonico para los calculadores. Cada calculadora del set tiene 15-30 sliders; tener uno consistente con tokens y full-width acelera el desarrollo y mantiene la identidad visual. ## Patron tipico ```cpp static float prob = 0.2f; if (fn_ui::slider_float("Probabilidad de hit", &prob, 0.0f, 1.0f, "%.3f")) { recalculate(); } static float sigma = 0.1f; fn_ui::slider_float_log("Proposal sigma (log)", &sigma, 0.001f, 10.0f, "%.4f"); static int n_chains = 4; fn_ui::slider_int("Numero de cadenas", &n_chains, 1, 16); static double mu = 0.0; fn_ui::slider_double("Mu", &mu, -10.0, 10.0, "%.6f"); ``` ## Estilo Usa `fn_tokens::colors::primary` para el grab (mismo color que `button` primary). Background `bg`, border `border`, radius `sm`. Coincide con la identidad de `text_input` y demas widgets `core`. ## Notas - `slider_double` down-castea a float internamente (ImGui no expone SliderDouble). Si tu rango requiere fp64 usa `text_input` con parsing manual. - El label es tambien el id ImGui — duplicar labels en el mismo frame causa colision (ImGui asigna ids unicos basados en label). Si necesitas dos sliders con el mismo nombre visible, agregar un sufijo distinto (ej. "Mu##chain1" / "Mu##chain2"). - Para multi-value (vec2/vec3) — no incluido aqui; usar 2/3 sliders separados o ImGui::SliderFloat2/3 directamente.