feat(raygui): get message box example working

This commit is contained in:
Daniel Hill 2025-04-19 14:33:51 -04:00 committed by Nikolas
parent d6c77762cb
commit f4b69764db
6 changed files with 616 additions and 577 deletions

View File

@ -167,6 +167,11 @@ pub fn build(b: *std.Build) !void {
.path = "examples/core/window_flags.zig", .path = "examples/core/window_flags.zig",
.desc = "Demonstrates various flags used during and after window creation", .desc = "Demonstrates various flags used during and after window creation",
}, },
.{
.name = "gui_message_box",
.path = "examples/gui/message_box.zig",
.desc = "Demonstrates showing and hiding a message box",
},
.{ .{
.name = "raymarching", .name = "raymarching",
.path = "examples/shaders/raymarching.zig", .path = "examples/shaders/raymarching.zig",

View File

@ -0,0 +1,55 @@
//! # raylib-zig [gui] example - message box
//!
//! Example originally created with raylib-zig 5.6-dev, last time updated with
//! raylib-zig 5.6-dev
//!
//! Example licensed under an unmodified zlib/libpng license, which is an
//! OSI-certified, BSD-like license that allows static linking with closed
//! source software
//!
//! Copyright (c) Nikolas Wipper 2025
const std = @import("std");
const rl = @import("raylib");
const rg = @import("raygui");
// `rl.getColor` only accepts a `u32`. Performing `@intCast` on the return value
// of `rg.getStyle` invokes checked undefined behavior from Zig when passed to
// `rl.getColor`, hence the custom implementation here...
fn getColor(hex: i32) rl.Color {
var color: rl.Color = .black;
// zig fmt: off
color.r = @intCast((hex >> 24) & 0xFF);
color.g = @intCast((hex >> 16) & 0xFF);
color.b = @intCast((hex >> 8) & 0xFF);
color.a = @intCast((hex >> 0) & 0xFF);
// zig fmt: on
return color;
}
pub fn main() !void {
rl.initWindow(400, 200, "raygui - controls test suite");
defer rl.closeWindow();
rl.setTargetFPS(60);
var show_message_box = false;
const color_int = rg.getStyle(.default, .{ .default = .background_color });
while (!rl.windowShouldClose()) {
rl.beginDrawing();
defer rl.endDrawing();
rl.clearBackground(getColor(color_int));
if (rg.guiButton(.init(24, 24, 120, 30), "#191#Show Message") > 0) show_message_box = true;
if (show_message_box) {
const result = rg.guiMessageBox(.init(85, 70, 250, 100), "#191#Message Box", "Hi! This is a message", "Nice;Cool");
if (result >= 0) show_message_box = false;
}
}
}

View File

@ -192,7 +192,8 @@ def add_namespace_to_type(t: str) -> str:
pre += "const " pre += "const "
if t.startswith("Gui"): if t.startswith("Gui"):
t = "rgui." + t # Strip "Gui" prefix to match types in prelude
t = "rgui." + t[3:]
elif t[0].isupper(): elif t[0].isupper():
t = "rl." + t t = "rl." + t
elif t in ["float3", "float16"]: elif t in ["float3", "float16"]:
@ -258,8 +259,8 @@ _fix_enums_data = [
("button", "GamepadButton", r".*GamepadButton.*"), ("button", "GamepadButton", r".*GamepadButton.*"),
("axis", "GamepadAxis", r".*GamepadAxis.*"), ("axis", "GamepadAxis", r".*GamepadAxis.*"),
("button", "MouseButton", r".*MouseButton.*"), ("button", "MouseButton", r".*MouseButton.*"),
("control", "GuiControl", r"Gui.etStyle"), ("control", "GuiControl", r"Gui.etStyle"), # "Gui" prefix needed here for type parsing later
# ("property", "GuiControlProperty", r"Gui.etStyle"), # ("property", "GuiControlProperty", r"Gui.etStyle"), # "Gui" prefix needed here for type parsing later
] ]
def fix_enums(arg_name, arg_type, func_name): def fix_enums(arg_name, arg_type, func_name):
if func_name.startswith("rl"): if func_name.startswith("rl"):

View File

@ -15,38 +15,38 @@ const Color = rl.Color;
const Rectangle = rl.Rectangle; const Rectangle = rl.Rectangle;
const Font = rl.Font; const Font = rl.Font;
pub const GuiStyleProp = extern struct { pub const StyleProp = extern struct {
controlId: c_ushort, controlId: c_ushort,
propertyId: c_ushort, propertyId: c_ushort,
propertyValue: c_int, propertyValue: c_int,
}; };
pub const GuiState = enum(c_int) { pub const State = enum(c_int) {
state_normal = 0, normal = 0,
state_focused, focused,
state_pressed, pressed,
state_disabled, disabled,
}; };
pub const GuiTextAlignment = enum(c_int) { pub const TextAlignment = enum(c_int) {
text_align_left = 0, left = 0,
text_align_center, center,
text_align_right, right,
}; };
pub const GuiTextAlignmentVertical = enum(c_int) { pub const TextAlignmentVertical = enum(c_int) {
text_align_top = 0, top = 0,
text_align_middle, middle,
text_align_bottom, bottom,
}; };
pub const GuiTextWrapMode = enum(c_int) { pub const TextWrapMode = enum(c_int) {
text_wrap_none = 0, none = 0,
text_wrap_char, char,
text_wrap_word, word,
}; };
pub const GuiControl = enum(c_int) { pub const Control = enum(c_int) {
default = 0, default = 0,
label, label,
button, button,
@ -65,7 +65,7 @@ pub const GuiControl = enum(c_int) {
statusbar, statusbar,
}; };
pub const GuiControlProperty = enum(c_int) { pub const ControlProperty = enum(c_int) {
border_color_normal = 0, border_color_normal = 0,
base_color_normal, base_color_normal,
text_color_normal, text_color_normal,
@ -83,7 +83,7 @@ pub const GuiControlProperty = enum(c_int) {
text_alignment, text_alignment,
}; };
pub const GuiDefaultProperty = enum(c_int) { pub const DefaultProperty = enum(c_int) {
text_size = 16, text_size = 16,
text_spacing, text_spacing,
line_color, line_color,
@ -93,20 +93,25 @@ pub const GuiDefaultProperty = enum(c_int) {
text_wrap_mode, text_wrap_mode,
}; };
pub const GuiToggleProperty = enum(c_int) { pub const ControlOrDefaultProperty = union(enum) {
control: ControlProperty,
default: DefaultProperty,
};
pub const ToggleProperty = enum(c_int) {
group_padding = 16, group_padding = 16,
}; };
pub const GuiSliderProperty = enum(c_int) { pub const SliderProperty = enum(c_int) {
slider_width = 16, slider_width = 16,
slider_padding, slider_padding,
}; };
pub const GuiProgressBarProperty = enum(c_int) { pub const ProgressBarProperty = enum(c_int) {
progress_padding = 16, progress_padding = 16,
}; };
pub const GuiScrollBarProperty = enum(c_int) { pub const ScrollBarProperty = enum(c_int) {
arrows_size = 16, arrows_size = 16,
arrows_visible, arrows_visible,
scroll_slider_padding, scroll_slider_padding,
@ -115,32 +120,32 @@ pub const GuiScrollBarProperty = enum(c_int) {
scroll_speed, scroll_speed,
}; };
pub const GuiCheckBoxProperty = enum(c_int) { pub const CheckBoxProperty = enum(c_int) {
check_padding = 16, check_padding = 16,
}; };
pub const GuiComboBoxProperty = enum(c_int) { pub const ComboBoxProperty = enum(c_int) {
combo_button_width = 16, combo_button_width = 16,
combo_button_spacing, combo_button_spacing,
}; };
pub const GuiDropdownBoxProperty = enum(c_int) { pub const DropdownBoxProperty = enum(c_int) {
arrow_padding = 16, arrow_padding = 16,
dropdown_items_spacing, dropdown_items_spacing,
dropdown_arrow_hidden, dropdown_arrow_hidden,
dropdown_roll_up, dropdown_roll_up,
}; };
pub const GuiTextBoxProperty = enum(c_int) { pub const TextBoxProperty = enum(c_int) {
text_readonly = 16, text_readonly = 16,
}; };
pub const GuiValueBoxProperty = enum(c_int) { pub const ValueBoxProperty = enum(c_int) {
spin_button_width = 16, spin_button_width = 16,
spin_button_spacing, spin_button_spacing,
}; };
pub const GuiListViewProperty = enum(c_int) { pub const ListViewProperty = enum(c_int) {
list_items_height = 16, list_items_height = 16,
list_items_spacing, list_items_spacing,
scrollbar_width, scrollbar_width,
@ -149,7 +154,7 @@ pub const GuiListViewProperty = enum(c_int) {
list_items_border_width, list_items_border_width,
}; };
pub const GuiColorPickerProperty = enum(c_int) { pub const ColorPickerProperty = enum(c_int) {
color_selector_size = 16, color_selector_size = 16,
huebar_width, huebar_width,
huebar_padding, huebar_padding,
@ -160,230 +165,230 @@ pub const GuiColorPickerProperty = enum(c_int) {
pub const scrollbar_left_side: c_int = 0; pub const scrollbar_left_side: c_int = 0;
pub const scrollbar_right_side: c_int = 1; pub const scrollbar_right_side: c_int = 1;
pub const GuiIconName = enum(c_int) { pub const IconName = enum(c_int) {
icon_none = 0, none = 0,
icon_folder_file_open = 1, folder_file_open = 1,
icon_file_save_classic = 2, file_save_classic = 2,
icon_folder_open = 3, folder_open = 3,
icon_folder_save = 4, folder_save = 4,
icon_file_open = 5, file_open = 5,
icon_file_save = 6, file_save = 6,
icon_file_export = 7, file_export = 7,
icon_file_add = 8, file_add = 8,
icon_file_delete = 9, file_delete = 9,
icon_filetype_text = 10, filetype_text = 10,
icon_filetype_audio = 11, filetype_audio = 11,
icon_filetype_image = 12, filetype_image = 12,
icon_filetype_play = 13, filetype_play = 13,
icon_filetype_video = 14, filetype_video = 14,
icon_filetype_info = 15, filetype_info = 15,
icon_file_copy = 16, file_copy = 16,
icon_file_cut = 17, file_cut = 17,
icon_file_paste = 18, file_paste = 18,
icon_cursor_hand = 19, cursor_hand = 19,
icon_cursor_pointer = 20, cursor_pointer = 20,
icon_cursor_classic = 21, cursor_classic = 21,
icon_pencil = 22, pencil = 22,
icon_pencil_big = 23, pencil_big = 23,
icon_brush_classic = 24, brush_classic = 24,
icon_brush_painter = 25, brush_painter = 25,
icon_water_drop = 26, water_drop = 26,
icon_color_picker = 27, color_picker = 27,
icon_rubber = 28, rubber = 28,
icon_color_bucket = 29, color_bucket = 29,
icon_text_t = 30, text_t = 30,
icon_text_a = 31, text_a = 31,
icon_scale = 32, scale = 32,
icon_resize = 33, resize = 33,
icon_filter_point = 34, filter_point = 34,
icon_filter_bilinear = 35, filter_bilinear = 35,
icon_crop = 36, crop = 36,
icon_crop_alpha = 37, crop_alpha = 37,
icon_square_toggle = 38, square_toggle = 38,
icon_symmetry = 39, symmetry = 39,
icon_symmetry_horizontal = 40, symmetry_horizontal = 40,
icon_symmetry_vertical = 41, symmetry_vertical = 41,
icon_lens = 42, lens = 42,
icon_lens_big = 43, lens_big = 43,
icon_eye_on = 44, eye_on = 44,
icon_eye_off = 45, eye_off = 45,
icon_filter_top = 46, filter_top = 46,
icon_filter = 47, filter = 47,
icon_target_point = 48, target_point = 48,
icon_target_small = 49, target_small = 49,
icon_target_big = 50, target_big = 50,
icon_target_move = 51, target_move = 51,
icon_cursor_move = 52, cursor_move = 52,
icon_cursor_scale = 53, cursor_scale = 53,
icon_cursor_scale_right = 54, cursor_scale_right = 54,
icon_cursor_scale_left = 55, cursor_scale_left = 55,
icon_undo = 56, undo = 56,
icon_redo = 57, redo = 57,
icon_reredo = 58, reredo = 58,
icon_mutate = 59, mutate = 59,
icon_rotate = 60, rotate = 60,
icon_repeat = 61, repeat = 61,
icon_shuffle = 62, shuffle = 62,
icon_emptybox = 63, emptybox = 63,
icon_target = 64, target = 64,
icon_target_small_fill = 65, target_small_fill = 65,
icon_target_big_fill = 66, target_big_fill = 66,
icon_target_move_fill = 67, target_move_fill = 67,
icon_cursor_move_fill = 68, cursor_move_fill = 68,
icon_cursor_scale_fill = 69, cursor_scale_fill = 69,
icon_cursor_scale_right_fill = 70, cursor_scale_right_fill = 70,
icon_cursor_scale_left_fill = 71, cursor_scale_left_fill = 71,
icon_undo_fill = 72, undo_fill = 72,
icon_redo_fill = 73, redo_fill = 73,
icon_reredo_fill = 74, reredo_fill = 74,
icon_mutate_fill = 75, mutate_fill = 75,
icon_rotate_fill = 76, rotate_fill = 76,
icon_repeat_fill = 77, repeat_fill = 77,
icon_shuffle_fill = 78, shuffle_fill = 78,
icon_emptybox_small = 79, emptybox_small = 79,
icon_box = 80, box = 80,
icon_box_top = 81, box_top = 81,
icon_box_top_right = 82, box_top_right = 82,
icon_box_right = 83, box_right = 83,
icon_box_bottom_right = 84, box_bottom_right = 84,
icon_box_bottom = 85, box_bottom = 85,
icon_box_bottom_left = 86, box_bottom_left = 86,
icon_box_left = 87, box_left = 87,
icon_box_top_left = 88, box_top_left = 88,
icon_box_center = 89, box_center = 89,
icon_box_circle_mask = 90, box_circle_mask = 90,
icon_pot = 91, pot = 91,
icon_alpha_multiply = 92, alpha_multiply = 92,
icon_alpha_clear = 93, alpha_clear = 93,
icon_dithering = 94, dithering = 94,
icon_mipmaps = 95, mipmaps = 95,
icon_box_grid = 96, box_grid = 96,
icon_grid = 97, grid = 97,
icon_box_corners_small = 98, box_corners_small = 98,
icon_box_corners_big = 99, box_corners_big = 99,
icon_four_boxes = 100, four_boxes = 100,
icon_grid_fill = 101, grid_fill = 101,
icon_box_multisize = 102, box_multisize = 102,
icon_zoom_small = 103, zoom_small = 103,
icon_zoom_medium = 104, zoom_medium = 104,
icon_zoom_big = 105, zoom_big = 105,
icon_zoom_all = 106, zoom_all = 106,
icon_zoom_center = 107, zoom_center = 107,
icon_box_dots_small = 108, box_dots_small = 108,
icon_box_dots_big = 109, box_dots_big = 109,
icon_box_concentric = 110, box_concentric = 110,
icon_box_grid_big = 111, box_grid_big = 111,
icon_ok_tick = 112, ok_tick = 112,
icon_cross = 113, cross = 113,
icon_arrow_left = 114, arrow_left = 114,
icon_arrow_right = 115, arrow_right = 115,
icon_arrow_down = 116, arrow_down = 116,
icon_arrow_up = 117, arrow_up = 117,
icon_arrow_left_fill = 118, arrow_left_fill = 118,
icon_arrow_right_fill = 119, arrow_right_fill = 119,
icon_arrow_down_fill = 120, arrow_down_fill = 120,
icon_arrow_up_fill = 121, arrow_up_fill = 121,
icon_audio = 122, audio = 122,
icon_fx = 123, fx = 123,
icon_wave = 124, wave = 124,
icon_wave_sinus = 125, wave_sinus = 125,
icon_wave_square = 126, wave_square = 126,
icon_wave_triangular = 127, wave_triangular = 127,
icon_cross_small = 128, cross_small = 128,
icon_player_previous = 129, player_previous = 129,
icon_player_play_back = 130, player_play_back = 130,
icon_player_play = 131, player_play = 131,
icon_player_pause = 132, player_pause = 132,
icon_player_stop = 133, player_stop = 133,
icon_player_next = 134, player_next = 134,
icon_player_record = 135, player_record = 135,
icon_magnet = 136, magnet = 136,
icon_lock_close = 137, lock_close = 137,
icon_lock_open = 138, lock_open = 138,
icon_clock = 139, clock = 139,
icon_tools = 140, tools = 140,
icon_gear = 141, gear = 141,
icon_gear_big = 142, gear_big = 142,
icon_bin = 143, bin = 143,
icon_hand_pointer = 144, hand_pointer = 144,
icon_laser = 145, laser = 145,
icon_coin = 146, coin = 146,
icon_explosion = 147, explosion = 147,
icon_1up = 148, @"1up" = 148,
icon_player = 149, player = 149,
icon_player_jump = 150, player_jump = 150,
icon_key = 151, key = 151,
icon_demon = 152, demon = 152,
icon_text_popup = 153, text_popup = 153,
icon_gear_ex = 154, gear_ex = 154,
icon_crack = 155, crack = 155,
icon_crack_points = 156, crack_points = 156,
icon_star = 157, star = 157,
icon_door = 158, door = 158,
icon_exit = 159, exit = 159,
icon_mode_2d = 160, mode_2d = 160,
icon_mode_3d = 161, mode_3d = 161,
icon_cube = 162, cube = 162,
icon_cube_face_top = 163, cube_face_top = 163,
icon_cube_face_left = 164, cube_face_left = 164,
icon_cube_face_front = 165, cube_face_front = 165,
icon_cube_face_bottom = 166, cube_face_bottom = 166,
icon_cube_face_right = 167, cube_face_right = 167,
icon_cube_face_back = 168, cube_face_back = 168,
icon_camera = 169, camera = 169,
icon_special = 170, special = 170,
icon_link_net = 171, link_net = 171,
icon_link_boxes = 172, link_boxes = 172,
icon_link_multi = 173, link_multi = 173,
icon_link = 174, link = 174,
icon_link_broke = 175, link_broke = 175,
icon_text_notes = 176, text_notes = 176,
icon_notebook = 177, notebook = 177,
icon_suitcase = 178, suitcase = 178,
icon_suitcase_zip = 179, suitcase_zip = 179,
icon_mailbox = 180, mailbox = 180,
icon_monitor = 181, monitor = 181,
icon_printer = 182, printer = 182,
icon_photo_camera = 183, photo_camera = 183,
icon_photo_camera_flash = 184, photo_camera_flash = 184,
icon_house = 185, house = 185,
icon_heart = 186, heart = 186,
icon_corner = 187, corner = 187,
icon_vertical_bars = 188, vertical_bars = 188,
icon_vertical_bars_fill = 189, vertical_bars_fill = 189,
icon_life_bars = 190, life_bars = 190,
icon_info = 191, info = 191,
icon_crossline = 192, crossline = 192,
icon_help = 193, help = 193,
icon_filetype_alpha = 194, filetype_alpha = 194,
icon_filetype_home = 195, filetype_home = 195,
icon_layers_visible = 196, layers_visible = 196,
icon_layers = 197, layers = 197,
icon_window = 198, window = 198,
icon_hidpi = 199, hidpi = 199,
icon_filetype_binary = 200, filetype_binary = 200,
icon_hex = 201, hex = 201,
icon_shield = 202, shield = 202,
icon_file_new = 203, file_new = 203,
icon_folder_add = 204, folder_add = 204,
icon_alarm = 205, alarm = 205,
icon_cpu = 206, cpu = 206,
icon_rom = 207, rom = 207,
icon_step_over = 208, step_over = 208,
icon_step_into = 209, step_into = 209,
icon_step_out = 210, step_out = 210,
icon_restart = 211, restart = 211,
icon_breakpoint_on = 212, breakpoint_on = 212,
icon_breakpoint_off = 213, breakpoint_off = 213,
icon_burger_menu = 214, burger_menu = 214,
icon_case_sensitive = 215, case_sensitive = 215,
icon_reg_exp = 216, reg_exp = 216,
icon_folder = 217, folder = 217,
icon_file = 218, file = 218,
icon_sand_timer = 219, sand_timer = 219,
icon_warning = 220, warning = 220,
icon_help_box = 221, help_box = 221,
icon_info_box = 222, info_box = 222,
icon_223 = 223, icon_223 = 223,
icon_224 = 224, icon_224 = 224,
icon_225 = 225, icon_225 = 225,
@ -420,41 +425,25 @@ pub const GuiIconName = enum(c_int) {
}; };
/// Set one style property /// Set one style property
pub fn guiSetStyle(control: GuiControl, comptime property: anytype, value: i32) void { pub fn setStyle(control: Control, comptime property: ControlOrDefaultProperty, value: i32) void {
comptime var property_int: c_int = undefined; const property_int: c_int = switch (property) {
inline else => |val| @intCast(@intFromEnum(val))
comptime { };
if (@TypeOf(property) == GuiControlProperty) {
property_int = @intCast(@intFromEnum(property));
} else if (@TypeOf(property) == GuiDefaultProperty) { // comparison can't be chained :(
property_int = @intCast(@intFromEnum(property));
} else {
@compileError("Invalid property type for guiSetStyle");
}
}
cdef.GuiSetStyle(control, property_int, @as(c_int, value)); cdef.GuiSetStyle(control, property_int, @as(c_int, value));
} }
/// Get one style property /// Get one style property
pub fn guiGetStyle(control: GuiControl, comptime property: anytype) i32 { pub fn getStyle(control: Control, comptime property: ControlOrDefaultProperty) i32 {
comptime var property_int: c_int = undefined; const property_int: c_int = switch (property) {
inline else => |val| @intCast(@intFromEnum(val))
comptime { };
if (@TypeOf(property) == GuiControlProperty) {
property_int = @intCast(@intFromEnum(property));
} else if (@TypeOf(property) == GuiDefaultProperty) { // comparison can't be chained :(
property_int = @intCast(@intFromEnum(property));
} else {
@compileError("Invalid property type for guiGetStyle");
}
}
return @as(i32, cdef.GuiGetStyle(control, property_int)); return @as(i32, cdef.GuiGetStyle(control, property_int));
} }
/// Get raygui icons data pointer /// Get raygui icons data pointer
pub fn guiGetIcons() RayguiError![]u32 { pub fn getIcons() RayguiError![]u32 {
var res: []u32 = undefined; var res: []u32 = undefined;
const ptr = cdef.GuiGetIcons(); const ptr = cdef.GuiGetIcons();
@ -467,22 +456,22 @@ pub fn guiGetIcons() RayguiError![]u32 {
// If you REALLY need the return value of the function, you'll know what to do with it and its size yourself // If you REALLY need the return value of the function, you'll know what to do with it and its size yourself
/// Load raygui icons file (.rgi) into internal icons data /// Load raygui icons file (.rgi) into internal icons data
pub fn guiLoadIcons(fileName: [*c]const u8, loadIconsName: bool) [*c][*c]u8 { pub fn loadIcons(fileName: [*c]const u8, loadIconsName: bool) [*c][*c]u8 {
return cdef.GuiLoadIcons(fileName, loadIconsName); return cdef.GuiLoadIcons(fileName, loadIconsName);
} }
/// Tab Bar control, returns TAB to be closed or -1 /// Tab Bar control, returns TAB to be closed or -1
pub fn guiTabBar(bounds: Rectangle, text: [][*:0]const u8, active: *i32) i32 { pub fn tabBar(bounds: Rectangle, text: [][*:0]const u8, active: *i32) i32 {
return @as(i32, cdef.GuiTabBar(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(active)))); return @as(i32, cdef.GuiTabBar(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(active))));
} }
/// List View with extended parameters /// List View with extended parameters
pub fn guiListViewEx(bounds: Rectangle, text: [][*:0]const u8, scrollIndex: *i32, active: *i32, focus: *i32) i32 { pub fn listViewEx(bounds: Rectangle, text: [][*:0]const u8, scrollIndex: *i32, active: *i32, focus: *i32) i32 {
return @as(i32, cdef.GuiListViewEx(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(scrollIndex)), @as([*c]c_int, @ptrCast(active)), @as([*c]c_int, @ptrCast(focus)))); return @as(i32, cdef.GuiListViewEx(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(scrollIndex)), @as([*c]c_int, @ptrCast(active)), @as([*c]c_int, @ptrCast(focus))));
} }
/// Panel control, useful to group controls /// Panel control, useful to group controls
pub fn guiPanel(bounds: Rectangle, text: ?[*:0]const u8) i32 { pub fn panel(bounds: Rectangle, text: ?[*:0]const u8) i32 {
var textFinal = @as([*c]const u8, 0); var textFinal = @as([*c]const u8, 0);
if (text) |textSure| { if (text) |textSure| {
textFinal = @as([*c]const u8, @ptrCast(textSure)); textFinal = @as([*c]const u8, @ptrCast(textSure));
@ -491,7 +480,7 @@ pub fn guiPanel(bounds: Rectangle, text: ?[*:0]const u8) i32 {
} }
/// Scroll Panel control /// Scroll Panel control
pub fn guiScrollPanel(bounds: Rectangle, text: ?[*:0]const u8, content: Rectangle, scroll: *Vector2, view: *Rectangle) i32 { pub fn scrollPanel(bounds: Rectangle, text: ?[*:0]const u8, content: Rectangle, scroll: *Vector2, view: *Rectangle) i32 {
var textFinal = @as([*c]const u8, 0); var textFinal = @as([*c]const u8, 0);
if (text) |textSure| { if (text) |textSure| {
textFinal = @as([*c]const u8, @ptrCast(textSure)); textFinal = @as([*c]const u8, @ptrCast(textSure));

View File

@ -13,8 +13,8 @@ pub extern "c" fn GuiSetState(state: c_int) void;
pub extern "c" fn GuiGetState() c_int; pub extern "c" fn GuiGetState() c_int;
pub extern "c" fn GuiSetFont(font: rl.Font) void; pub extern "c" fn GuiSetFont(font: rl.Font) void;
pub extern "c" fn GuiGetFont() rl.Font; pub extern "c" fn GuiGetFont() rl.Font;
pub extern "c" fn GuiSetStyle(control: rgui.GuiControl, property: c_int, value: c_int) void; pub extern "c" fn GuiSetStyle(control: rgui.Control, property: c_int, value: c_int) void;
pub extern "c" fn GuiGetStyle(control: rgui.GuiControl, property: c_int) c_int; pub extern "c" fn GuiGetStyle(control: rgui.Control, property: c_int) c_int;
pub extern "c" fn GuiLoadStyle(fileName: [*c]const u8) void; pub extern "c" fn GuiLoadStyle(fileName: [*c]const u8) void;
pub extern "c" fn GuiLoadStyleDefault() void; pub extern "c" fn GuiLoadStyleDefault() void;
pub extern "c" fn GuiEnableTooltip() void; pub extern "c" fn GuiEnableTooltip() void;

View File

@ -15,38 +15,38 @@ const Color = rl.Color;
const Rectangle = rl.Rectangle; const Rectangle = rl.Rectangle;
const Font = rl.Font; const Font = rl.Font;
pub const GuiStyleProp = extern struct { pub const StyleProp = extern struct {
controlId: c_ushort, controlId: c_ushort,
propertyId: c_ushort, propertyId: c_ushort,
propertyValue: c_int, propertyValue: c_int,
}; };
pub const GuiState = enum(c_int) { pub const State = enum(c_int) {
state_normal = 0, normal = 0,
state_focused, focused,
state_pressed, pressed,
state_disabled, disabled,
}; };
pub const GuiTextAlignment = enum(c_int) { pub const TextAlignment = enum(c_int) {
text_align_left = 0, left = 0,
text_align_center, center,
text_align_right, right,
}; };
pub const GuiTextAlignmentVertical = enum(c_int) { pub const TextAlignmentVertical = enum(c_int) {
text_align_top = 0, top = 0,
text_align_middle, middle,
text_align_bottom, bottom,
}; };
pub const GuiTextWrapMode = enum(c_int) { pub const TextWrapMode = enum(c_int) {
text_wrap_none = 0, none = 0,
text_wrap_char, char,
text_wrap_word, word,
}; };
pub const GuiControl = enum(c_int) { pub const Control = enum(c_int) {
default = 0, default = 0,
label, label,
button, button,
@ -65,7 +65,7 @@ pub const GuiControl = enum(c_int) {
statusbar, statusbar,
}; };
pub const GuiControlProperty = enum(c_int) { pub const ControlProperty = enum(c_int) {
border_color_normal = 0, border_color_normal = 0,
base_color_normal, base_color_normal,
text_color_normal, text_color_normal,
@ -83,7 +83,7 @@ pub const GuiControlProperty = enum(c_int) {
text_alignment, text_alignment,
}; };
pub const GuiDefaultProperty = enum(c_int) { pub const DefaultProperty = enum(c_int) {
text_size = 16, text_size = 16,
text_spacing, text_spacing,
line_color, line_color,
@ -93,20 +93,25 @@ pub const GuiDefaultProperty = enum(c_int) {
text_wrap_mode, text_wrap_mode,
}; };
pub const GuiToggleProperty = enum(c_int) { pub const ControlOrDefaultProperty = union(enum) {
control: ControlProperty,
default: DefaultProperty,
};
pub const ToggleProperty = enum(c_int) {
group_padding = 16, group_padding = 16,
}; };
pub const GuiSliderProperty = enum(c_int) { pub const SliderProperty = enum(c_int) {
slider_width = 16, slider_width = 16,
slider_padding, slider_padding,
}; };
pub const GuiProgressBarProperty = enum(c_int) { pub const ProgressBarProperty = enum(c_int) {
progress_padding = 16, progress_padding = 16,
}; };
pub const GuiScrollBarProperty = enum(c_int) { pub const ScrollBarProperty = enum(c_int) {
arrows_size = 16, arrows_size = 16,
arrows_visible, arrows_visible,
scroll_slider_padding, scroll_slider_padding,
@ -115,32 +120,32 @@ pub const GuiScrollBarProperty = enum(c_int) {
scroll_speed, scroll_speed,
}; };
pub const GuiCheckBoxProperty = enum(c_int) { pub const CheckBoxProperty = enum(c_int) {
check_padding = 16, check_padding = 16,
}; };
pub const GuiComboBoxProperty = enum(c_int) { pub const ComboBoxProperty = enum(c_int) {
combo_button_width = 16, combo_button_width = 16,
combo_button_spacing, combo_button_spacing,
}; };
pub const GuiDropdownBoxProperty = enum(c_int) { pub const DropdownBoxProperty = enum(c_int) {
arrow_padding = 16, arrow_padding = 16,
dropdown_items_spacing, dropdown_items_spacing,
dropdown_arrow_hidden, dropdown_arrow_hidden,
dropdown_roll_up, dropdown_roll_up,
}; };
pub const GuiTextBoxProperty = enum(c_int) { pub const TextBoxProperty = enum(c_int) {
text_readonly = 16, text_readonly = 16,
}; };
pub const GuiValueBoxProperty = enum(c_int) { pub const ValueBoxProperty = enum(c_int) {
spin_button_width = 16, spin_button_width = 16,
spin_button_spacing, spin_button_spacing,
}; };
pub const GuiListViewProperty = enum(c_int) { pub const ListViewProperty = enum(c_int) {
list_items_height = 16, list_items_height = 16,
list_items_spacing, list_items_spacing,
scrollbar_width, scrollbar_width,
@ -149,7 +154,7 @@ pub const GuiListViewProperty = enum(c_int) {
list_items_border_width, list_items_border_width,
}; };
pub const GuiColorPickerProperty = enum(c_int) { pub const ColorPickerProperty = enum(c_int) {
color_selector_size = 16, color_selector_size = 16,
huebar_width, huebar_width,
huebar_padding, huebar_padding,
@ -160,230 +165,230 @@ pub const GuiColorPickerProperty = enum(c_int) {
pub const scrollbar_left_side: c_int = 0; pub const scrollbar_left_side: c_int = 0;
pub const scrollbar_right_side: c_int = 1; pub const scrollbar_right_side: c_int = 1;
pub const GuiIconName = enum(c_int) { pub const IconName = enum(c_int) {
icon_none = 0, none = 0,
icon_folder_file_open = 1, folder_file_open = 1,
icon_file_save_classic = 2, file_save_classic = 2,
icon_folder_open = 3, folder_open = 3,
icon_folder_save = 4, folder_save = 4,
icon_file_open = 5, file_open = 5,
icon_file_save = 6, file_save = 6,
icon_file_export = 7, file_export = 7,
icon_file_add = 8, file_add = 8,
icon_file_delete = 9, file_delete = 9,
icon_filetype_text = 10, filetype_text = 10,
icon_filetype_audio = 11, filetype_audio = 11,
icon_filetype_image = 12, filetype_image = 12,
icon_filetype_play = 13, filetype_play = 13,
icon_filetype_video = 14, filetype_video = 14,
icon_filetype_info = 15, filetype_info = 15,
icon_file_copy = 16, file_copy = 16,
icon_file_cut = 17, file_cut = 17,
icon_file_paste = 18, file_paste = 18,
icon_cursor_hand = 19, cursor_hand = 19,
icon_cursor_pointer = 20, cursor_pointer = 20,
icon_cursor_classic = 21, cursor_classic = 21,
icon_pencil = 22, pencil = 22,
icon_pencil_big = 23, pencil_big = 23,
icon_brush_classic = 24, brush_classic = 24,
icon_brush_painter = 25, brush_painter = 25,
icon_water_drop = 26, water_drop = 26,
icon_color_picker = 27, color_picker = 27,
icon_rubber = 28, rubber = 28,
icon_color_bucket = 29, color_bucket = 29,
icon_text_t = 30, text_t = 30,
icon_text_a = 31, text_a = 31,
icon_scale = 32, scale = 32,
icon_resize = 33, resize = 33,
icon_filter_point = 34, filter_point = 34,
icon_filter_bilinear = 35, filter_bilinear = 35,
icon_crop = 36, crop = 36,
icon_crop_alpha = 37, crop_alpha = 37,
icon_square_toggle = 38, square_toggle = 38,
icon_symmetry = 39, symmetry = 39,
icon_symmetry_horizontal = 40, symmetry_horizontal = 40,
icon_symmetry_vertical = 41, symmetry_vertical = 41,
icon_lens = 42, lens = 42,
icon_lens_big = 43, lens_big = 43,
icon_eye_on = 44, eye_on = 44,
icon_eye_off = 45, eye_off = 45,
icon_filter_top = 46, filter_top = 46,
icon_filter = 47, filter = 47,
icon_target_point = 48, target_point = 48,
icon_target_small = 49, target_small = 49,
icon_target_big = 50, target_big = 50,
icon_target_move = 51, target_move = 51,
icon_cursor_move = 52, cursor_move = 52,
icon_cursor_scale = 53, cursor_scale = 53,
icon_cursor_scale_right = 54, cursor_scale_right = 54,
icon_cursor_scale_left = 55, cursor_scale_left = 55,
icon_undo = 56, undo = 56,
icon_redo = 57, redo = 57,
icon_reredo = 58, reredo = 58,
icon_mutate = 59, mutate = 59,
icon_rotate = 60, rotate = 60,
icon_repeat = 61, repeat = 61,
icon_shuffle = 62, shuffle = 62,
icon_emptybox = 63, emptybox = 63,
icon_target = 64, target = 64,
icon_target_small_fill = 65, target_small_fill = 65,
icon_target_big_fill = 66, target_big_fill = 66,
icon_target_move_fill = 67, target_move_fill = 67,
icon_cursor_move_fill = 68, cursor_move_fill = 68,
icon_cursor_scale_fill = 69, cursor_scale_fill = 69,
icon_cursor_scale_right_fill = 70, cursor_scale_right_fill = 70,
icon_cursor_scale_left_fill = 71, cursor_scale_left_fill = 71,
icon_undo_fill = 72, undo_fill = 72,
icon_redo_fill = 73, redo_fill = 73,
icon_reredo_fill = 74, reredo_fill = 74,
icon_mutate_fill = 75, mutate_fill = 75,
icon_rotate_fill = 76, rotate_fill = 76,
icon_repeat_fill = 77, repeat_fill = 77,
icon_shuffle_fill = 78, shuffle_fill = 78,
icon_emptybox_small = 79, emptybox_small = 79,
icon_box = 80, box = 80,
icon_box_top = 81, box_top = 81,
icon_box_top_right = 82, box_top_right = 82,
icon_box_right = 83, box_right = 83,
icon_box_bottom_right = 84, box_bottom_right = 84,
icon_box_bottom = 85, box_bottom = 85,
icon_box_bottom_left = 86, box_bottom_left = 86,
icon_box_left = 87, box_left = 87,
icon_box_top_left = 88, box_top_left = 88,
icon_box_center = 89, box_center = 89,
icon_box_circle_mask = 90, box_circle_mask = 90,
icon_pot = 91, pot = 91,
icon_alpha_multiply = 92, alpha_multiply = 92,
icon_alpha_clear = 93, alpha_clear = 93,
icon_dithering = 94, dithering = 94,
icon_mipmaps = 95, mipmaps = 95,
icon_box_grid = 96, box_grid = 96,
icon_grid = 97, grid = 97,
icon_box_corners_small = 98, box_corners_small = 98,
icon_box_corners_big = 99, box_corners_big = 99,
icon_four_boxes = 100, four_boxes = 100,
icon_grid_fill = 101, grid_fill = 101,
icon_box_multisize = 102, box_multisize = 102,
icon_zoom_small = 103, zoom_small = 103,
icon_zoom_medium = 104, zoom_medium = 104,
icon_zoom_big = 105, zoom_big = 105,
icon_zoom_all = 106, zoom_all = 106,
icon_zoom_center = 107, zoom_center = 107,
icon_box_dots_small = 108, box_dots_small = 108,
icon_box_dots_big = 109, box_dots_big = 109,
icon_box_concentric = 110, box_concentric = 110,
icon_box_grid_big = 111, box_grid_big = 111,
icon_ok_tick = 112, ok_tick = 112,
icon_cross = 113, cross = 113,
icon_arrow_left = 114, arrow_left = 114,
icon_arrow_right = 115, arrow_right = 115,
icon_arrow_down = 116, arrow_down = 116,
icon_arrow_up = 117, arrow_up = 117,
icon_arrow_left_fill = 118, arrow_left_fill = 118,
icon_arrow_right_fill = 119, arrow_right_fill = 119,
icon_arrow_down_fill = 120, arrow_down_fill = 120,
icon_arrow_up_fill = 121, arrow_up_fill = 121,
icon_audio = 122, audio = 122,
icon_fx = 123, fx = 123,
icon_wave = 124, wave = 124,
icon_wave_sinus = 125, wave_sinus = 125,
icon_wave_square = 126, wave_square = 126,
icon_wave_triangular = 127, wave_triangular = 127,
icon_cross_small = 128, cross_small = 128,
icon_player_previous = 129, player_previous = 129,
icon_player_play_back = 130, player_play_back = 130,
icon_player_play = 131, player_play = 131,
icon_player_pause = 132, player_pause = 132,
icon_player_stop = 133, player_stop = 133,
icon_player_next = 134, player_next = 134,
icon_player_record = 135, player_record = 135,
icon_magnet = 136, magnet = 136,
icon_lock_close = 137, lock_close = 137,
icon_lock_open = 138, lock_open = 138,
icon_clock = 139, clock = 139,
icon_tools = 140, tools = 140,
icon_gear = 141, gear = 141,
icon_gear_big = 142, gear_big = 142,
icon_bin = 143, bin = 143,
icon_hand_pointer = 144, hand_pointer = 144,
icon_laser = 145, laser = 145,
icon_coin = 146, coin = 146,
icon_explosion = 147, explosion = 147,
icon_1up = 148, @"1up" = 148,
icon_player = 149, player = 149,
icon_player_jump = 150, player_jump = 150,
icon_key = 151, key = 151,
icon_demon = 152, demon = 152,
icon_text_popup = 153, text_popup = 153,
icon_gear_ex = 154, gear_ex = 154,
icon_crack = 155, crack = 155,
icon_crack_points = 156, crack_points = 156,
icon_star = 157, star = 157,
icon_door = 158, door = 158,
icon_exit = 159, exit = 159,
icon_mode_2d = 160, mode_2d = 160,
icon_mode_3d = 161, mode_3d = 161,
icon_cube = 162, cube = 162,
icon_cube_face_top = 163, cube_face_top = 163,
icon_cube_face_left = 164, cube_face_left = 164,
icon_cube_face_front = 165, cube_face_front = 165,
icon_cube_face_bottom = 166, cube_face_bottom = 166,
icon_cube_face_right = 167, cube_face_right = 167,
icon_cube_face_back = 168, cube_face_back = 168,
icon_camera = 169, camera = 169,
icon_special = 170, special = 170,
icon_link_net = 171, link_net = 171,
icon_link_boxes = 172, link_boxes = 172,
icon_link_multi = 173, link_multi = 173,
icon_link = 174, link = 174,
icon_link_broke = 175, link_broke = 175,
icon_text_notes = 176, text_notes = 176,
icon_notebook = 177, notebook = 177,
icon_suitcase = 178, suitcase = 178,
icon_suitcase_zip = 179, suitcase_zip = 179,
icon_mailbox = 180, mailbox = 180,
icon_monitor = 181, monitor = 181,
icon_printer = 182, printer = 182,
icon_photo_camera = 183, photo_camera = 183,
icon_photo_camera_flash = 184, photo_camera_flash = 184,
icon_house = 185, house = 185,
icon_heart = 186, heart = 186,
icon_corner = 187, corner = 187,
icon_vertical_bars = 188, vertical_bars = 188,
icon_vertical_bars_fill = 189, vertical_bars_fill = 189,
icon_life_bars = 190, life_bars = 190,
icon_info = 191, info = 191,
icon_crossline = 192, crossline = 192,
icon_help = 193, help = 193,
icon_filetype_alpha = 194, filetype_alpha = 194,
icon_filetype_home = 195, filetype_home = 195,
icon_layers_visible = 196, layers_visible = 196,
icon_layers = 197, layers = 197,
icon_window = 198, window = 198,
icon_hidpi = 199, hidpi = 199,
icon_filetype_binary = 200, filetype_binary = 200,
icon_hex = 201, hex = 201,
icon_shield = 202, shield = 202,
icon_file_new = 203, file_new = 203,
icon_folder_add = 204, folder_add = 204,
icon_alarm = 205, alarm = 205,
icon_cpu = 206, cpu = 206,
icon_rom = 207, rom = 207,
icon_step_over = 208, step_over = 208,
icon_step_into = 209, step_into = 209,
icon_step_out = 210, step_out = 210,
icon_restart = 211, restart = 211,
icon_breakpoint_on = 212, breakpoint_on = 212,
icon_breakpoint_off = 213, breakpoint_off = 213,
icon_burger_menu = 214, burger_menu = 214,
icon_case_sensitive = 215, case_sensitive = 215,
icon_reg_exp = 216, reg_exp = 216,
icon_folder = 217, folder = 217,
icon_file = 218, file = 218,
icon_sand_timer = 219, sand_timer = 219,
icon_warning = 220, warning = 220,
icon_help_box = 221, help_box = 221,
icon_info_box = 222, info_box = 222,
icon_223 = 223, icon_223 = 223,
icon_224 = 224, icon_224 = 224,
icon_225 = 225, icon_225 = 225,
@ -420,41 +425,25 @@ pub const GuiIconName = enum(c_int) {
}; };
/// Set one style property /// Set one style property
pub fn guiSetStyle(control: GuiControl, comptime property: anytype, value: i32) void { pub fn setStyle(control: Control, comptime property: ControlOrDefaultProperty, value: i32) void {
comptime var property_int: c_int = undefined; const property_int: c_int = switch (property) {
inline else => |val| @intCast(@intFromEnum(val))
comptime { };
if (@TypeOf(property) == GuiControlProperty) {
property_int = @intCast(@intFromEnum(property));
} else if (@TypeOf(property) == GuiDefaultProperty) { // comparison can't be chained :(
property_int = @intCast(@intFromEnum(property));
} else {
@compileError("Invalid property type for guiSetStyle");
}
}
cdef.GuiSetStyle(control, property_int, @as(c_int, value)); cdef.GuiSetStyle(control, property_int, @as(c_int, value));
} }
/// Get one style property /// Get one style property
pub fn guiGetStyle(control: GuiControl, comptime property: anytype) i32 { pub fn getStyle(control: Control, comptime property: ControlOrDefaultProperty) i32 {
comptime var property_int: c_int = undefined; const property_int: c_int = switch (property) {
inline else => |val| @intCast(@intFromEnum(val))
comptime { };
if (@TypeOf(property) == GuiControlProperty) {
property_int = @intCast(@intFromEnum(property));
} else if (@TypeOf(property) == GuiDefaultProperty) { // comparison can't be chained :(
property_int = @intCast(@intFromEnum(property));
} else {
@compileError("Invalid property type for guiGetStyle");
}
}
return @as(i32, cdef.GuiGetStyle(control, property_int)); return @as(i32, cdef.GuiGetStyle(control, property_int));
} }
/// Get raygui icons data pointer /// Get raygui icons data pointer
pub fn guiGetIcons() RayguiError![]u32 { pub fn getIcons() RayguiError![]u32 {
var res: []u32 = undefined; var res: []u32 = undefined;
const ptr = cdef.GuiGetIcons(); const ptr = cdef.GuiGetIcons();
@ -467,22 +456,22 @@ pub fn guiGetIcons() RayguiError![]u32 {
// If you REALLY need the return value of the function, you'll know what to do with it and its size yourself // If you REALLY need the return value of the function, you'll know what to do with it and its size yourself
/// Load raygui icons file (.rgi) into internal icons data /// Load raygui icons file (.rgi) into internal icons data
pub fn guiLoadIcons(fileName: [*c]const u8, loadIconsName: bool) [*c][*c]u8 { pub fn loadIcons(fileName: [*c]const u8, loadIconsName: bool) [*c][*c]u8 {
return cdef.GuiLoadIcons(fileName, loadIconsName); return cdef.GuiLoadIcons(fileName, loadIconsName);
} }
/// Tab Bar control, returns TAB to be closed or -1 /// Tab Bar control, returns TAB to be closed or -1
pub fn guiTabBar(bounds: Rectangle, text: [][*:0]const u8, active: *i32) i32 { pub fn tabBar(bounds: Rectangle, text: [][*:0]const u8, active: *i32) i32 {
return @as(i32, cdef.GuiTabBar(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(active)))); return @as(i32, cdef.GuiTabBar(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(active))));
} }
/// List View with extended parameters /// List View with extended parameters
pub fn guiListViewEx(bounds: Rectangle, text: [][*:0]const u8, scrollIndex: *i32, active: *i32, focus: *i32) i32 { pub fn listViewEx(bounds: Rectangle, text: [][*:0]const u8, scrollIndex: *i32, active: *i32, focus: *i32) i32 {
return @as(i32, cdef.GuiListViewEx(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(scrollIndex)), @as([*c]c_int, @ptrCast(active)), @as([*c]c_int, @ptrCast(focus)))); return @as(i32, cdef.GuiListViewEx(bounds, @as([*c][*c]const u8, @ptrCast(text)), @as(c_int, @intCast(text.len)), @as([*c]c_int, @ptrCast(scrollIndex)), @as([*c]c_int, @ptrCast(active)), @as([*c]c_int, @ptrCast(focus))));
} }
/// Panel control, useful to group controls /// Panel control, useful to group controls
pub fn guiPanel(bounds: Rectangle, text: ?[*:0]const u8) i32 { pub fn panel(bounds: Rectangle, text: ?[*:0]const u8) i32 {
var textFinal = @as([*c]const u8, 0); var textFinal = @as([*c]const u8, 0);
if (text) |textSure| { if (text) |textSure| {
textFinal = @as([*c]const u8, @ptrCast(textSure)); textFinal = @as([*c]const u8, @ptrCast(textSure));
@ -491,7 +480,7 @@ pub fn guiPanel(bounds: Rectangle, text: ?[*:0]const u8) i32 {
} }
/// Scroll Panel control /// Scroll Panel control
pub fn guiScrollPanel(bounds: Rectangle, text: ?[*:0]const u8, content: Rectangle, scroll: *Vector2, view: *Rectangle) i32 { pub fn scrollPanel(bounds: Rectangle, text: ?[*:0]const u8, content: Rectangle, scroll: *Vector2, view: *Rectangle) i32 {
var textFinal = @as([*c]const u8, 0); var textFinal = @as([*c]const u8, 0);
if (text) |textSure| { if (text) |textSure| {
textFinal = @as([*c]const u8, @ptrCast(textSure)); textFinal = @as([*c]const u8, @ptrCast(textSure));