The root dir of our repository has grown quite a lot the past few months.
I'd like to make it more clear where the bulk of the engine lives (`src/`) and
also make it more clear which Mach libraries are consumable as standalone projects.
As for the name of this directory, `libs` was my first choice but there's a bit of
a convention of that being external libraries in Zig projects _today_, while these
are libraries maintained as part of Mach in this repository - not external ones.
We will name this directory `libs`, and if we have a need for external libraries
we will use `external` or `deps` for that directory name. I considered other names
such as `components`, `systems`, `modules` (which are bad as they overlap with
major ECS / engine concepts), and it seems likely the official Zig package manager
will break the convention of using a `libs` dir anyway.
Performed via:
```sh
mkdir libs/
git mv freetype libs/
git mv basisu libs/
git mv gamemode libs/
git mv glfw libs/
git mv gpu libs/
git mv gpu-dawn libs/
git mv sysaudio libs/
git mv sysjs libs/
git mv ecs libs/
```
git-subtree-dir: glfw
git-subtree-mainline: 0d5b853443
git-subtree-split: 572d1144f11b353abdb64fff828b25a4f0fbb7ca
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
git mv ecs libs/
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
75 lines
2.8 KiB
Zig
75 lines
2.8 KiB
Zig
const std = @import("std");
|
|
|
|
const c = @import("c.zig").c;
|
|
const Error = @import("errors.zig").Error;
|
|
const getError = @import("errors.zig").getError;
|
|
|
|
const internal_debug = @import("internal_debug.zig");
|
|
|
|
/// Sets the clipboard to the specified string.
|
|
///
|
|
/// This function sets the system clipboard to the specified, UTF-8 encoded string.
|
|
///
|
|
/// @param[in] string A UTF-8 encoded string.
|
|
///
|
|
/// Possible errors include glfw.Error.NotInitialized and glfw.Error.PlatformError.
|
|
///
|
|
/// @pointer_lifetime The specified string is copied before this function returns.
|
|
///
|
|
/// @thread_safety This function must only be called from the main thread.
|
|
///
|
|
/// see also: clipboard, glfwGetClipboardString
|
|
pub inline fn setClipboardString(value: [*:0]const u8) error{PlatformError}!void {
|
|
internal_debug.assertInitialized();
|
|
c.glfwSetClipboardString(null, value);
|
|
getError() catch |err| return switch (err) {
|
|
Error.NotInitialized => unreachable,
|
|
Error.PlatformError => |e| e,
|
|
else => unreachable,
|
|
};
|
|
}
|
|
|
|
/// Returns the contents of the clipboard as a string.
|
|
///
|
|
/// This function returns the contents of the system clipboard, if it contains or is convertible to
|
|
/// a UTF-8 encoded string. If the clipboard is empty or if its contents cannot be converted,
|
|
/// glfw.Error.FormatUnavailable is returned.
|
|
///
|
|
/// @return The contents of the clipboard as a UTF-8 encoded string.
|
|
///
|
|
/// Possible errors include glfw.Error.NotInitialized, glfw.Error.FormatUnavailable and glfw.Error.PlatformError.
|
|
///
|
|
/// @pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it
|
|
/// yourself. It is valid until the next call to glfw.getClipboardString or glfw.setClipboardString
|
|
/// or until the library is terminated.
|
|
///
|
|
/// @thread_safety This function must only be called from the main thread.
|
|
///
|
|
/// see also: clipboard, glfwSetClipboardString
|
|
pub inline fn getClipboardString() error{ FormatUnavailable, PlatformError }![:0]const u8 {
|
|
internal_debug.assertInitialized();
|
|
if (c.glfwGetClipboardString(null)) |c_str| return std.mem.span(@ptrCast([*:0]const u8, c_str));
|
|
getError() catch |err| return switch (err) {
|
|
Error.NotInitialized => unreachable,
|
|
Error.FormatUnavailable, Error.PlatformError => |e| e,
|
|
else => unreachable,
|
|
};
|
|
// `glfwGetClipboardString` returns `null` only for errors
|
|
unreachable;
|
|
}
|
|
|
|
test "setClipboardString" {
|
|
const glfw = @import("main.zig");
|
|
try glfw.init(.{});
|
|
defer glfw.terminate();
|
|
|
|
try glfw.setClipboardString("hello mach");
|
|
}
|
|
|
|
test "getClipboardString" {
|
|
const glfw = @import("main.zig");
|
|
try glfw.init(.{});
|
|
defer glfw.terminate();
|
|
|
|
_ = glfw.getClipboardString() catch |err| std.debug.print("can't get clipboard, not supported by OS? error={}\n", .{err});
|
|
}
|