aboutsummaryrefslogtreecommitdiff
path: root/sokol_app.h
diff options
context:
space:
mode:
Diffstat (limited to 'sokol_app.h')
-rw-r--r--sokol_app.h35
1 files changed, 20 insertions, 15 deletions
diff --git a/sokol_app.h b/sokol_app.h
index 9904d112..c8b233aa 100644
--- a/sokol_app.h
+++ b/sokol_app.h
@@ -1432,6 +1432,10 @@ extern sapp_desc sokol_main(int argc, char* argv[]);
/* returns true after sokol-app has been initialized */
SOKOL_APP_API_DECL bool sapp_isvalid(void);
+/* open a new window */
+SOKOL_APP_API_DECL sapp_window sapp_open_window(const sapp_window_desc* desc);
+/* close a window */
+SOKOL_APP_API_DECL void sapp_close_window(sapp_window window);
/* returns the current framebuffer width in pixels */
SOKOL_APP_API_DECL int sapp_width(void);
/* same as sapp_width(), but returns float */
@@ -1466,8 +1470,6 @@ SOKOL_APP_API_DECL bool sapp_mouse_shown();
SOKOL_APP_API_DECL void sapp_lock_mouse(bool lock);
/* return true if in mouse-pointer-lock mode (this may toggle a few frames later) */
SOKOL_APP_API_DECL bool sapp_mouse_locked(void);
-/* return the userdata pointer optionally provided in sapp_desc */
-SOKOL_APP_API_DECL void* sapp_userdata(void);
/* return a copy of the sapp_desc structure */
SOKOL_APP_API_DECL sapp_desc sapp_query_desc(void);
/* initiate a "soft quit" (sends SAPP_EVENTTYPE_QUIT_REQUESTED) */
@@ -2716,7 +2718,7 @@ _SOKOL_PRIVATE bool _sapp_strcpy(const char* src, char* dst, int max_len) {
}
}
-_SOKOL_PRIVATE sapp_window_desc _sapp_window_defaults(const sapp_window_desc* in_desc) {
+_SOKOL_PRIVATE sapp_window_desc _sapp_window_desc_defaults(const sapp_window_desc* in_desc) {
sapp_window_desc desc = *in_desc;
desc.title = _sapp_def(desc.title, "sokol_app");
desc.width = _sapp_def(desc.width, 640);
@@ -2897,7 +2899,7 @@ _SOKOL_PRIVATE void _sapp_destroy_all_windows(void) {
_SOKOL_PRIVATE sapp_desc _sapp_desc_defaults(const sapp_desc* in_desc) {
sapp_desc desc = *in_desc;
desc.window_pool_size = _sapp_def(desc.window_pool_size, _SAPP_DEFAULT_POOL_SIZE);
- desc.window = _sapp_window_defaults(&desc.window);
+ desc.window = _sapp_window_desc_defaults(&desc.window);
desc.html5.canvas_name = _sapp_def(desc.html5.canvas_name, "canvas");
return desc;
}
@@ -2963,16 +2965,13 @@ _SOKOL_PRIVATE void _sapp_clear_drop_buffer(_sapp_window_t* win) {
}
}
-_SOKOL_PRIVATE void _sapp_frame(void) {
- // FIXME: loop over all windows
- _sapp_window_t* win = _sapp_push_window(_sapp.main_window_id);
+_SOKOL_PRIVATE void _sapp_frame(_sapp_window_t* win) {
if (win->first_frame) {
win->first_frame = false;
_sapp_call_init(win);
}
_sapp_call_frame(win);
_sapp.frame_count++;
- _sapp_pop_window();
}
_SOKOL_PRIVATE bool _sapp_image_validate(const sapp_image_desc* desc) {
@@ -3649,13 +3648,11 @@ _SOKOL_PRIVATE void _sapp_macos_set_icon(const sapp_icon_desc* icon_desc, int nu
CGImageRelease(cg_img);
}
-_SOKOL_PRIVATE void _sapp_macos_frame(void) {
- _sapp_frame();
+_SOKOL_PRIVATE void _sapp_macos_frame(_sapp_window_t* win) {
+ _sapp_frame(win);
// FIXME FIXME FIXME
if (_sapp.quit_requested || _sapp.quit_ordered) {
- _sapp_window_t* win = _sapp_push_window(_sapp.main_window_id);
[win->macos.window performClose:nil];
- _sapp_pop_window();
}
}
@@ -3843,10 +3840,12 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) {
- (void)drawRect:(NSRect)rect {
_SOKOL_UNUSED(rect);
- _sapp_macos_frame();
+ _sapp_window_t* win = _sapp_push_window(self.win_id);
+ _sapp_macos_frame(win);
#if !defined(SOKOL_METAL)
[[_sapp.macos.view openGLContext] flushBuffer];
#endif
+ _sapp_pop_window();
}
- (BOOL)isOpaque {
@@ -11074,8 +11073,14 @@ SOKOL_API_IMPL bool sapp_isvalid(void) {
return _sapp.valid;
}
-SOKOL_API_IMPL void* sapp_userdata(void) {
- return _sapp.desc.window.user_data;
+SOKOL_API_IMPL sapp_window sapp_open_window(const sapp_window_desc* in_desc) {
+ SOKOL_ASSERT(in_desc);
+ const sapp_window_desc desc = _sapp_window_desc_defaults(in_desc);
+ return _sapp_make_window_id(_sapp_create_window(&desc));
+}
+
+SOKOL_API_IMPL void sapp_close_window(sapp_window window) {
+ // FIXME
}
SOKOL_API_IMPL sapp_desc sapp_query_desc(void) {