diff --git a/glfw/src/consts.zig b/glfw/src/consts.zig index a3d8204d..3152ab84 100644 --- a/glfw/src/consts.zig +++ b/glfw/src/consts.zig @@ -29,15 +29,3 @@ pub const osmesa_context_api = c.GLFW_OSMESA_CONTEXT_API; /// Possible value for various window hints, etc. pub const dont_care = c.GLFW_DONT_CARE; - -// TODO(enumify) -/// Joystick hat buttons init hint. -pub const joystick_hat_buttons = c.GLFW_JOYSTICK_HAT_BUTTONS; - -// TODO(enumify) -/// macOS specific init hint. -pub const cocoa_chdir_resources = c.GLFW_COCOA_CHDIR_RESOURCES; - -// TODO(enumify) -/// macOS specific init hint. -pub const cocoa_menubar = c.GLFW_COCOA_MENUBAR; diff --git a/glfw/src/main.zig b/glfw/src/main.zig index 406d4e5c..af0e47a9 100644 --- a/glfw/src/main.zig +++ b/glfw/src/main.zig @@ -84,6 +84,31 @@ pub inline fn terminate() void { c.glfwTerminate(); } +/// Initialization hints for passing into glfw.initHint +pub const InitHint = enum(c_int) { + /// Specifies whether to also expose joystick hats as buttons, for compatibility with earlier + /// versions of GLFW that did not have glfwGetJoystickHats. + /// + /// Possible values are `true` and `false`. + joystick_hat_buttons = c.GLFW_JOYSTICK_HAT_BUTTONS, + + /// macOS specific init hint. Ignored on other platforms. + /// + /// Specifies whether to set the current directory to the application to the Contents/Resources + /// subdirectory of the application's bundle, if present. + /// + /// Possible values are `true` and `false`. + cocoa_chdir_resources = c.GLFW_COCOA_CHDIR_RESOURCES, + + /// macOS specific init hint. Ignored on other platforms. + /// + /// specifies whether to create a basic menu bar, either from a nib or manually, when the first + /// window is created, which is when AppKit is initialized. + /// + /// Possible values are `true` and `false`. + cocoa_menubar = c.GLFW_COCOA_MENUBAR, +}; + /// Sets the specified init hint to the desired value. /// /// This function sets hints for the next initialization of GLFW. @@ -104,8 +129,12 @@ pub inline fn terminate() void { /// @remarks This function may be called before glfw.init. /// /// @thread_safety This function must only be called from the main thread. -pub inline fn initHint(hint: c_int, value: c_int) Error!void { - c.glfwInitHint(hint, value); +pub inline fn initHint(hint: InitHint, value: anytype) Error!void { + switch (@typeInfo(@TypeOf(value))) { + .Int, .ComptimeInt => c.glfwInitHint(@enumToInt(hint), @intCast(c_int, value)), + .Bool => c.glfwInitHint(@enumToInt(hint), @intCast(c_int, @boolToInt(value))), + else => @compileError("expected a int or bool, got " ++ @typeName(@TypeOf(value))), + } try getError(); } @@ -311,6 +340,12 @@ test "getVersionString" { std.debug.print("\nstring: {s}\n", .{getVersionString()}); } +test "pollEvents" { + try initHint(.cocoa_chdir_resources, true); + try init(); + defer terminate(); +} + test "pollEvents" { try init(); defer terminate();