apprt: couple more easy callbacks

This commit is contained in:
Mitchell Hashimoto
2022-12-30 14:47:31 -08:00
parent 946383eb77
commit 8196481dda
2 changed files with 29 additions and 17 deletions

View File

@ -394,8 +394,6 @@ pub fn create(alloc: Allocator, app: *App, config: *const Config) !*Window {
// }, .{ .width = null, .height = null }); // }, .{ .width = null, .height = null });
// Setup our callbacks and user data // Setup our callbacks and user data
winsys.window.setFocusCallback(focusCallback);
winsys.window.setRefreshCallback(refreshCallback);
winsys.window.setScrollCallback(scrollCallback); winsys.window.setScrollCallback(scrollCallback);
winsys.window.setCursorPosCallback(cursorPosCallback); winsys.window.setCursorPosCallback(cursorPosCallback);
winsys.window.setMouseButtonCallback(mouseButtonCallback); winsys.window.setMouseButtonCallback(mouseButtonCallback);
@ -1036,29 +1034,19 @@ pub fn keyCallback(
} }
} }
fn focusCallback(window: glfw.Window, focused: bool) void { pub fn focusCallback(self: *Window, focused: bool) !void {
const tracy = trace(@src());
defer tracy.end();
const win = window.getUserPointer(Window) orelse return;
// Notify our render thread of the new state // Notify our render thread of the new state
_ = win.renderer_thread.mailbox.push(.{ _ = self.renderer_thread.mailbox.push(.{
.focus = focused, .focus = focused,
}, .{ .forever = {} }); }, .{ .forever = {} });
// Schedule render which also drains our mailbox // Schedule render which also drains our mailbox
win.queueRender() catch unreachable; try self.queueRender();
} }
fn refreshCallback(window: glfw.Window) void { pub fn refreshCallback(self: *Window) !void {
const tracy = trace(@src());
defer tracy.end();
const win = window.getUserPointer(Window) orelse return;
// The point of this callback is to schedule a render, so do that. // The point of this callback is to schedule a render, so do that.
win.queueRender() catch unreachable; try self.queueRender();
} }
fn scrollCallback(window: glfw.Window, xoff: f64, yoff: f64) void { fn scrollCallback(window: glfw.Window, xoff: f64, yoff: f64) void {

View File

@ -89,6 +89,8 @@ pub const Window = struct {
win.setSizeCallback(sizeCallback); win.setSizeCallback(sizeCallback);
win.setCharCallback(charCallback); win.setCharCallback(charCallback);
win.setKeyCallback(keyCallback); win.setKeyCallback(keyCallback);
win.setFocusCallback(focusCallback);
win.setRefreshCallback(refreshCallback);
// Build our result // Build our result
return Window{ return Window{
@ -350,4 +352,26 @@ pub const Window = struct {
return; return;
}; };
} }
fn focusCallback(window: glfw.Window, focused: bool) void {
const tracy = trace(@src());
defer tracy.end();
const core_win = window.getUserPointer(CoreWindow) orelse return;
core_win.focusCallback(focused) catch |err| {
log.err("error in focus callback err={}", .{err});
return;
};
}
fn refreshCallback(window: glfw.Window) void {
const tracy = trace(@src());
defer tracy.end();
const core_win = window.getUserPointer(CoreWindow) orelse return;
core_win.refreshCallback() catch |err| {
log.err("error in refresh callback err={}", .{err});
return;
};
}
}; };