aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2021-09-14 22:10:09 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2021-09-14 22:10:09 +0700
commit020d123696219a1e258c06f2c4fdd0b725335cce (patch)
tree394b1038e4429b533abb332515b946d138fe4ce8 /src
parent63f402e1bc8b9bf790a890d6b3ab86c7a9e61a44 (diff)
downloadgfz-020d123696219a1e258c06f2c4fdd0b725335cce.tar.gz
Wrap some more input functions
Diffstat (limited to 'src')
-rw-r--r--src/Window.zig64
-rw-r--r--src/gfz.zig12
2 files changed, 71 insertions, 5 deletions
diff --git a/src/Window.zig b/src/Window.zig
index 4f22fa9..506225a 100644
--- a/src/Window.zig
+++ b/src/Window.zig
@@ -166,9 +166,19 @@ pub fn create(width: c_int, height: c_int, title: [:0]const u8,
getError();
}
+/// Return the window whose context is current on the calling thread.
+pub fn getCurrent() Error!?Window {
+ const result = if (glfwGetCurrentContext()) |pimpl|
+ Window{ .pimpl = pimpl }
+ else
+ null;
+ try checkError();
+ return result;
+}
+
/// Make the context current for the calling thread.
-pub fn makeCurrent(self: Window) Error!void {
- glfwMakeContextCurrent(self.pimpl);
+pub fn makeCurrent(self: ?Window) Error!void {
+ glfwMakeContextCurrent(if (self) |window| window.pimpl else null);
try checkError();
}
@@ -231,10 +241,42 @@ pub fn setCursorMode(self: Window, value: CursorMode) Error!void {
try checkError();
}
-/// Set the size callback.
-pub fn setSizeCallback(self: Window, callback: GLFWwindowsizefun) Error!void {
- _ = glfwSetWindowSizeCallback(self.pimpl, callback);
+const Pos = struct {
+ x: f64,
+ y: f64,
+};
+
+/// Retrieve the position of the cursor relative to the window's content area.
+pub fn getCursorPos(self: Window) Error!Pos {
+ var pos: Pos = undefined;
+ glfwGetCursorPos(self.pimpl, &pos.x, &pos.y);
+ try checkError();
+ return pos;
+}
+
+/// Set the position of the cursor, relative to the window's content area.
+pub fn setCursorPos(self: Window, xpos: f64, ypos: f64) Error!void {
+ glfwSetCursorPos(self.pimpl, xpos, ypos);
+ try checkError();
+}
+
+const State = enum(c_int) {
+ press = GLFW_PRESS,
+ release = GLFW_RELEASE,
+};
+
+/// Return the last reported state of a mouse button.
+pub fn getMouseButton(self: Window, button: c_int) Error!State {
+ const state = glfwGetMouseButton(self.pimpl, button);
+ try checkError();
+ return @intToEnum(State, state);
+}
+
+/// Return the last reported state of a keyboard key.
+pub fn getKey(self: Window, key: c_int) Error!State {
+ const state = glfwGetKey(self.pimpl, key);
try checkError();
+ return @intToEnum(State, state);
}
/// Set the key callback.
@@ -242,3 +284,15 @@ pub fn setKeyCallback(self: Window, callback: GLFWkeyfun) Error!void {
_ = glfwSetKeyCallback(self.pimpl, callback);
try checkError();
}
+
+/// Set the size of the content area.
+pub fn setSize(self: Window, width: c_int, height: c_int) Error!void {
+ glfwSetWindowSize(self.pimpl, width, height);
+ try checkError();
+}
+
+/// Set the size callback.
+pub fn setSizeCallback(self: Window, callback: GLFWwindowsizefun) Error!void {
+ _ = glfwSetWindowSizeCallback(self.pimpl, callback);
+ try checkError();
+}
diff --git a/src/gfz.zig b/src/gfz.zig
index d96f197..2374ae6 100644
--- a/src/gfz.zig
+++ b/src/gfz.zig
@@ -110,6 +110,18 @@ pub fn pollEvents() Error!void {
try checkError();
}
+/// Return the GLFW time, in seconds.
+pub fn getTime() Error!f64 {
+ const time = glfwGetTime();
+ return if (time == 0) getError() else time;
+}
+
+/// Set the GLFW time, in seconds.
+pub fn setTime(time: f64) Error!void {
+ glfwSetTime(time);
+ try checkError();
+}
+
/// Return whether raw mouse motion is supported.
pub fn rawMouseMotionSupported() Error!bool {
const result = glfwRawMouseMotionSupported();