worked out dialogue box, work queue, stubbed more functions

This commit is contained in:
Allen Webster 2017-09-26 11:12:51 -04:00
parent 670726442b
commit 80b32ca4ed
6 changed files with 94 additions and 14 deletions

View File

@ -117,7 +117,7 @@ PLAT_THREAD_SIG(job_thread_proc){
// with the cancel job routine, which may try to cancel this job // with the cancel job routine, which may try to cancel this job
// at the same time that we try to run it // at the same time that we try to run it
i32 safe_running_thread =InterlockedCompareExchange(&full_job->running_thread, thread->id, THREAD_NOT_ASSIGNED); i32 safe_running_thread = InterlockedCompareExchange(&full_job->running_thread, thread->id, THREAD_NOT_ASSIGNED);
if (safe_running_thread == THREAD_NOT_ASSIGNED){ if (safe_running_thread == THREAD_NOT_ASSIGNED){
thread->job_id = full_job->id; thread->job_id = full_job->id;

View File

@ -89,6 +89,7 @@
LOGF("%s: " fmt "\n", __func__, ##__VA_ARGS__); \ LOGF("%s: " fmt "\n", __func__, ##__VA_ARGS__); \
} while (0) } while (0)
// TODO(allen): Make an intrinsics header that uses the cracked OS to define a single set of intrinsic names.
#define InterlockedCompareExchange(dest, ex, comp) \ #define InterlockedCompareExchange(dest, ex, comp) \
__sync_val_compare_and_swap((dest), (comp), (ex)) __sync_val_compare_and_swap((dest), (comp), (ex))

View File

@ -48,11 +48,17 @@
#include <OpenGL/OpenGL.h> #include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h> #include <OpenGL/gl.h>
#include <stdlib.h>
//////////////////////////////// ////////////////////////////////
#include "4ed_shared_thread_constants.h" #include "4ed_shared_thread_constants.h"
#include "unix_threading_wrapper.h" #include "unix_threading_wrapper.h"
// TODO(allen): Make an intrinsics header that uses the cracked OS to define a single set of intrinsic names.
#define InterlockedCompareExchange(dest, ex, comp) \
__sync_val_compare_and_swap((dest), (comp), (ex))
//////////////////////////////// ////////////////////////////////
#define SLASH '/' #define SLASH '/'
@ -67,6 +73,8 @@ global System_Functions sysfunc;
//////////////////////////////// ////////////////////////////////
#include "osx_objective_c_to_cpp_links.h"
OSX_Vars osx;
global Render_Target target; global Render_Target target;
global Application_Memory memory_vars; global Application_Memory memory_vars;
global Plat_Settings plat_settings; global Plat_Settings plat_settings;
@ -79,15 +87,52 @@ global Coroutine_System_Auto_Alloc coroutines;
//////////////////////////////// ////////////////////////////////
#include "unix_4ed_functions.cpp" #include "mac_error_box.cpp"
#include "osx_objective_c_to_cpp_links.h"
OSX_Vars osx;
#include <stdlib.h>
//////////////////////////////// ////////////////////////////////
#include "unix_4ed_functions.cpp"
#include "4ed_shared_file_handling.cpp"
////////////////////////////////
internal void
system_schedule_step(){
// NOTE(allen): It is unclear to me right now what we might need to actually do here.
// The run loop in a Cocoa app will keep rendering the app anyway, I might just need to set a
// "do_new_frame" variable of some kind to true here.
}
////////////////////////////////
#include "4ed_work_queues.cpp"
////////////////////////////////
// TODO(allen): add a "shown but auto-hides on timer" setting here.
internal
Sys_Show_Mouse_Cursor_Sig(system_show_mouse_cursor){
// TODO(allen)
}
internal
Sys_Set_Fullscreen_Sig(system_set_fullscreen){
osx.do_toggle = (osx.full_screen != full_screen);
return(true);
}
internal
Sys_Is_Fullscreen_Sig(system_is_fullscreen){
b32 result = (osx.full_screen != osx.do_toggle);
return(result);
}
// HACK(allen): Why does this work differently from the win32 version!?
internal
Sys_Send_Exit_Signal_Sig(system_send_exit_signal){
osx.running = false;
}
#include "4ed_coroutine_functions.cpp" #include "4ed_coroutine_functions.cpp"
// //
@ -107,8 +152,7 @@ Sys_Post_Clipboard_Sig(system_post_clipboard){
} }
memcpy(osx.clipboard_space, str.str, str.size); memcpy(osx.clipboard_space, str.str, str.size);
osx.clipboard_space[str.size] = 0; osx.clipboard_space[str.size] = 0;
string = osx.clipboard_space string = osx.clipboard_space;
;
} }
osx_post_to_clipboard(string); osx_post_to_clipboard(string);
} }
@ -120,27 +164,27 @@ Sys_Post_Clipboard_Sig(system_post_clipboard){
internal internal
Sys_CLI_Call_Sig(system_cli_call){ Sys_CLI_Call_Sig(system_cli_call){
// b32 #(char *path, char *script_name, CLI_Handles *cli_out) // b32 #(char *path, char *script_name, CLI_Handles *cli_out)
// TODO NotImplemented;
return(true); return(true);
} }
internal internal
Sys_CLI_Begin_Update_Sig(system_cli_begin_update){ Sys_CLI_Begin_Update_Sig(system_cli_begin_update){
// void #(CLI_Handles *cli) // void #(CLI_Handles *cli)
// TODO NotImplemented;
} }
internal internal
Sys_CLI_Update_Step_Sig(system_cli_update_step){ Sys_CLI_Update_Step_Sig(system_cli_update_step){
// b32 #(CLI_Handles *cli, char *dest, u32 max, u32 *amount) // b32 #(CLI_Handles *cli, char *dest, u32 max, u32 *amount)
// TODO NotImplemented;
return(0); return(0);
} }
internal internal
Sys_CLI_End_Update_Sig(system_cli_end_update){ Sys_CLI_End_Update_Sig(system_cli_end_update){
// b32 #(CLI_Handles *cli) // b32 #(CLI_Handles *cli)
// TODO NotImplemented;
return(false); return(false);
} }
@ -197,7 +241,7 @@ osx_init(){
// Memory init // Memory init
// //
memset(&linuxvars, 0, sizeof(linuxvars)); memset(&osx, 0, sizeof(osx));
memset(&target, 0, sizeof(target)); memset(&target, 0, sizeof(target));
memset(&memory_vars, 0, sizeof(memory_vars)); memset(&memory_vars, 0, sizeof(memory_vars));
memset(&plat_settings, 0, sizeof(plat_settings)); memset(&plat_settings, 0, sizeof(plat_settings));

View File

@ -38,6 +38,16 @@ osx_post_to_clipboard(char *str){
osx.just_posted_to_clipboard = true; osx.just_posted_to_clipboard = true;
} }
void
osx_error_dialogue(char *str){
NSAlert *alert = [[NSAlert alloc] init];
[alert addButtonWithTitle:@"OK"];
NSString *text = [NSString stringWithUTF8String:str];
[alert setMessageText:text];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
}
// //
// Entry point, OpenGL window setup. // Entry point, OpenGL window setup.
// //

View File

@ -0,0 +1,19 @@
/*
* Mr. 4th Dimention - Allen Webster
*
* 26.09.2017
*
* Mac error box implementation.
*
*/
// TOP
internal void
system_error_box(char *msg){
osx_error_dialogue(msg);
exit(1);
}
// BOTTOM

View File

@ -39,6 +39,9 @@ typedef struct OSX_Vars{
char *clipboard_space; char *clipboard_space;
umem clipboard_space_max; umem clipboard_space_max;
b32 full_screen;
b32 do_toggle;
} OSX_Vars; } OSX_Vars;
// In C++ layer. // In C++ layer.
@ -69,6 +72,9 @@ osx_init();
external void external void
osx_post_to_clipboard(char *str); osx_post_to_clipboard(char *str);
external void
osx_error_dialogue(char *str);
#endif #endif
// BOTTOM // BOTTOM