Use packed struct for ConfigFlags (#93)

This commit is contained in:
Not-Nik 2024-05-31 20:22:57 +02:00
parent 98ced86523
commit 6ff9f0a45b
No known key found for this signature in database
GPG Key ID: E95F679E3CDD9784
5 changed files with 110 additions and 80 deletions

View File

@ -62,74 +62,74 @@ pub fn main() anyerror!void {
if (rl.isKeyPressed(.key_f)) rl.toggleFullscreen(); // Modifies window size when scaling!
if (rl.isKeyPressed(.key_r)) {
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_resizable))) {
rl.clearWindowState(.flag_window_resizable);
if (rl.isWindowState(rl.ConfigFlags { .window_resizable = true })) {
rl.clearWindowState(rl.ConfigFlags { .window_resizable = true });
} else {
rl.setWindowState(.flag_window_resizable);
rl.setWindowState(rl.ConfigFlags { .window_resizable = true });
}
}
if (rl.isKeyPressed(.key_d)) {
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_undecorated))) {
rl.clearWindowState(.flag_window_undecorated);
if (rl.isWindowState(rl.ConfigFlags { .window_undecorated = true })) {
rl.clearWindowState(rl.ConfigFlags { .window_undecorated = true });
} else {
rl.setWindowState(.flag_window_undecorated);
rl.setWindowState(rl.ConfigFlags { .window_undecorated = true });
}
}
if (rl.isKeyPressed(.key_h)) {
if (!rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_hidden))) {
rl.setWindowState(.flag_window_hidden);
if (!rl.isWindowState(rl.ConfigFlags { .window_hidden = true })) {
rl.setWindowState(rl.ConfigFlags { .window_hidden = true });
}
frames_counter = 0;
}
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_hidden))) {
if (rl.isWindowState(rl.ConfigFlags { .window_hidden = true })) {
frames_counter += 1;
if (frames_counter >= 240) rl.clearWindowState(.flag_window_hidden); // Show window after 3 seconds
if (frames_counter >= 240) rl.clearWindowState(rl.ConfigFlags { .window_hidden = true }); // Show window after 3 seconds
}
if (rl.isKeyPressed(.key_n)) {
if (!rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_minimized))) {
if (!rl.isWindowState(rl.ConfigFlags { .window_minimized = true })) {
rl.minimizeWindow();
}
frames_counter = 0;
}
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_minimized))) {
if (rl.isWindowState(rl.ConfigFlags { .window_minimized = true })) {
frames_counter += 1;
if (frames_counter >= 240) rl.restoreWindow(); // Restore window after 3 seconds
}
if (rl.isKeyPressed(.key_m)) {
// NOTE: Requires `flag_window_resizable` enabled!
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_maximized))) {
if (rl.isWindowState(rl.ConfigFlags { .window_maximized = true })) {
rl.restoreWindow();
} else rl.maximizeWindow();
}
if (rl.isKeyPressed(.key_u)) {
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_unfocused))) {
rl.clearWindowState(.flag_window_unfocused);
} else rl.setWindowState(.flag_window_unfocused);
if (rl.isWindowState(rl.ConfigFlags { .window_unfocused = true })) {
rl.clearWindowState(rl.ConfigFlags { .window_unfocused = true });
} else rl.setWindowState(rl.ConfigFlags { .window_unfocused = true });
}
if (rl.isKeyPressed(.key_t)) {
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_topmost))) {
rl.clearWindowState(.flag_window_topmost);
} else rl.setWindowState(.flag_window_topmost);
if (rl.isWindowState(rl.ConfigFlags { .window_topmost = true })) {
rl.clearWindowState(rl.ConfigFlags { .window_topmost = true });
} else rl.setWindowState(rl.ConfigFlags { .window_topmost = true });
}
if (rl.isKeyPressed(.key_a)) {
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_always_run))) {
rl.clearWindowState(.flag_window_always_run);
} else rl.setWindowState(.flag_window_always_run);
if (rl.isWindowState(rl.ConfigFlags { .window_always_run = true })) {
rl.clearWindowState(rl.ConfigFlags { .window_always_run = true });
} else rl.setWindowState(rl.ConfigFlags { .window_always_run = true });
}
if (rl.isKeyPressed(.key_v)) {
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_vsync_hint))) {
rl.clearWindowState(.flag_vsync_hint);
} else rl.setWindowState(.flag_vsync_hint);
if (rl.isWindowState(rl.ConfigFlags { .vsync_hint = true })) {
rl.clearWindowState(rl.ConfigFlags { .vsync_hint = true });
} else rl.setWindowState(rl.ConfigFlags { .vsync_hint = true });
}
// Bouncing ball logic
@ -149,7 +149,7 @@ pub fn main() anyerror!void {
rl.beginDrawing();
defer rl.endDrawing();
if (rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_transparent))) {
if (rl.isWindowState(rl.ConfigFlags { .window_transparent = true })) {
rl.clearBackground(rl.Color.blank);
} else rl.clearBackground(rl.Color.ray_white);
@ -182,7 +182,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[F] flag_fullscreen_mode: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_fullscreen_mode)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .fullscreen_mode = true }))),
}),
10,
80,
@ -191,7 +191,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[R] flag_window_resizable: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_resizable)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_resizable = true }))),
}),
10,
100,
@ -200,7 +200,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[D] flag_window_undecorated: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_undecorated)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_undecorated = true }))),
}),
10,
120,
@ -209,7 +209,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[H] flag_window_hidden: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_hidden)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_hidden = true }))),
}),
10,
140,
@ -218,7 +218,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[N] flag_window_minimized: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_minimized)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_minimized = true }))),
}),
10,
160,
@ -227,7 +227,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[M] flag_window_maximized: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_maximized)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_maximized = true }))),
}),
10,
180,
@ -236,7 +236,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[U] flag_window_unfocused: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_unfocused)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_unfocused = true }))),
}),
10,
200,
@ -245,7 +245,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[T] flag_window_topmost: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_topmost)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_topmost = true }))),
}),
10,
220,
@ -254,7 +254,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[A] flag_window_always_run: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_always_run)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_always_run = true }))),
}),
10,
240,
@ -263,7 +263,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("[V] flag_vsync_hint: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_vsync_hint)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .vsync_hint = true }))),
}),
10,
260,
@ -280,7 +280,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("flag_window_highdpi: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_highdpi)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_highdpi = true }))),
}),
10,
320,
@ -289,7 +289,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("flag_window_transparent: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_window_transparent)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .window_transparent = true }))),
}),
10,
340,
@ -298,7 +298,7 @@ pub fn main() anyerror!void {
);
rl.drawText(
rl.textFormat("flag_msaa_4x_hint: %d", .{
@as(i32, @intFromBool(rl.isWindowState(@intFromEnum(rl.ConfigFlags.flag_msaa_4x_hint)))),
@as(i32, @intFromBool(rl.isWindowState(rl.ConfigFlags { .msaa_4x_hint = true }))),
}),
10,
360,

View File

@ -165,9 +165,9 @@ def fix_enums(arg_name, arg_type, func_name):
arg_type = "BlendMode"
elif arg_name == "gesture":
arg_type = "Gesture"
elif arg_name == "flags":
elif arg_name == "flags" or arg_name == "flag":
if func_name in [
"SetWindowState", "ClearWindowState", "SetConfigFlags"
"SetWindowState", "ClearWindowState", "SetConfigFlags", "IsWindowState"
]:
arg_type = "ConfigFlags"
elif func_name == "SetGesturesEnabled":

View File

@ -805,24 +805,39 @@ pub const AutomationEventList = extern struct {
events: [*c]AutomationEvent
};
pub const ConfigFlags = enum(c_int) {
flag_fullscreen_mode = 2,
flag_window_resizable = 4,
flag_window_undecorated = 8,
flag_window_transparent = 16,
flag_msaa_4x_hint = 32,
flag_vsync_hint = 64,
flag_window_hidden = 128,
flag_window_always_run = 256,
flag_window_minimized = 512,
flag_window_maximized = 1024,
flag_window_unfocused = 2048,
flag_window_topmost = 4096,
flag_window_highdpi = 8192,
flag_window_mouse_passthrough = 16384,
flag_borderless_windowed_mode = 32768,
flag_interlaced_hint = 65536,
_,
pub const ConfigFlags = packed struct {
__reserved: bool = false,
fullscreen_mode: bool = false,
window_resizable: bool = false,
window_undecorated: bool = false,
window_transparent: bool = false,
msaa_4x_hint: bool = false,
vsync_hint: bool = false,
window_hidden: bool = false,
window_always_run: bool = false,
window_minimized: bool = false,
window_maximized: bool = false,
window_unfocused: bool = false,
window_topmost: bool = false,
window_highdpi: bool = false,
window_mouse_passthrough: bool = false,
borderless_windowed_mode: bool = false,
interlaced_hint: bool = false,
__reserved2: bool = false,
__reserved3: bool = false,
__reserved4: bool = false,
__reserved5: bool = false,
__reserved6: bool = false,
__reserved7: bool = false,
__reserved8: bool = false,
__reserved9: bool = false,
__reserved10: bool = false,
__reserved11: bool = false,
__reserved12: bool = false,
__reserved13: bool = false,
__reserved14: bool = false,
__reserved15: bool = false,
__reserved16: bool = false,
};
pub const TraceLogLevel = enum(c_int) {

View File

@ -12,7 +12,7 @@ pub extern "c" fn IsWindowMinimized() bool;
pub extern "c" fn IsWindowMaximized() bool;
pub extern "c" fn IsWindowFocused() bool;
pub extern "c" fn IsWindowResized() bool;
pub extern "c" fn IsWindowState(flag: c_uint) bool;
pub extern "c" fn IsWindowState(flag: rl.ConfigFlags) bool;
pub extern "c" fn SetWindowState(flags: rl.ConfigFlags) void;
pub extern "c" fn ClearWindowState(flags: rl.ConfigFlags) void;
pub extern "c" fn ToggleFullscreen() void;

View File

@ -805,24 +805,39 @@ pub const AutomationEventList = extern struct {
events: [*c]AutomationEvent
};
pub const ConfigFlags = enum(c_int) {
flag_fullscreen_mode = 2,
flag_window_resizable = 4,
flag_window_undecorated = 8,
flag_window_transparent = 16,
flag_msaa_4x_hint = 32,
flag_vsync_hint = 64,
flag_window_hidden = 128,
flag_window_always_run = 256,
flag_window_minimized = 512,
flag_window_maximized = 1024,
flag_window_unfocused = 2048,
flag_window_topmost = 4096,
flag_window_highdpi = 8192,
flag_window_mouse_passthrough = 16384,
flag_borderless_windowed_mode = 32768,
flag_interlaced_hint = 65536,
_,
pub const ConfigFlags = packed struct {
__reserved: bool = false,
fullscreen_mode: bool = false,
window_resizable: bool = false,
window_undecorated: bool = false,
window_transparent: bool = false,
msaa_4x_hint: bool = false,
vsync_hint: bool = false,
window_hidden: bool = false,
window_always_run: bool = false,
window_minimized: bool = false,
window_maximized: bool = false,
window_unfocused: bool = false,
window_topmost: bool = false,
window_highdpi: bool = false,
window_mouse_passthrough: bool = false,
borderless_windowed_mode: bool = false,
interlaced_hint: bool = false,
__reserved2: bool = false,
__reserved3: bool = false,
__reserved4: bool = false,
__reserved5: bool = false,
__reserved6: bool = false,
__reserved7: bool = false,
__reserved8: bool = false,
__reserved9: bool = false,
__reserved10: bool = false,
__reserved11: bool = false,
__reserved12: bool = false,
__reserved13: bool = false,
__reserved14: bool = false,
__reserved15: bool = false,
__reserved16: bool = false,
};
pub const TraceLogLevel = enum(c_int) {
@ -1500,8 +1515,8 @@ pub fn isWindowResized() bool {
return cdef.IsWindowResized();
}
pub fn isWindowState(flag: u32) bool {
return cdef.IsWindowState(@as(c_uint, flag));
pub fn isWindowState(flag: ConfigFlags) bool {
return cdef.IsWindowState(flag);
}
pub fn setWindowState(flags: ConfigFlags) void {