glfw: make init hints a proper enum

Helps hexops/mach#37

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2021-10-30 19:59:04 -07:00 committed by Stephen Gutekanst
parent f1644d2e59
commit 7264741ede
2 changed files with 37 additions and 14 deletions

View file

@ -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;

View file

@ -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();