working on Mac event limitted execution
This commit is contained in:
parent
772adc67a3
commit
fccb93ccf9
|
@ -120,7 +120,7 @@ OPEN_FILE_HOOK_SIG(default_file_settings){
|
|||
parse_context_id = parse_context_language_rust;
|
||||
}
|
||||
|
||||
if (match(ext, "cpp") || match(ext, "h") || match(ext, "c") || match(ext, "hpp") || match(ext, "cc")){
|
||||
if (match(ext, "cpp") || match(ext, "h") || match(ext, "c") || match(ext, "hpp") || match(ext, "cc") || match(ext, "glsl") || match(ext, "m")){
|
||||
if (parse_context_language_cpp == 0){
|
||||
init_language_cpp(app);
|
||||
}
|
||||
|
|
|
@ -125,10 +125,8 @@ Sys_Get_4ed_Path_Sig(system_get_4ed_path){
|
|||
////////////////////////////////
|
||||
|
||||
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.
|
||||
system_schedule_step(void){
|
||||
osx_schedule_step();
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
@ -189,7 +187,9 @@ Sys_Post_Clipboard_Sig(system_post_clipboard){
|
|||
// CLI
|
||||
//
|
||||
|
||||
// HACK(allen): ALMOST an exact duplicate from the Linux version. Just epoll doesn't port. deduplicate.
|
||||
// HACK(allen): ALMOST an exact duplicate from the Linux version. Just epoll doesn't port. deduplicate or switch to NSTask.
|
||||
global i32 cli_count = 0;
|
||||
|
||||
internal
|
||||
Sys_CLI_Call_Sig(system_cli_call){
|
||||
i32 pipe_fds[2];
|
||||
|
@ -231,7 +231,7 @@ Sys_CLI_Call_Sig(system_cli_call){
|
|||
*(int*)&cli_out->out_read = pipe_fds[PIPE_FD_READ];
|
||||
*(int*)&cli_out->out_write = pipe_fds[PIPE_FD_WRITE];
|
||||
|
||||
// TODO(allen): Getting updates when there is new something new on the pipe!?
|
||||
++cli_count;
|
||||
}
|
||||
|
||||
return(true);
|
||||
|
@ -288,6 +288,8 @@ Sys_CLI_End_Update_Sig(system_cli_end_update){
|
|||
|
||||
close(*(int*)&cli->out_read);
|
||||
close(*(int*)&cli->out_write);
|
||||
|
||||
--cli_count;
|
||||
}
|
||||
|
||||
return(close_me);
|
||||
|
@ -314,10 +316,10 @@ osx_free(void *ptr, umem size){
|
|||
|
||||
external void
|
||||
osx_resize(int width, int height){
|
||||
if (width > 0 && height > 0){
|
||||
osx_objc.width = width;
|
||||
osx_objc.height = height;
|
||||
|
||||
if (width > 0 && height > 0){
|
||||
glViewport(0, 0, width, height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
|
@ -326,6 +328,8 @@ osx_resize(int width, int height){
|
|||
|
||||
target.width = width;
|
||||
target.height = height;
|
||||
|
||||
osx_schedule_step();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -379,7 +383,6 @@ osx_character_input(u32 code, OSX_Keyboard_Modifiers modifier_flags){
|
|||
case 0xF712: c = key_f15; break;
|
||||
case 0xF713: c = key_f16; break;
|
||||
}
|
||||
fprintf(stdout, "INPUT: %c\n", (char)code);
|
||||
|
||||
b8 mods[MDFR_INDEX_COUNT] = {0};
|
||||
|
||||
|
@ -411,19 +414,29 @@ osx_character_input(u32 code, OSX_Keyboard_Modifiers modifier_flags){
|
|||
else{
|
||||
osx_push_key(0, 0, 0, mods);
|
||||
}
|
||||
|
||||
osx_schedule_step();
|
||||
}
|
||||
|
||||
external void
|
||||
osx_mouse(i32 mx, i32 my, u32 type){
|
||||
osxvars.input.mouse.x = mx;
|
||||
osxvars.input.mouse.y = osx_objc.height - my;
|
||||
i32 new_x = mx;
|
||||
i32 new_y = osx_objc.height - my;
|
||||
if (new_x != osxvars.input.mouse.x && new_y != osxvars.input.mouse.y){
|
||||
osxvars.input.mouse.x = new_x;
|
||||
osxvars.input.mouse.y = new_y;
|
||||
osx_schedule_step();
|
||||
}
|
||||
|
||||
if (type == MouseType_Press){
|
||||
osxvars.input.mouse.press_l = true;
|
||||
osxvars.input.mouse.l = true;
|
||||
osx_schedule_step();
|
||||
}
|
||||
if (type == MouseType_Release){
|
||||
osxvars.input.mouse.release_l = true;
|
||||
osxvars.input.mouse.l = false;
|
||||
osx_schedule_step();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -435,15 +448,18 @@ osx_mouse_wheel(float dx, float dy){
|
|||
else if (dy < 0){
|
||||
osxvars.input.mouse.wheel = -1;
|
||||
}
|
||||
osx_schedule_step();
|
||||
}
|
||||
|
||||
external void
|
||||
osx_try_to_close(void){
|
||||
system_send_exit_signal();
|
||||
osx_schedule_step();
|
||||
}
|
||||
|
||||
external void
|
||||
osx_step(void){
|
||||
DBG_POINT();
|
||||
Application_Step_Result result = {};
|
||||
result.mouse_cursor_type = APP_MOUSE_CURSOR_DEFAULT;
|
||||
result.trying_to_kill = !osxvars.keep_running;
|
||||
|
@ -491,6 +507,10 @@ osx_step(void){
|
|||
}
|
||||
|
||||
launch_rendering(&sysfunc, &target);
|
||||
|
||||
if (result.animating || cli_count > 0){
|
||||
osx_schedule_step();
|
||||
}
|
||||
}
|
||||
|
||||
external void
|
||||
|
@ -598,7 +618,6 @@ osx_init(){
|
|||
DBG_POINT();
|
||||
char cwd[4096];
|
||||
u32 size = sysfunc.get_current_path(cwd, sizeof(cwd));
|
||||
fprintf(stdout, "cwd = \"%.*s\"\n", size, cwd);
|
||||
if (size == 0 || size >= sizeof(cwd)){
|
||||
system_error_box("Could not get current directory at launch.");
|
||||
}
|
||||
|
|
|
@ -68,10 +68,12 @@ osx_error_dialogue(char *str){
|
|||
|
||||
@interface My4coderView : NSOpenGLView{
|
||||
@public
|
||||
CVDisplayLinkRef displayLink;
|
||||
//CVDisplayLinkRef displayLink;
|
||||
}
|
||||
|
||||
- (CVReturn)getFrameForTime:(const CVTimeStamp*)time;
|
||||
- (void)requestDisplay;
|
||||
- (CVReturn)getFrame;
|
||||
- (void)drawRect:(NSRect)bounds;
|
||||
@end
|
||||
|
||||
#define DISPLINK_SIG(n) CVReturn n(CVDisplayLinkRef link, const CVTimeStamp *now, const CVTimeStamp *output, CVOptionFlags flags_in, CVOptionFlags *flags_out, void *context)
|
||||
|
@ -132,7 +134,12 @@ static DISPLINK_SIG(osx_display_link);
|
|||
return(NO);
|
||||
}
|
||||
|
||||
- (CVReturn)getFrameForTime:(const CVTimeStamp*)time{
|
||||
- (void)requestDisplay{
|
||||
NSRect rect = CGRectMake(0, 0, osx_objc.width, osx_objc.height);
|
||||
[self setNeedsDisplayInRect:rect];
|
||||
}
|
||||
|
||||
- (CVReturn)getFrame{
|
||||
@autoreleasepool
|
||||
{
|
||||
if (osx_objc.running){
|
||||
|
@ -232,6 +239,10 @@ static DISPLINK_SIG(osx_display_link);
|
|||
return self;
|
||||
}
|
||||
|
||||
- (void)drawRect: (NSRect) bounds{
|
||||
[self getFrame];
|
||||
}
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[self init_gl];
|
||||
|
@ -246,6 +257,7 @@ static DISPLINK_SIG(osx_display_link);
|
|||
GLint swapInt = 1;
|
||||
[[self openGLContext] setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
|
||||
|
||||
#if 0
|
||||
CVReturn cvreturn = CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
|
||||
cvreturn = CVDisplayLinkSetOutputCallback(displayLink, &osx_display_link, (__bridge void*)(self));
|
||||
|
||||
|
@ -254,14 +266,17 @@ static DISPLINK_SIG(osx_display_link);
|
|||
cvreturn = CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(displayLink, cglContext, cglPixelFormat);
|
||||
|
||||
CVDisplayLinkStart(displayLink);
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
|
||||
#if 0
|
||||
CVDisplayLinkStop(displayLink);
|
||||
CVDisplayLinkRelease(displayLink);
|
||||
#endif
|
||||
}
|
||||
|
||||
- (BOOL)acceptsFirstResponder
|
||||
|
@ -280,12 +295,14 @@ static DISPLINK_SIG(osx_display_link);
|
|||
}
|
||||
@end
|
||||
|
||||
#if 0
|
||||
static
|
||||
DISPLINK_SIG(osx_display_link){
|
||||
My4coderView* view = (__bridge My4coderView*)context;
|
||||
CVReturn result = [view getFrameForTime:output];
|
||||
CVReturn result = [view getFrame];
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
@implementation AppDelegate
|
||||
- (void)applicationDidFinishLaunching:(id)sender
|
||||
|
@ -519,7 +536,7 @@ osx_add_file_listener(char *dir_name){
|
|||
return;
|
||||
}
|
||||
|
||||
fprintf(stdout, "ADD_FILE_LISTENER: %s\n", dir_name);
|
||||
//fprintf(stdout, "ADD_FILE_LISTENER: %s\n", dir_name);
|
||||
|
||||
i32 fd = open(dir_name, O_EVTONLY);
|
||||
if (fd <= 0){
|
||||
|
@ -588,6 +605,21 @@ osx_get_file_change_event(char *buffer, i32 max, i32 *size){
|
|||
return(result);
|
||||
}
|
||||
|
||||
My4coderView* view = 0;
|
||||
|
||||
void
|
||||
osx_schedule_step(void){
|
||||
//DBG_POINT();
|
||||
#if 1
|
||||
[NSTimer scheduledTimerWithTimeInterval: 0.0
|
||||
target: view
|
||||
selector: @selector(requestDisplay)
|
||||
userInfo: nil repeats:NO];
|
||||
#else
|
||||
[view requestDisplay];
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
osx_close_app(void){
|
||||
[NSApp terminate: nil];
|
||||
|
@ -620,7 +652,7 @@ main(int argc, char **argv){
|
|||
|
||||
[window setAcceptsMouseMovedEvents:YES];
|
||||
|
||||
My4coderView* view = [[My4coderView alloc] init];
|
||||
view = [[My4coderView alloc] init];
|
||||
[view setFrame:[[window contentView] bounds]];
|
||||
[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
#define DBG_POINT() fprintf(stdout, "%s\n", __FILE__ ":" LINE_STR ":")
|
||||
#else
|
||||
#define DBG_POINT()
|
||||
|
@ -102,6 +102,9 @@ osx_remove_file_listener(char *file_name);
|
|||
external i32
|
||||
osx_get_file_change_event(char *buffer, i32 max, i32 *size);
|
||||
|
||||
external void
|
||||
osx_schedule_step(void);
|
||||
|
||||
external void
|
||||
osx_close_app(void);
|
||||
|
||||
|
|
Loading…
Reference in New Issue