feat(cpp/core): parallel_for thread pool + slider widget
parallel_for_cpp_core: ThreadPool reutilizable con parallel_for(begin, end, fn) y parallel_for_chunks(begin, end, fn(tid, lo, hi)). Captura excepciones del worker y las relanza en el caller. Pareja CPU del despacho GPU para Monte Carlo multi-core cuando dispatch GPU no compensa. slider_cpp_core: wrapper de ImGui::SliderFloat/Int/Double con label muted arriba, tokens (primary grab), full-width. Variantes float, float_log (logaritmico), int, double. Para los calculadores que tienen 15-30 sliders cada uno y se beneficia del estilo consistente. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
---
|
||||
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 <Slider> 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.
|
||||
Reference in New Issue
Block a user