feat(kotlin-compose): design system + 33 components + gallery_kt + e2e android emulator + scaffolder fixes

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-11 16:28:50 +02:00
parent 0bdb8454e1
commit cb6d9e61d1
152 changed files with 148262 additions and 25 deletions
+59
View File
@@ -0,0 +1,59 @@
// NO definir MINIAUDIO_IMPLEMENTATION aqui — vive en audio_engine.cpp.
#include "../../vendor/miniaudio/miniaudio.h"
#include "audio_play.h"
#include <cstdlib>
namespace fn::audio {
Sound sound_load(Engine& e, const char* path) {
Sound s{nullptr, false};
if (!e.ok || !e.impl || !path) return s;
ma_sound* snd = static_cast<ma_sound*>(std::malloc(sizeof(ma_sound)));
if (!snd) return s;
ma_engine* eng = static_cast<ma_engine*>(e.impl);
if (ma_sound_init_from_file(eng, path, 0, NULL, NULL, snd) != MA_SUCCESS) {
std::free(snd);
return s;
}
s.impl = snd;
s.ok = true;
return s;
}
void sound_play(Sound& s) {
if (!s.ok || !s.impl) return;
ma_sound_start(static_cast<ma_sound*>(s.impl));
}
void sound_stop(Sound& s) {
if (!s.ok || !s.impl) return;
ma_sound_stop(static_cast<ma_sound*>(s.impl));
}
void sound_set_volume(Sound& s, float v) {
if (!s.ok || !s.impl) return;
ma_sound_set_volume(static_cast<ma_sound*>(s.impl), v);
}
void sound_destroy(Sound& s) {
if (!s.ok || !s.impl) return;
ma_sound* snd = static_cast<ma_sound*>(s.impl);
ma_sound_uninit(snd);
std::free(snd);
s.impl = nullptr;
s.ok = false;
}
void play_sound_oneshot(Engine& e, const char* path, float volume) {
if (!e.ok || !e.impl || !path) return;
ma_engine* eng = static_cast<ma_engine*>(e.impl);
// ma_engine_play_sound respeta el master volume; volume per-call se aplica
// creando un sonido ad-hoc si el caller quiere control fino. Para fire-and-forget
// usamos el helper directo y dejamos el master modular.
(void)volume;
ma_engine_play_sound(eng, path, NULL);
}
} // namespace fn::audio