Add simple macos window cmds; add moon.gif app icon; add editor mode for low power editing

This commit is contained in:
John Alanbrook 2023-09-19 06:10:00 +00:00
parent 27aaa8e05d
commit 24a3ee20c6
6 changed files with 65 additions and 13 deletions

View file

@ -210,7 +210,7 @@ jso: tools/jso.c $(BIN)/libquickjs.a
clean: clean:
@echo Cleaning project @echo Cleaning project
@rm -rf bin dist @rm -rf bin dist
@rm -f shaders/*.sglsl.h shaders/*.metal core.cdb jso cdb packer TAGS @rm -f shaders/*.sglsl.h shaders/*.metal core.cdb jso cdb packer TAGS scripts/*.jso
@make -C $(CDB) clean @make -C $(CDB) clean
@make -C quickjs clean @make -C quickjs clean

BIN
icons/moon.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -97,7 +97,7 @@ var Debug = {
if (this.draw_names) if (this.draw_names)
Game.objects.forEach(function(x) { Game.objects.forEach(function(x) {
GUI.text(x.fullpath(), world2screen(x.pos).add([0,32]), 1, [84,110,255]); GUI.text(x, world2screen(x.pos).add([0,32]), 1, [84,110,255]);
}); });
if (Debug.Options.gif.rec) { if (Debug.Options.gif.rec) {

View file

@ -3437,6 +3437,50 @@ _SOKOL_PRIVATE void _sapp_macos_run(const sapp_desc* desc) {
// set the application dock icon as early as possible, otherwise // set the application dock icon as early as possible, otherwise
// the dummy icon will be visible for a short time // the dummy icon will be visible for a short time
sapp_set_icon(&_sapp.desc.icon); sapp_set_icon(&_sapp.desc.icon);
NSMenu* menu_bar = [[NSMenu alloc] init];
NSMenuItem* app_menu_item = [[NSMenuItem alloc] init];
[menu_bar addItem:app_menu_item];
NSApp.mainMenu = menu_bar;
NSMenu* app_menu = [[NSMenu alloc] init];
NSString* window_title_as_nsstring = [NSString stringWithUTF8String:desc->window_title];
NSString* quit_title = [@"Quit " stringByAppendingString:window_title_as_nsstring];
NSMenuItem* quit_menu_item = [[NSMenuItem alloc]
initWithTitle:quit_title
action:@selector(terminate:)
keyEquivalent:@"q"];
NSString* hide_title = [@"Hide " stringByAppendingString:window_title_as_nsstring];
NSMenuItem* hide_menu_item = [[NSMenuItem alloc]
initWithTitle:hide_title
action:@selector(hide:)
keyEquivalent:@"h"];
NSMenuItem* hide_others_item = [[NSMenuItem alloc]
initWithTitle:@"Hide Others"
action:@selector(hideOtherApplications:)
keyEquivalent:@"h"];
[hide_others_item setKeyEquivalentModifierMask: NSEventModifierFlagOption];
NSMenuItem* show_all_item = [[NSMenuItem alloc]
initWithTitle:@"Show All"
action:@selector(unhideAllApplications:)
keyEquivalent:@""];
[app_menu addItem:hide_menu_item];
[app_menu addItem:hide_others_item];
[app_menu addItem:show_all_item];
[app_menu addItem:[NSMenuItem separatorItem]];
[app_menu addItem:quit_menu_item];
app_menu_item.submenu = app_menu;
_SAPP_OBJC_RELEASE(window_title_as_nsstring);
_SAPP_OBJC_RELEASE(app_menu);
_SAPP_OBJC_RELEASE(app_menu_item);
_SAPP_OBJC_RELEASE(menu_bar);
_sapp.macos.app_dlg = [[_sapp_macos_app_delegate alloc] init]; _sapp.macos.app_dlg = [[_sapp_macos_app_delegate alloc] init];
NSApp.delegate = _sapp.macos.app_dlg; NSApp.delegate = _sapp.macos.app_dlg;

View file

@ -83,12 +83,13 @@ void window_seticon(struct window *w, struct Texture *tex)
int size; int size;
unsigned char *data; unsigned char *data;
}; };
struct isize sizes[3]; struct isize sizes[4];
sizes[0].size = 16; sizes[0].size = 16;
sizes[1].size = 32; sizes[1].size = 32;
sizes[2].size = 64; sizes[2].size = 64;
sizes[3].size = 128;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 4; i++) {
sizes[i].data = malloc(4*sizes[i].size*sizes[i].size); sizes[i].data = malloc(4*sizes[i].size*sizes[i].size);
stbir_resize_uint8(tex->data, tex->width, tex->height, 0, sizes[i].data, sizes[i].size, sizes[i].size, 0, 4); stbir_resize_uint8(tex->data, tex->width, tex->height, 0, sizes[i].data, sizes[i].size, sizes[i].size, 0, 4);
} }
@ -98,11 +99,12 @@ void window_seticon(struct window *w, struct Texture *tex)
{ .width = sizes[0].size, .height = sizes[0].size, .pixels = { .ptr=sizes[0].data, .size=4*sizes[0].size*sizes[0].size } }, { .width = sizes[0].size, .height = sizes[0].size, .pixels = { .ptr=sizes[0].data, .size=4*sizes[0].size*sizes[0].size } },
{ .width = sizes[1].size, .height = sizes[1].size, .pixels = { .ptr=sizes[1].data, .size=4*sizes[1].size*sizes[1].size } }, { .width = sizes[1].size, .height = sizes[1].size, .pixels = { .ptr=sizes[1].data, .size=4*sizes[1].size*sizes[1].size } },
{ .width = sizes[2].size, .height = sizes[2].size, .pixels = { .ptr=sizes[2].data, .size=4*sizes[2].size*sizes[2].size } }, { .width = sizes[2].size, .height = sizes[2].size, .pixels = { .ptr=sizes[2].data, .size=4*sizes[2].size*sizes[2].size } },
{ .width = sizes[3].size, .height = sizes[3].size, .pixels = { .ptr=sizes[3].data, .size=4*sizes[3].size*sizes[3].size } },
} }
}; };
sapp_set_icon(&idsc); sapp_set_icon(&idsc);
for (int i = 0; i < 3; i++) for (int i = 0; i < 4; i++)
free(sizes[i].data); free(sizes[i].data);
} }

View file

@ -133,6 +133,7 @@ static char **args;
void c_init() { void c_init() {
render_init(); render_init();
window_set_icon("icons/moon.gif");
window_resize(sapp_width(), sapp_height()); window_resize(sapp_width(), sapp_height());
script_evalf("initialize();"); script_evalf("initialize();");
} }
@ -141,14 +142,10 @@ int frame_fps() {
return 1.0/sapp_frame_duration(); return 1.0/sapp_frame_duration();
} }
static double low_fps = 1/24.0; static void process_frame()
static double low_fps_c = 0.0;
void c_frame()
{ {
double elapsed = sapp_frame_duration(); double elapsed = sapp_frame_duration();
appTime += elapsed; appTime += elapsed;
low_fps_c += elapsed;
input_poll(0); input_poll(0);
timer_update(elapsed, timescale); timer_update(elapsed, timescale);
@ -175,10 +172,9 @@ void c_frame()
sim_pause(); sim_pause();
render_dirty = 1; render_dirty = 1;
} }
low_fps_c = 0.0f;
} }
if (sim_play == SIM_PLAY || render_dirty || low_fps_c >= low_fps) { if (sim_play == SIM_PLAY || render_dirty) {
prof_start(&prof_draw); prof_start(&prof_draw);
window_render(&mainwin); window_render(&mainwin);
prof(&prof_draw); prof(&prof_draw);
@ -188,6 +184,12 @@ void c_frame()
gameobjects_cleanup(); gameobjects_cleanup();
} }
void c_frame()
{
if (sim_play != SIM_PLAY) return;
process_frame();
}
void c_clean() { void c_clean() {
gif_rec_end("out.gif"); gif_rec_end("out.gif");
}; };
@ -257,6 +259,9 @@ void c_event(const sapp_event *e)
window_quit(); window_quit();
break; break;
} }
if (sim_play != SIM_PLAY)
process_frame();
} }
int sim_playing() { return sim_play == SIM_PLAY; } int sim_playing() { return sim_play == SIM_PLAY; }
@ -370,5 +375,6 @@ sapp_desc sokol_main(int argc, char **argv) {
start_desc.height = mainwin.height; start_desc.height = mainwin.height;
start_desc.fullscreen = 0; start_desc.fullscreen = 0;
return start_desc; return start_desc;
} }