Kaynağa Gözat

sokol_app.h: cleanup default value replacement in sapp_desc

Andre Weissflog 5 yıl önce
ebeveyn
işleme
061b56ead4
2 değiştirilmiş dosya ile 29 ekleme ve 19 silme
  1. 0 2
      README.md
  2. 29 17
      sokol_app.h

+ 0 - 2
README.md

@@ -450,9 +450,7 @@ Mainly some "missing features" for desktop apps:
 
 - define an application icon
 - change the window title on existing window
-- allow to programmatically activate and deactivate fullscreen
 - pointer lock
-- show/hide mouse cursor
 - allow to change mouse cursor image (at first only switch between system-provided standard images)
 
 ## sokol_audio.h planned features:

+ 29 - 17
sokol_app.h

@@ -118,7 +118,10 @@
 
     TODO
     ====
-    - Linux clipboard support
+    - Linux:
+        - clipboard support
+        - fullscreen support
+        - show/hide mouse cursor
     - sapp_consume_event() on non-web platforms?
 
     STEP BY STEP
@@ -1092,8 +1095,8 @@ typedef struct {
     bool quit_requested;
     bool quit_ordered;
     bool event_consumed;
-    const char* html5_canvas_name;
     bool html5_ask_leave_site;
+    char html5_canvas_name[_SAPP_MAX_TITLE_LENGTH];
     char window_title[_SAPP_MAX_TITLE_LENGTH];      /* UTF-8 */
     wchar_t window_title_wide[_SAPP_MAX_TITLE_LENGTH];   /* UTF-32 or UCS-2 */
     uint64_t frame_count;
@@ -1191,29 +1194,38 @@ _SOKOL_PRIVATE void _sapp_strcpy(const char* src, char* dst, int max_len) {
     }
 }
 
+_SOKOL_PRIVATE sapp_desc _sapp_desc_defaults(const sapp_desc* in_desc) {
+    sapp_desc desc = *in_desc;
+    desc.width = _sapp_def(desc.width, 640);
+    desc.height = _sapp_def(desc.height, 480);
+    desc.sample_count = _sapp_def(desc.sample_count, 1);
+    desc.swap_interval = _sapp_def(desc.swap_interval, 1);
+    desc.html5_canvas_name = _sapp_def(desc.html5_canvas_name, "canvas");
+    desc.clipboard_size = _sapp_def(desc.clipboard_size, 8192);
+    desc.window_title = _sapp_def(desc.window_title, "sokol_app");
+    return desc;
+}
+
 _SOKOL_PRIVATE void _sapp_init_state(const sapp_desc* desc) {
     memset(&_sapp, 0, sizeof(_sapp));
-    _sapp.desc = *desc;
+    _sapp.desc = _sapp_desc_defaults(desc);
     _sapp.first_frame = true;
-    _sapp.window_width = _sapp_def(_sapp.desc.width, 640);
-    _sapp.window_height = _sapp_def(_sapp.desc.height, 480);
+    _sapp.window_width = _sapp.desc.width;
+    _sapp.window_height = _sapp.desc.height;
     _sapp.framebuffer_width = _sapp.window_width;
     _sapp.framebuffer_height = _sapp.window_height;
-    _sapp.sample_count = _sapp_def(_sapp.desc.sample_count, 1);
-    _sapp.swap_interval = _sapp_def(_sapp.desc.swap_interval, 1);
-    _sapp.html5_canvas_name = _sapp_def(_sapp.desc.html5_canvas_name, "canvas");
+    _sapp.sample_count = _sapp.desc.sample_count;
+    _sapp.swap_interval = _sapp.desc.swap_interval;
+    _sapp_strcpy(_sapp.desc.html5_canvas_name, _sapp.html5_canvas_name, sizeof(_sapp.html5_canvas_name));
+    _sapp.desc.html5_canvas_name = _sapp.html5_canvas_name;
     _sapp.html5_ask_leave_site = _sapp.desc.html5_ask_leave_site;
     _sapp.clipboard_enabled = _sapp.desc.enable_clipboard;
     if (_sapp.clipboard_enabled) {
-        _sapp.clipboard_size = _sapp_def(_sapp.desc.clipboard_size, 8192);
+        _sapp.clipboard_size = _sapp.desc.clipboard_size;
         _sapp.clipboard = (char*) SOKOL_CALLOC(1, _sapp.clipboard_size);
     }
-    if (_sapp.desc.window_title) {
-        _sapp_strcpy(_sapp.desc.window_title, _sapp.window_title, sizeof(_sapp.window_title));
-    }
-    else {
-        _sapp_strcpy("sokol_app", _sapp.window_title, sizeof(_sapp.window_title));
-    }
+    _sapp_strcpy(_sapp.desc.window_title, _sapp.window_title, sizeof(_sapp.window_title));
+    _sapp.desc.window_title = _sapp.window_title;
     _sapp.dpi_scale = 1.0f;
     _sapp.fullscreen = _sapp.desc.fullscreen;
 }
@@ -4456,8 +4468,8 @@ _SOKOL_PRIVATE void _sapp_win32_toggle_fullscreen(void) {
     _sapp.fullscreen = !_sapp.fullscreen;
     if (!_sapp.fullscreen) {
         win_style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX;
-        rect.right = (int) ((float)_sapp_def(_sapp.desc.width, 640) * _sapp_win32_window_scale);
-        rect.bottom = (int) ((float)_sapp_def(_sapp.desc.height, 480) * _sapp_win32_window_scale);
+        rect.right = (int) ((float)_sapp.desc.width * _sapp_win32_window_scale);
+        rect.bottom = (int) ((float)_sapp.desc.height * _sapp_win32_window_scale);
     }
     else {
         win_style = WS_POPUP | WS_SYSMENU | WS_VISIBLE;