macos: keyboard fixes

This commit is contained in:
luboslenco
2026-05-01 20:54:42 +02:00
parent 69db654236
commit 552b57f994
+220 -270
View File
@@ -8,33 +8,138 @@
#include <objc/runtime.h>
#include <stdbool.h>
struct WindowData {
struct window_data {
id handle;
id view;
bool fullscreen;
void (*resizeCallback)(int width, int height, void *data);
void *resizeCallbackData;
bool (*closeCallback)(void *data);
void *closeCallbackData;
void (*resize_callback)(int width, int height, void *data);
void *resize_callback_data;
bool (*close_callback)(void *data);
void *close_callback_data;
};
static struct WindowData windows[1] = {0};
static bool controlKeyMouseButton = false;
static int mouseX, mouseY;
static bool keyboardShown = false;
static const char *videoFormats[] = {"ogv", NULL};
static NSApplication *myapp;
static NSWindow *window;
static BasicMTKView *view;
static char language[3];
static int current_cursor_index = 0;
static struct window_data windows[1] = {0};
static bool controlkey_mouse_button = false;
static bool keyboard_shown = false;
static const char *video_formats[] = {"ogv", NULL};
static NSApplication *myapp;
static NSWindow *window;
static BasicMTKView *view;
static char language[3];
static int current_cursor_index = 0;
static int key_translated[128];
static void init_key_translation(void) {
for (int i = 0; i < 128; ++i)
key_translated[i] = KEY_CODE_UNKNOWN;
key_translated[0] = KEY_CODE_A;
key_translated[1] = KEY_CODE_S;
key_translated[2] = KEY_CODE_D;
key_translated[3] = KEY_CODE_F;
key_translated[4] = KEY_CODE_H;
key_translated[5] = KEY_CODE_G;
key_translated[6] = KEY_CODE_Z;
key_translated[7] = KEY_CODE_X;
key_translated[8] = KEY_CODE_C;
key_translated[9] = KEY_CODE_V;
key_translated[11] = KEY_CODE_B;
key_translated[12] = KEY_CODE_Q;
key_translated[13] = KEY_CODE_W;
key_translated[14] = KEY_CODE_E;
key_translated[15] = KEY_CODE_R;
key_translated[16] = KEY_CODE_Y;
key_translated[17] = KEY_CODE_T;
key_translated[18] = KEY_CODE_1;
key_translated[19] = KEY_CODE_2;
key_translated[20] = KEY_CODE_3;
key_translated[21] = KEY_CODE_4;
key_translated[22] = KEY_CODE_6;
key_translated[23] = KEY_CODE_5;
key_translated[24] = KEY_CODE_PLUS;
key_translated[25] = KEY_CODE_9;
key_translated[26] = KEY_CODE_7;
key_translated[27] = KEY_CODE_HYPHEN_MINUS;
key_translated[28] = KEY_CODE_8;
key_translated[29] = KEY_CODE_0;
key_translated[30] = KEY_CODE_CLOSE_BRACKET;
key_translated[31] = KEY_CODE_O;
key_translated[32] = KEY_CODE_U;
key_translated[33] = KEY_CODE_OPEN_BRACKET;
key_translated[34] = KEY_CODE_I;
key_translated[35] = KEY_CODE_P;
key_translated[36] = KEY_CODE_RETURN;
key_translated[37] = KEY_CODE_L;
key_translated[38] = KEY_CODE_J;
key_translated[39] = KEY_CODE_QUOTE;
key_translated[40] = KEY_CODE_K;
key_translated[41] = KEY_CODE_SEMICOLON;
key_translated[42] = KEY_CODE_BACK_SLASH;
key_translated[43] = KEY_CODE_COMMA;
key_translated[44] = KEY_CODE_SLASH;
key_translated[45] = KEY_CODE_N;
key_translated[46] = KEY_CODE_M;
key_translated[47] = KEY_CODE_PERIOD;
key_translated[48] = KEY_CODE_TAB;
key_translated[49] = KEY_CODE_SPACE;
key_translated[50] = KEY_CODE_BACK_QUOTE;
key_translated[51] = KEY_CODE_BACKSPACE;
key_translated[53] = KEY_CODE_ESCAPE;
key_translated[64] = KEY_CODE_F17;
key_translated[65] = KEY_CODE_DECIMAL;
key_translated[67] = KEY_CODE_MULTIPLY;
key_translated[69] = KEY_CODE_ADD;
key_translated[71] = KEY_CODE_NUM_LOCK;
key_translated[75] = KEY_CODE_DIVIDE;
key_translated[76] = KEY_CODE_RETURN;
key_translated[78] = KEY_CODE_SUBTRACT;
key_translated[79] = KEY_CODE_F18;
key_translated[80] = KEY_CODE_F19;
key_translated[82] = KEY_CODE_NUMPAD_0;
key_translated[83] = KEY_CODE_NUMPAD_1;
key_translated[84] = KEY_CODE_NUMPAD_2;
key_translated[85] = KEY_CODE_NUMPAD_3;
key_translated[86] = KEY_CODE_NUMPAD_4;
key_translated[87] = KEY_CODE_NUMPAD_5;
key_translated[88] = KEY_CODE_NUMPAD_6;
key_translated[89] = KEY_CODE_NUMPAD_7;
key_translated[90] = KEY_CODE_F20;
key_translated[91] = KEY_CODE_NUMPAD_8;
key_translated[92] = KEY_CODE_NUMPAD_9;
key_translated[96] = KEY_CODE_F5;
key_translated[97] = KEY_CODE_F6;
key_translated[98] = KEY_CODE_F7;
key_translated[99] = KEY_CODE_F3;
key_translated[100] = KEY_CODE_F8;
key_translated[101] = KEY_CODE_F9;
key_translated[103] = KEY_CODE_F11;
key_translated[105] = KEY_CODE_F13;
key_translated[106] = KEY_CODE_F16;
key_translated[107] = KEY_CODE_F14;
key_translated[109] = KEY_CODE_F10;
key_translated[111] = KEY_CODE_F12;
key_translated[113] = KEY_CODE_F15;
key_translated[114] = KEY_CODE_INSERT;
key_translated[115] = KEY_CODE_HOME;
key_translated[116] = KEY_CODE_PAGE_UP;
key_translated[117] = KEY_CODE_DELETE;
key_translated[118] = KEY_CODE_F4;
key_translated[119] = KEY_CODE_END;
key_translated[120] = KEY_CODE_F2;
key_translated[121] = KEY_CODE_PAGE_DOWN;
key_translated[122] = KEY_CODE_F1;
key_translated[123] = KEY_CODE_LEFT;
key_translated[124] = KEY_CODE_RIGHT;
key_translated[125] = KEY_CODE_DOWN;
key_translated[126] = KEY_CODE_UP;
}
@implementation BasicMTKView
static bool shift = false;
static bool ctrl = false;
static bool alt = false;
static bool cmd = false;
static bool shift = false;
static bool ctrl = false;
static bool alt = false;
static bool cmd = false;
static bool capslock = false;
- (void)flagsChanged:(NSEvent *)theEvent {
if (shift) {
@@ -53,6 +158,10 @@ static bool cmd = false;
iron_internal_keyboard_trigger_key_up(KEY_CODE_META);
cmd = false;
}
if (capslock) {
iron_internal_keyboard_trigger_key_up(KEY_CODE_CAPS_LOCK);
capslock = false;
}
if ([theEvent modifierFlags] & NSShiftKeyMask) {
iron_internal_keyboard_trigger_key_down(KEY_CODE_SHIFT);
@@ -70,247 +179,87 @@ static bool cmd = false;
iron_internal_keyboard_trigger_key_down(KEY_CODE_META);
cmd = true;
}
if ([theEvent modifierFlags] & NSAlphaShiftKeyMask) {
iron_internal_keyboard_trigger_key_down(KEY_CODE_CAPS_LOCK);
capslock = true;
}
}
- (void)keyDown:(NSEvent *)theEvent {
if ([theEvent isARepeat])
return;
NSString *characters = [theEvent charactersIgnoringModifiers];
if ([characters length]) {
unichar ch = [characters characterAtIndex:0];
switch (ch) { // keys that exist in keydown and keypress events
case 59:
iron_internal_keyboard_trigger_key_down(KEY_CODE_SEMICOLON);
break;
case 91:
iron_internal_keyboard_trigger_key_down(KEY_CODE_OPEN_BRACKET);
break;
case 93:
iron_internal_keyboard_trigger_key_down(KEY_CODE_CLOSE_BRACKET);
break;
case 39:
iron_internal_keyboard_trigger_key_down(KEY_CODE_QUOTE);
break;
case 92:
iron_internal_keyboard_trigger_key_down(KEY_CODE_BACK_SLASH);
break;
case 44:
iron_internal_keyboard_trigger_key_down(KEY_CODE_COMMA);
break;
case 46:
iron_internal_keyboard_trigger_key_down(KEY_CODE_PERIOD);
break;
case 47:
iron_internal_keyboard_trigger_key_down(KEY_CODE_SLASH);
break;
case 96:
iron_internal_keyboard_trigger_key_down(KEY_CODE_BACK_QUOTE);
break;
case 32:
iron_internal_keyboard_trigger_key_down(KEY_CODE_SPACE);
break;
case 34:
iron_internal_keyboard_trigger_key_down(KEY_CODE_DOUBLE_QUOTE);
break;
case 40:
iron_internal_keyboard_trigger_key_down(KEY_CODE_OPEN_PAREN);
break;
case 41:
iron_internal_keyboard_trigger_key_down(KEY_CODE_CLOSE_PAREN);
break;
case 42:
iron_internal_keyboard_trigger_key_down(KEY_CODE_ASTERISK);
break;
case 43:
iron_internal_keyboard_trigger_key_down(KEY_CODE_PLUS);
break;
case 45:
iron_internal_keyboard_trigger_key_down(KEY_CODE_HYPHEN_MINUS);
break;
case 61:
iron_internal_keyboard_trigger_key_down(KEY_CODE_EQUALS);
break;
case 95:
iron_internal_keyboard_trigger_key_down(KEY_CODE_UNDERSCORE);
break;
}
switch (ch) {
case NSRightArrowFunctionKey:
iron_internal_keyboard_trigger_key_down(KEY_CODE_RIGHT);
break;
case NSLeftArrowFunctionKey:
iron_internal_keyboard_trigger_key_down(KEY_CODE_LEFT);
break;
case NSUpArrowFunctionKey:
iron_internal_keyboard_trigger_key_down(KEY_CODE_UP);
break;
case NSDownArrowFunctionKey:
iron_internal_keyboard_trigger_key_down(KEY_CODE_DOWN);
break;
case 27:
iron_internal_keyboard_trigger_key_down(KEY_CODE_ESCAPE);
break;
case NSEnterCharacter:
case NSNewlineCharacter:
case NSCarriageReturnCharacter:
iron_internal_keyboard_trigger_key_down(KEY_CODE_RETURN);
iron_internal_keyboard_trigger_key_press('\n');
break;
case 0x7f:
iron_internal_keyboard_trigger_key_down(KEY_CODE_BACKSPACE);
iron_internal_keyboard_trigger_key_press('\x08');
break;
case 9:
iron_internal_keyboard_trigger_key_down(KEY_CODE_TAB);
iron_internal_keyboard_trigger_key_press('\t');
break;
default:
if (ch == 'x' && [theEvent modifierFlags] & NSCommandKeyMask) {
char *text = iron_internal_cut_callback();
if (text != NULL) {
NSPasteboard *board = [NSPasteboard generalPasteboard];
[board clearContents];
[board setString:[NSString stringWithUTF8String:text] forType:NSStringPboardType];
}
}
if (ch == 'c' && [theEvent modifierFlags] & NSCommandKeyMask) {
char *text = iron_internal_copy_callback();
if (text != NULL) {
iron_copy_to_clipboard(text);
}
}
if (ch == 'v' && [theEvent modifierFlags] & NSCommandKeyMask) {
unsigned short kc = [theEvent keyCode];
int code = (kc < 128) ? key_translated[kc] : KEY_CODE_UNKNOWN;
if (code != KEY_CODE_UNKNOWN) {
iron_internal_keyboard_trigger_key_down(code);
}
NSString *chars = [theEvent characters];
if (![chars length])
return;
unichar ch = [chars characterAtIndex:0];
if (ch >= 0xF700)
return;
if (ch == 27)
return;
if ([theEvent modifierFlags] & NSCommandKeyMask) {
NSString *base = [theEvent charactersIgnoringModifiers];
unichar bc = [base length] ? [base characterAtIndex:0] : ch;
if (bc == 'x') {
char *text = iron_internal_cut_callback();
if (text != NULL) {
NSPasteboard *board = [NSPasteboard generalPasteboard];
NSString *data = [board stringForType:NSStringPboardType];
if (data != nil) {
char charData[4096];
strcpy(charData, [data UTF8String]);
iron_internal_paste_callback(charData);
}
[board clearContents];
[board setString:[NSString stringWithUTF8String:text] forType:NSStringPboardType];
}
if (ch >= L'a' && ch <= L'z') {
iron_internal_keyboard_trigger_key_down(ch - L'a' + KEY_CODE_A);
}
if (bc == 'c') {
char *text = iron_internal_copy_callback();
if (text != NULL) {
iron_copy_to_clipboard(text);
}
else if (ch >= L'A' && ch <= L'Z') {
iron_internal_keyboard_trigger_key_down(ch - L'A' + KEY_CODE_A);
}
if (bc == 'v') {
NSPasteboard *board = [NSPasteboard generalPasteboard];
NSString *data = [board stringForType:NSStringPboardType];
if (data != nil) {
char charData[4096];
strcpy(charData, [data UTF8String]);
iron_internal_paste_callback(charData);
}
else if (ch >= L'0' && ch <= L'9') {
iron_internal_keyboard_trigger_key_down(ch - L'0' + KEY_CODE_0);
}
iron_internal_keyboard_trigger_key_press(ch);
break;
}
}
if (ch == NSCarriageReturnCharacter || ch == NSNewlineCharacter || ch == NSEnterCharacter) {
iron_internal_keyboard_trigger_key_press('\n');
return;
}
if (ch == 0x7f) {
iron_internal_keyboard_trigger_key_press('\x08');
return;
}
iron_internal_keyboard_trigger_key_press(ch);
}
- (void)keyUp:(NSEvent *)theEvent {
NSString *characters = [theEvent charactersIgnoringModifiers];
if ([characters length]) {
unichar ch = [characters characterAtIndex:0];
switch (ch) {
case 59:
iron_internal_keyboard_trigger_key_up(KEY_CODE_SEMICOLON);
break;
case 91:
iron_internal_keyboard_trigger_key_up(KEY_CODE_OPEN_BRACKET);
break;
case 93:
iron_internal_keyboard_trigger_key_up(KEY_CODE_CLOSE_BRACKET);
break;
case 39:
iron_internal_keyboard_trigger_key_up(KEY_CODE_QUOTE);
break;
case 92:
iron_internal_keyboard_trigger_key_up(KEY_CODE_BACK_SLASH);
break;
case 44:
iron_internal_keyboard_trigger_key_up(KEY_CODE_COMMA);
break;
case 46:
iron_internal_keyboard_trigger_key_up(KEY_CODE_PERIOD);
break;
case 47:
iron_internal_keyboard_trigger_key_up(KEY_CODE_SLASH);
break;
case 96:
iron_internal_keyboard_trigger_key_up(KEY_CODE_BACK_QUOTE);
break;
case 45:
iron_internal_keyboard_trigger_key_up(KEY_CODE_HYPHEN_MINUS);
break;
case 61:
iron_internal_keyboard_trigger_key_up(KEY_CODE_EQUALS);
break;
case NSRightArrowFunctionKey:
iron_internal_keyboard_trigger_key_up(KEY_CODE_RIGHT);
break;
case NSLeftArrowFunctionKey:
iron_internal_keyboard_trigger_key_up(KEY_CODE_LEFT);
break;
case NSUpArrowFunctionKey:
iron_internal_keyboard_trigger_key_up(KEY_CODE_UP);
break;
case NSDownArrowFunctionKey:
iron_internal_keyboard_trigger_key_up(KEY_CODE_DOWN);
break;
case 27:
iron_internal_keyboard_trigger_key_up(KEY_CODE_ESCAPE);
break;
case NSEnterCharacter:
case NSNewlineCharacter:
case NSCarriageReturnCharacter:
iron_internal_keyboard_trigger_key_up(KEY_CODE_RETURN);
break;
case 0x7f:
iron_internal_keyboard_trigger_key_up(KEY_CODE_BACKSPACE);
break;
case 9:
iron_internal_keyboard_trigger_key_up(KEY_CODE_TAB);
break;
case 32:
iron_internal_keyboard_trigger_key_up(KEY_CODE_SPACE);
break;
case 34:
iron_internal_keyboard_trigger_key_up(KEY_CODE_DOUBLE_QUOTE);
break;
case 40:
iron_internal_keyboard_trigger_key_up(KEY_CODE_OPEN_PAREN);
break;
case 41:
iron_internal_keyboard_trigger_key_up(KEY_CODE_CLOSE_PAREN);
break;
case 42:
iron_internal_keyboard_trigger_key_up(KEY_CODE_ASTERISK);
break;
case 43:
iron_internal_keyboard_trigger_key_up(KEY_CODE_PLUS);
break;
case 95:
iron_internal_keyboard_trigger_key_up(KEY_CODE_UNDERSCORE);
break;
default:
if (ch >= L'a' && ch <= L'z') {
iron_internal_keyboard_trigger_key_up(ch - L'a' + KEY_CODE_A);
}
else if (ch >= L'A' && ch <= L'Z') {
iron_internal_keyboard_trigger_key_up(ch - L'A' + KEY_CODE_A);
}
else if (ch >= L'0' && ch <= L'9') {
iron_internal_keyboard_trigger_key_up(ch - L'0' + KEY_CODE_0);
}
break;
}
unsigned short kc = [theEvent keyCode];
int code = (kc < 128) ? key_translated[kc] : KEY_CODE_UNKNOWN;
if (code != KEY_CODE_UNKNOWN) {
iron_internal_keyboard_trigger_key_up(code);
}
}
static int getMouseX(NSEvent *event) {
static int get_mouse_x(NSEvent *event) {
NSWindow *window = [[NSApplication sharedApplication] mainWindow];
float scale = [window backingScaleFactor];
return (int)([event locationInWindow].x * scale);
}
static int getMouseY(NSEvent *event) {
static int get_mouse_y(NSEvent *event) {
NSWindow *window = [[NSApplication sharedApplication] mainWindow];
float scale = [window backingScaleFactor];
return (int)(iron_window_height() - [event locationInWindow].y * scale);
@@ -318,67 +267,67 @@ static int getMouseY(NSEvent *event) {
- (void)mouseDown:(NSEvent *)theEvent {
if ([theEvent modifierFlags] & NSControlKeyMask) {
controlKeyMouseButton = true;
iron_internal_mouse_trigger_press(1, getMouseX(theEvent), getMouseY(theEvent));
controlkey_mouse_button = true;
iron_internal_mouse_trigger_press(1, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
else {
controlKeyMouseButton = false;
iron_internal_mouse_trigger_press(0, getMouseX(theEvent), getMouseY(theEvent));
controlkey_mouse_button = false;
iron_internal_mouse_trigger_press(0, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
if ([theEvent subtype] == NSTabletPointEventSubtype) {
iron_internal_pen_trigger_press(getMouseX(theEvent), getMouseY(theEvent), theEvent.pressure);
iron_internal_pen_trigger_press(get_mouse_x(theEvent), get_mouse_y(theEvent), theEvent.pressure);
}
}
- (void)mouseUp:(NSEvent *)theEvent {
if (controlKeyMouseButton) {
iron_internal_mouse_trigger_release(1, getMouseX(theEvent), getMouseY(theEvent));
if (controlkey_mouse_button) {
iron_internal_mouse_trigger_release(1, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
else {
iron_internal_mouse_trigger_release(0, getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_release(0, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
controlKeyMouseButton = false;
controlkey_mouse_button = false;
if ([theEvent subtype] == NSTabletPointEventSubtype) {
iron_internal_pen_trigger_release(getMouseX(theEvent), getMouseY(theEvent), theEvent.pressure);
iron_internal_pen_trigger_release(get_mouse_x(theEvent), get_mouse_y(theEvent), theEvent.pressure);
}
}
- (void)mouseMoved:(NSEvent *)theEvent {
iron_internal_mouse_trigger_move(getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_move(get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)mouseDragged:(NSEvent *)theEvent {
iron_internal_mouse_trigger_move(getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_move(get_mouse_x(theEvent), get_mouse_y(theEvent));
if ([theEvent subtype] == NSTabletPointEventSubtype) {
iron_internal_pen_trigger_move(getMouseX(theEvent), getMouseY(theEvent), theEvent.pressure);
iron_internal_pen_trigger_move(get_mouse_x(theEvent), get_mouse_y(theEvent), theEvent.pressure);
}
}
- (void)rightMouseDown:(NSEvent *)theEvent {
iron_internal_mouse_trigger_press(1, getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_press(1, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)rightMouseUp:(NSEvent *)theEvent {
iron_internal_mouse_trigger_release(1, getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_release(1, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)rightMouseDragged:(NSEvent *)theEvent {
iron_internal_mouse_trigger_move(getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_move(get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)otherMouseDown:(NSEvent *)theEvent {
iron_internal_mouse_trigger_press(2, getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_press(2, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)otherMouseUp:(NSEvent *)theEvent {
iron_internal_mouse_trigger_release(2, getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_release(2, get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)otherMouseDragged:(NSEvent *)theEvent {
iron_internal_mouse_trigger_move(getMouseX(theEvent), getMouseY(theEvent));
iron_internal_mouse_trigger_move(get_mouse_x(theEvent), get_mouse_y(theEvent));
}
- (void)scrollWheel:(NSEvent *)theEvent {
@@ -555,15 +504,15 @@ void iron_mouse_set_cursor(iron_cursor_t cursor_index) {
}
void iron_keyboard_show(void) {
keyboardShown = true;
keyboard_shown = true;
}
void iron_keyboard_hide(void) {
keyboardShown = false;
keyboard_shown = false;
}
bool iron_keyboard_active(void) {
return keyboardShown;
return keyboard_shown;
}
const char *iron_system_id(void) {
@@ -571,7 +520,7 @@ const char *iron_system_id(void) {
}
const char **iron_video_formats(void) {
return videoFormats;
return video_formats;
}
void iron_set_keep_screen_on(bool on) {}
@@ -642,7 +591,7 @@ bool iron_internal_handle_messages(void) {
return true;
}
static void createWindow(iron_window_options_t *options) {
static void create_window(iron_window_options_t *options) {
int width = options->width / [[NSScreen mainScreen] backingScaleFactor];
int height = options->height / [[NSScreen mainScreen] backingScaleFactor];
int styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable;
@@ -692,8 +641,8 @@ void iron_window_change_window_mode(iron_window_mode_t mode) {
}
void iron_window_set_close_callback(bool (*callback)(void *), void *data) {
windows[0].closeCallback = callback;
windows[0].closeCallbackData = data;
windows[0].close_callback = callback;
windows[0].close_callback_data = data;
}
static void add_menubar(void) {
@@ -713,6 +662,7 @@ static void add_menubar(void) {
}
void iron_init(iron_window_options_t *win) {
init_key_translation();
@autoreleasepool {
myapp = [IronApplication sharedApplication];
[myapp finishLaunching];
@@ -726,7 +676,7 @@ void iron_init(iron_window_options_t *win) {
#endif
}
createWindow(win);
create_window(win);
gpu_init(win->depth_bits, true);
}
@@ -788,8 +738,8 @@ int main(int argc, char **argv) {
@implementation IronAppDelegate
- (BOOL)windowShouldClose:(NSWindow *)sender {
if (windows[0].closeCallback != NULL) {
if (windows[0].closeCallback(windows[0].closeCallbackData)) {
if (windows[0].close_callback != NULL) {
if (windows[0].close_callback(windows[0].close_callback_data)) {
return YES;
}
else {
@@ -804,8 +754,8 @@ int main(int argc, char **argv) {
}
void iron_internal_call_resize_callback(int width, int height) {
if (windows[0].resizeCallback != NULL) {
windows[0].resizeCallback(width, height, windows[0].resizeCallbackData);
if (windows[0].resize_callback != NULL) {
windows[0].resize_callback(width, height, windows[0].resize_callback_data);
}
}
@@ -862,8 +812,8 @@ void iron_window_set_title(const char *title) {
}
void iron_window_set_resize_callback(void (*callback)(int x, int y, void *data), void *data) {
windows[0].resizeCallback = callback;
windows[0].resizeCallbackData = data;
windows[0].resize_callback = callback;
windows[0].resize_callback_data = data;
}
iron_window_mode_t iron_window_get_mode() {