add imgui listbox

This commit is contained in:
John Alanbrook 2024-09-04 13:23:20 -05:00
parent d33c1af92c
commit 6d2696437c
7 changed files with 63 additions and 22 deletions

View file

@ -258,7 +258,9 @@ console.stackstr = function (skip = 0) {
};
console.stack = function (skip = 0) {
console.log(console.stackstr(skip + 1));
var stack = console.stackstr(skip+1);
console.log(stack);
return stack;
};
console.stdout_lvl = 1;

View file

@ -85,12 +85,21 @@ profile.start_cpu_gather = function()
});
}
function push_time(arr, ob, max)
{
arr.push({
time:profile.now(),
ob
});
}
profile.cpu_frames = [];
profile.cpu_frame = function()
{
if (gathering_cpu) return;
profile.gather(Math.random_range(300,600), function() {
console.stack(2);
push_time(profile.cpu_frames, console.stack(2));
profile.gather_stop();
});
}
@ -318,16 +327,20 @@ profile.print_mem = function()
}
}
profile.last_mem = undefined;
profile.mems = [];
profile.gcs = [];
profile.print_gc = function()
{
var gc = os.check_gc();
if (!gc) return;
var mem = os.mem();
profile.gcs.push(gc);
profile.mems.push(os.mem());
say("GC Hit");
say (`time: ${profile.best_t(gc.time)}`);
say(`new threshold: ${profile.best_mem(mem.gc_threshold)}`);
say(`memory checked: ${profile.best_mem(gc.mem)}`);
say(`memory freed: ${profile.best_mem(gc.startmem - gc.mem)}`);
say(`new threshold: ${profile.best_mem(profile.mems.last().gc_threshold)}`);
say(`memory checked: ${profile.best_mem(profile.gcs.last().mem)}`);
say(`memory freed: ${profile.best_mem(profile.gcs.last().startmem - profile.gcs.last().mem)}`);
}
return {profile};

View file

@ -126,7 +126,6 @@ game.engine_start = function (s) {
};
game.startengine = 0;
var frames = [];
prosperon.release_mode = function()
{
@ -136,13 +135,6 @@ prosperon.release_mode = function()
}
prosperon.debug = true;
globalThis.fps = function () {
return 0;
// var sum = 0;
// for (var i = 0; i < frames.length; i++) sum += frames[i];
// return frames.length / sum;
};
game.timescale = 1;
var eachobj = function (obj, fn) {

View file

@ -168,6 +168,25 @@ JSC_CCALL(imgui_nextcolumn, ImGui::NextColumn() )
JSC_SCALL(imgui_collapsingheader, ret = boolean2js(ImGui::CollapsingHeader(str)) )
JSC_SCALL(imgui_radio, ret = boolean2js(ImGui::RadioButton(str, js2boolean(argv[1]))))
JSC_SCALL(imgui_tree,
if (ImGui::TreeNode(str)) {
script_call_sym(argv[1],0,NULL);
ImGui::TreePop();
}
)
JSC_SCALL(imgui_listbox,
char **arr = js2strarr(argv[1]);
int n = js_arrlen(argv[1]);
int idx = js2number(argv[2]);
ImGui::ListBox(str, &idx, arr, n, 4);
for (int i = 0; i < n; i++)
free(arr[i]);
// arrfree(arr); // TODO: Doesn't this need freed?
ret = number2js(idx);
)
static const JSCFunctionListEntry js_imgui_funcs[] = {
MIST_FUNC_DEF(imgui, window, 2),
MIST_FUNC_DEF(imgui, menu, 2),
@ -191,6 +210,8 @@ static const JSCFunctionListEntry js_imgui_funcs[] = {
MIST_FUNC_DEF(imgui, columns, 2),
MIST_FUNC_DEF(imgui, nextcolumn, 0),
MIST_FUNC_DEF(imgui, collapsingheader, 1),
MIST_FUNC_DEF(imgui, tree, 2),
MIST_FUNC_DEF(imgui, listbox, 3),
};
static int started = 0;
@ -213,6 +234,7 @@ JSValue gui_init(JSContext *js)
void gui_input(sapp_event *e)
{
if (!started) return;
simgui_handle_event(e);
ImGuiIO io = ImGui::GetIO();
wantkeys = io.WantCaptureKeyboard;

View file

@ -184,6 +184,17 @@ void js_setpropstr(JSValue v, const char *str, JSValue p)
static inline cpBody *js2body(JSValue v) { return js2gameobject(v)->body; }
char **js2strarr(JSValue v)
{
int n = js_arrlen(v);
char **arr = malloc(sizeof(*arr));
arr = NULL;
for (int i = 0; i < n; i++)
arrput(arr, js2strdup(js_getpropidx(v, i)));
return arr;
}
JSValue strarr2js(char **c)
{
JSValue arr = JS_NewArray(js);

View file

@ -171,6 +171,8 @@ JSValue floatarr2js(int n, float *a);
int js2boolean(JSValue v);
JSValue boolean2js(int b);
char **js2strarr(JSValue v);
#define PREP_PARENT(TYPE, PARENT) \
TYPE##_proto = JS_NewObject(js); \
JS_SetPropertyFunctionList(js, TYPE##_proto, js_##TYPE##_funcs, countof(js_##TYPE##_funcs)); \

View file

@ -70,13 +70,12 @@ void log_shutdown()
const char *logfmt = "%s:%d: [%s] %s, %s: ";
void mYughLog(int category, int priority, int line, const char *file, const char *message, ...)
{
return;
#ifndef NDEBUG
time_t now = time(NULL);
struct tm *tinfo = localtime(&now);
char timebuf[80];
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", tinfo);
/*
fprintf(logout, logfmt, file, line, timebuf, logstr[priority], catstr[category]);
va_list args;
@ -84,7 +83,7 @@ void mYughLog(int category, int priority, int line, const char *file, const char
vfprintf(logout, message, args);
va_end(args);
fprintf(logout, "\n");
*/
if (priority == LOG_DEBUG || priority >= stdout_lvl) {
printf(logfmt, file, line, timebuf, logcolor[priority], catstr[category]);
va_list args;
@ -109,17 +108,17 @@ void mYughLog(int category, int priority, int line, const char *file, const char
void log_print(const char *str)
{
#ifndef NDEBUG
//fprintf(writeout, "%s", str);
fprintf(writeout, "%s", str);
#else
//printf(str);
//fflush(stdout);
printf(str);
fflush(stdout);
#endif
}
void term_print(const char *str)
{
//fprintf(stdout, "%s", str);
//fflush(stdout);
fprintf(stdout, "%s", str);
fflush(stdout);
}
void sg_logging(const char *tag, uint32_t lvl, uint32_t id, const char *msg, uint32_t line, const char *file, void *data) {