Constrained nuklear.h to nuke.c

This commit is contained in:
John Alanbrook 2023-09-05 14:38:52 +00:00
parent 075b9950e0
commit 4d577dadb7
8 changed files with 76 additions and 56 deletions

View file

@ -32,6 +32,11 @@ endif
ifeq ($(OPT),small)
CFLAGS += -Oz -flto -fno-ident -fno-asynchronous-unwind-tables
LDFLAGS += -flto
ifeq ($(CC), emcc)
LDFLAGS += --closure 1
endif
INFO := $(addsuffix _small,$(INFO))
else
ifeq ($(OPT), 1)
@ -63,7 +68,7 @@ ifeq ($(OS), Windows_NT)
ZIP = .zip
UNZIP = unzip -o -q $(DISTDIR)/$(DIST) -d $(DESTDIR)
else ifeq ($(CC), emcc)
LDFLAGS += -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2 -pthread -s ALLOW_MEMORY_GROWTH=1
LDFLAGS += -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2 -pthread
CFLAGS += -pthread
LDLIBS += pthread quickjs GL openal c m dl
CC = emcc

View file

@ -269,8 +269,8 @@ JSValue duk_gui_img(JSContext *js, JSValueConst this, int argc, JSValueConst *ar
return JS_NULL;
}
struct nk_rect js2nk_rect(JSValue v) {
struct nk_rect rect;
struct rect js2rect(JSValue v) {
struct rect rect;
rect.x = js2number(js_getpropstr(v, "x"));
rect.y = js2number(js_getpropstr(v, "y"));
rect.w = js2number(js_getpropstr(v, "w"));
@ -278,7 +278,7 @@ struct nk_rect js2nk_rect(JSValue v) {
return rect;
}
JSValue nk_rect2js(struct nk_rect rect) {
JSValue rect2js(struct rect rect) {
JSValue obj = JS_NewObject(js);
JS_SetPropertyStr(js, obj, "x", JS_NewFloat64(js, rect.x));
JS_SetPropertyStr(js, obj, "y", JS_NewFloat64(js, rect.y));
@ -312,13 +312,13 @@ JSValue duk_nuke(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
JS_FreeValue(js, tostr);
}
struct nk_rect rect = nk_rect(0, 0, 0, 0);
struct rect rect = (struct rect){0, 0, 0, 0};
JSValue ret = JS_NULL;
switch (cmd) {
case 0:
rect = js2nk_rect(argv[2]);
nuke_begin(str, rect, NK_WINDOW_BORDER | NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | NK_WINDOW_TITLE);
rect = js2rect(argv[2]);
nuke_begin(str, rect);
break;
case 1:
@ -367,7 +367,7 @@ JSValue duk_nuke(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
case 10:
rect = nuke_win_get_bounds();
ret = nk_rect2js(rect);
ret = rect2js(rect);
break;
case 11:

View file

@ -1,29 +1,28 @@
#include "nuke.h"
#define NK_INCLUDE_STANDARD_IO
#define NK_IMPLEMENTATION
#define NK_KEYSTATE_BASED_INPUT
#define NK_INCLUDE_FIXED_TYPES
#define NK_INCLUDE_STANDARD_VARARGS
#define NK_INCLUDE_FONT_BAKING
#define NK_INCLUDE_DEFAULT_FONT
#define NK_INCLUDE_STANDARD_BOOL
#define NK_INCLUDE_DEFAULT_ALLOCATOR
#define NK_INCLUDE_STANDARD_IO
#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT
#define STBTT_STATIC
#include "config.h"
#include "nuke.h"
#if defined __linux__
#define SOKOL_GLCORE33
#elif __EMSCRIPTEN__
#define SOKOL_GLES3
#elif __WIN32
#define SOKOL_GLCORE33
#define SOKOL_WIN32_FORCE_MAIN
#endif
#include "sokol/sokol_gfx.h"
#define SOKOL_NUKLEAR_IMPL
#include "nuklear.h"
#include "sokol/sokol_app.h"
#include "sokol/sokol_nuklear.h"
#include <stdarg.h>
#include "log.h"
@ -34,7 +33,6 @@
#define MAX_ELEMENT_BUFFER 128 * 1024
struct nk_context *ctx;
//static struct nk_glfw nkglfw = {0};
void nuke_init(struct window *win) {
snk_setup(&(snk_desc_t){
@ -44,6 +42,26 @@ void nuke_init(struct window *win) {
ctx = snk_new_frame();
}
struct rect nk2rect(struct nk_rect rect)
{
struct rect r;
r.x = rect.x;
r.y = rect.y;
r.w = rect.w;
r.h = rect.h;
return r;
}
struct nk_rect rect2nk(struct rect rect)
{
struct nk_rect r;
r.x = rect.x;
r.y = rect.y;
r.w = rect.w;
r.h = rect.h;
return r;
}
void nuke_start() {
ctx = snk_new_frame();
}
@ -52,8 +70,8 @@ void nuke_end() {
snk_render(mainwin.width,mainwin.height);
}
int nuke_begin(const char *lbl, struct nk_rect rect, int flags) {
return nk_begin(ctx, lbl, rect, flags);
int nuke_begin(const char *lbl, struct rect rect) {
return nk_begin(ctx, lbl, rect2nk(rect), NK_WINDOW_BORDER | NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | NK_WINDOW_TITLE);
}
int nuke_begin_win(const char *lbl) {
@ -64,8 +82,8 @@ void nuke_stop() {
nk_end(ctx);
}
struct nk_rect nuke_win_get_bounds() {
return nk_window_get_bounds(ctx);
struct rect nuke_win_get_bounds() {
return nk2rect(nk_window_get_bounds(ctx));
}
void nuke_row(int height) {

View file

@ -1,26 +1,17 @@
#ifndef NUKE_H
#define NUKE_H
#define NK_INCLUDE_FIXED_TYPES
#define NK_INCLUDE_STANDARD_VARARGS
#define NK_INCLUDE_FONT_BAKING
#define NK_INCLUDE_DEFAULT_FONT
#define NK_INCLUDE_STANDARD_BOOL
#define NK_INCLUDE_DEFAULT_ALLOCATOR
#define NK_INCLUDE_STANDARD_IO
#define NK_INCLUDE_VERTEX_BUFFER_OUTPUT
#include "nuklear.h"
#include "render.h"
struct window;
void nuke_init(struct window *win);
void nuke_start();
void nuke_end();
int nuke_begin(const char *lbl, struct nk_rect rect, int flags);
int nuke_begin(const char *lbl, struct rect rect);
int nuke_begin_win(const char *lbl);
void nuke_stop();
struct nk_rect nuke_win_get_bounds();
struct rect nuke_win_get_bounds();
void nuke_property_float(const char *lbl, float min, float *val, float max, float step, float dragstep);
#define nuke_prop_float nuke_property_float

View file

@ -1,6 +1,15 @@
#ifndef OPENGL_RENDER_H
#define OPENGL_RENDER_H
#if defined __linux__
#define SOKOL_GLCORE33
#elif __EMSCRIPTEN__
#define SOKOL_GLES3
#elif __WIN32
#define SOKOL_GLCORE33
#define SOKOL_WIN32_FORCE_MAIN
#endif
#include "sokol/sokol_gfx.h"
#include "HandmadeMath.h"
@ -88,6 +97,10 @@ struct boundingbox {
float l;
};
struct rect {
float h, w, x, y;
};
static struct boundingbox cwh2bb(HMM_Vec2 c, HMM_Vec2 wh) {
struct boundingbox bb = {
.t = c.Y + wh.Y/2,

View file

@ -232,6 +232,7 @@ static int ftw_pack(const char *path, const struct stat *sb, int flag)
int pack = 0;
char *ext = strrchr(path, '.');
if (!ext)
return 0;
@ -243,7 +244,6 @@ static int ftw_pack(const char *path, const struct stat *sb, int flag)
}
if (!pack) return 0;
printf("Packing file %s\n", path);
long len;
void *file = slurp_file(path, &len);

View file

@ -36,15 +36,6 @@
#define SOKOL_TRACE_HOOKS
#define SOKOL_IMPL
#if defined __linux__
#define SOKOL_GLCORE33
#elif __EMSCRIPTEN__
#define SOKOL_GLES3
#elif __WIN32
#define SOKOL_GLCORE33
#define SOKOL_WIN32_FORCE_MAIN
#endif
#include "sokol/sokol_gfx.h"
#include "sokol/sokol_app.h"
#include "sokol/sokol_audio.h"
@ -296,7 +287,7 @@ double get_timescale()
return timescale;
}
sapp_desc sokol_main(int sargc, char **sargs) {
sapp_desc sokol_main(int argc, char **argv) {
#ifndef NDEBUG
#ifdef __linux__
int logout = 0;
@ -333,7 +324,7 @@ sapp_desc sokol_main(int sargc, char **sargs) {
int argsize = 0;
for (int i = 1; i < argc; i++) {
argsize += strlen(args[i]);
argsize += strlen(argv[i]);
if (argc > i+1) argsize++;
}
@ -341,18 +332,15 @@ sapp_desc sokol_main(int sargc, char **sargs) {
cmdstr[0] = '\0';
for (int i = 0; i < argc; i++) {
strcat(cmdstr, args[i]);
strcat(cmdstr, argv[i]);
if (argc > i+1) strcat(cmdstr, " ");
}
script_evalf("cmd_args('%s');", cmdstr);
YughWarn("Width, height %d %d", mainwin.width, mainwin.height);
sound_init();
input_init();
return (sapp_desc){
.width = mainwin.width,
.height = mainwin.height,

View file

@ -58,7 +58,7 @@ Cmdline.register_cmd("h", function() {
Game.quit();
},
"Help.");
Cmdline.register_cmd("b", function() { Log.warn("PACKING");cmd(124); Game.quit(); }, "Pack the game into the given name.");
Cmdline.register_cmd("b", function() { cmd(124); Game.quit(); }, "Pack the game into the given name.");
Cmdline.register_cmd("e", function(pawn) {
run("scripts/editor.js");
@ -2366,7 +2366,11 @@ gameobject.clone("sprite", {
//if (IO.exists("config.js"))
// load("config.js");
var prototypes = {};
prototypes.load_all = function()
{
if (IO.exists("proto.json"))
prototypes = JSON.parse(IO.slurp("proto.json"));
@ -2386,7 +2390,8 @@ for (var key in prototypes) {
dainty_assign(gameobjects[key], prototypes[key]);
}
}
}
function save_gameobjects_as_prototypes() { slurpwrite(JSON.stringify(gameobjects,null,2), "proto.json"); };
prototypes.save_gameobjects = function() { slurpwrite(JSON.stringify(gameobjects,null,2), "proto.json"); };
var Gamestate = {};