mach: add setCursorMode (desktop only for now)

This commit is contained in:
Martin Wickham 2022-10-13 09:28:26 -05:00 committed by Stephen Gutekanst
parent 2c65845aed
commit 78dfa2df6b
5 changed files with 31 additions and 0 deletions

View file

@ -87,6 +87,10 @@ pub fn setMouseCursor(core: *Core, cursor: enums.MouseCursor) !void {
try core.internal.setMouseCursor(cursor);
}
pub fn setCursorMode(core: *Core, mode: enums.CursorMode) !void {
try core.internal.setCursorMode(mode);
}
pub fn hasEvent(core: *Core) bool {
return core.internal.hasEvent();
}

View file

@ -33,6 +33,19 @@ pub const MouseCursor = enum {
not_allowed,
};
pub const CursorMode = enum {
/// Makes the cursor visible and behaving normally.
normal,
/// Makes the cursor invisible when it is over the content area of the window but does not
/// restrict it from leaving.
hidden,
/// Hides and grabs the cursor, providing virtual and unlimited cursor movement. This is useful
/// for implementing for example 3D camera controls.
disabled,
};
pub const MouseButton = enum {
left,
right,

View file

@ -20,6 +20,7 @@ fn Interface(comptime T: type) type {
assertHasDecl(T.Platform, "getFramebufferSize");
assertHasDecl(T.Platform, "getWindowSize");
assertHasDecl(T.Platform, "setMouseCursor");
assertHasDecl(T.Platform, "setCursorMode");
assertHasDecl(T.Platform, "hasEvent");
assertHasDecl(T.Platform, "pollEvent");
assertHasDecl(T.BackingTimer, "start");

View file

@ -374,6 +374,15 @@ pub const Platform = struct {
}
}
pub fn setCursorMode(platform: *Platform, mode: enums.CursorMode) !void {
const glfw_mode: glfw.Window.InputModeCursor = switch (mode) {
.normal => .normal,
.hidden => .hidden,
.disabled => .disabled,
};
try platform.window.setInputModeCursor(glfw_mode);
}
pub fn hasEvent(platform: *Platform) bool {
return platform.events.first != null;
}

View file

@ -123,6 +123,10 @@ pub const Platform = struct {
js.machSetMouseCursor(cursor_name.ptr, cursor_name.len);
}
pub fn setCursorMode(_: *Platform, _: enums.CursorMode) !void {
@panic("TODO: Implement setCursorMode for wasm");
}
fn pollChanges(platform: *Platform) void {
const change_type = js.machChangeShift();