From 469901859907b2436ce9799d013488722f7be3a9 Mon Sep 17 00:00:00 2001 From: Stowy Date: Sun, 22 Dec 2024 11:49:53 +0100 Subject: [PATCH] Added first version of Jai bindings --- bindings/jai/.gitignore | 1 + bindings/jai/clay-jai/windows/clay.lib | Bin 0 -> 257844 bytes bindings/jai/generate.jai | 464 +++++++++++++++++++++++++ bindings/jai/module.jai | 5 + bindings/jai/source/clay.c | 2 + bindings/jai/windows.jai | 392 +++++++++++++++++++++ 6 files changed, 864 insertions(+) create mode 100644 bindings/jai/.gitignore create mode 100644 bindings/jai/clay-jai/windows/clay.lib create mode 100644 bindings/jai/generate.jai create mode 100644 bindings/jai/module.jai create mode 100644 bindings/jai/source/clay.c create mode 100644 bindings/jai/windows.jai diff --git a/bindings/jai/.gitignore b/bindings/jai/.gitignore new file mode 100644 index 0000000..329f3e5 --- /dev/null +++ b/bindings/jai/.gitignore @@ -0,0 +1 @@ +.build/ \ No newline at end of file diff --git a/bindings/jai/clay-jai/windows/clay.lib b/bindings/jai/clay-jai/windows/clay.lib new file mode 100644 index 0000000000000000000000000000000000000000..35da4f4d451c8a2e2f3e148fbfece233df971b89 GIT binary patch literal 257844 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 IlVHUE0XbOk0{{R3 literal 0 HcmV?d00001 diff --git a/bindings/jai/generate.jai b/bindings/jai/generate.jai new file mode 100644 index 0000000..e78776b --- /dev/null +++ b/bindings/jai/generate.jai @@ -0,0 +1,464 @@ +AT_COMPILE_TIME :: true; + +SOURCE_PATH :: "source"; + +#if AT_COMPILE_TIME { + #run,stallable { + Compiler.set_build_options_dc(.{do_output=false}); + options := Compiler.get_build_options(); + args := options.compile_time_command_line; + if !generate_bindings(args, options.minimum_os_version) { + Compiler.compiler_set_workspace_status(.FAILED); + } + } +} else { + #import "System"; + + main :: () { + set_working_directory(path_strip_filename(get_path_of_running_executable())); + if !generate_bindings(get_command_line_arguments(), #run get_build_options().minimum_os_version) { + exit(1); + } + } +} + + +Build_Type :: enum { + STATIC_LIBRARY; + DYNAMIC_LIBRARY; + EXECUTABLE; + OBJ_FILE; +} + +build_cpp_static_lib :: #bake_arguments build_cpp(type = .STATIC_LIBRARY); +build_cpp_dynamic_lib :: #bake_arguments build_cpp(type = .DYNAMIC_LIBRARY); +build_cpp_executable :: #bake_arguments build_cpp(type = .EXECUTABLE); + +// This is a modified version of the procedure from BuildCpp. It will assume a clang-like compiler if you add something to compiler_executable_path. +build_cpp :: ( + output_basename: string, + files: ..string, + type: Build_Type, + debug := false, + extra: [] string = .[], + library_files: [] string = .[], + target := OS, + compiler_executable_path := "", + ar_executable_path := "", + working_directory := "", + loc := #caller_location +) -> bool { + Basic.auto_release_temp(); + Basic.push_allocator(Basic.temp); + + arguments: [..] string; + + output_filename: string; + if target == .WINDOWS && compiler_executable_path == "" { + if #complete type == { + case .STATIC_LIBRARY; + output_filename = Basic.tprint("%.lib", output_basename); + case .DYNAMIC_LIBRARY; + output_filename = Basic.tprint("%.dll", output_basename); + case .EXECUTABLE; + output_filename = Basic.tprint("%.exe", output_basename); + case .OBJ_FILE; + output_filename = Basic.tprint("%.obj", output_basename); + } + + #if OS == .WINDOWS { + String.path_overwrite_separators(output_filename, #char "\\"); + + vc_path, linker_path := WindowsResources.find_visual_studio_in_a_ridiculous_garbage_way(); + + kit_root := WindowsResources.find_windows_kit_root(); + if !kit_root { + Compiler.compiler_report("Unable to find Windows Kit root; can't compile.\n", loc); + return false; + } + } else { + Compiler.compiler_report("Unable to find Visual Studio; can't compile.\n", loc); + vc_path, linker_path: string; + kit_root: string; + return false; // Visual studio is not available in non-windows OS. + } + + linker := String.join(linker_path, "\\", "cl.exe"); + Basic.array_add(*arguments, linker); + + Basic.array_add(*arguments, "/nologo"); + + // Include directories: + vc_include_path := String.join(vc_path, "\\..\\..\\include"); + kit_root_include := String.replace(kit_root, "Lib", "Include"); + Basic.array_add(*arguments, + Basic.tprint("/I%", vc_include_path), + Basic.tprint("/I%\\um", kit_root_include), + Basic.tprint("/I%\\ucrt", kit_root_include), + Basic.tprint("/I%\\shared", kit_root_include), + ); + + // Definitions: + Basic.array_add(*arguments, "/DWIN32"); + if debug { + Basic.array_add(*arguments, "/DDEBUG"); + } + + // Compiler options: + if debug { + Basic.array_add(*arguments, "/Od"); // Disable optimizations. + } else { + Basic.array_add(*arguments, + "/O2", // Maximize speed. + "/Oi", // Enable intrinsics. + ); + } + Basic.array_add(*arguments, "/W3"); + + if debug { + Basic.array_add(*arguments, + "/DEBUG", // Generate debug info. + "/Zi", // Generate pdb file. + Basic.tprint("/Fd%.pdb", output_basename), // Sets name of pdb file. + ); + } + + Basic.array_add(*arguments, + "-diagnostics:caret", + "-diagnostics:column" + ); + + Basic.array_add(*arguments, .. extra); + + // Add files: + objs: [..] string; + Basic.array_reserve(*objs, files.count); + for files { + src := String.copy_temporary_string(it); + String.path_overwrite_separators(src); + Basic.array_add(*arguments, src); + + Basic.array_add(*objs, Basic.tprint("%.obj", String.path_strip_extension(String.path_filename(it)))); + } + + // Make sure to cleanup the resulting obj files. + defer { + if type != .OBJ_FILE { + for objs File.file_delete(it); + } + + if type == .DYNAMIC_LIBRARY then File.file_delete(Basic.tprint("%.exp", output_basename)); + } + + if type == .STATIC_LIBRARY || type == .OBJ_FILE { + Basic.array_add(*arguments, "/c"); // Compile without linking. + } else { + Basic.array_add(*arguments, "/link"); + + // Linker options: + if type == .DYNAMIC_LIBRARY { + Basic.array_add(*arguments, "/DLL"); + } + Basic.array_add(*arguments, + "/MACHINE:AMD64", + Basic.tprint("/OUT:%", output_filename), + Basic.tprint("/libpath:%", vc_path), + Basic.tprint("/libpath:%\\um\\x64", kit_root), + Basic.tprint("/libpath:%\\ucrt\\x64", kit_root), + ); + } + + Basic.array_add(*arguments, .. library_files); + + Basic.log("%", Process.get_quoted_command_string(arguments)); + result, output_string, error_string := Process.run_command(..arguments, capture_and_return_output = true, print_captured_output = true, working_directory = working_directory); + + if result.exit_code { + Compiler.compiler_report(Basic.tprint("Compiler failed with exit code '%'.\n", result.exit_code), loc); + return false; + } + + if type == .STATIC_LIBRARY { + // Create library: + Basic.array_reset_keeping_memory(*arguments); + + librarian := String.join(linker_path, "\\lib.exe"); + + Basic.array_add(*arguments, librarian, "/nologo"); + Basic.array_add(*arguments, ..objs); + Basic.array_add(*arguments, Basic.tprint("/OUT:%", output_filename)); + + Basic.log("%", Process.get_quoted_command_string(arguments)); + result, output_string, error_string := Process.run_command(..arguments, capture_and_return_output = true, print_captured_output = true, working_directory = working_directory); + + if result.exit_code { + Compiler.compiler_report(Basic.tprint("Librarian failed with exit code '%'.\n", result.exit_code), loc); + return false; + } + } + } else { + if #complete type == { + case .STATIC_LIBRARY; + #if OS == .WINDOWS { + output_filename = Basic.tprint("%.lib", output_basename); + } else { + output_filename = Basic.tprint("%.a", output_basename); + } + + case .OBJ_FILE; + output_filename = Basic.tprint("%.o", output_basename); + case .DYNAMIC_LIBRARY; + if target == { + case .WINDOWS; output_filename = Basic.tprint("%.dll", output_basename); + case .MACOS; output_filename = Basic.tprint("%.dylib", output_basename); + case .LINUX; #through; + case .ANDROID; output_filename = Basic.tprint("%.so", output_basename); + case .NONE; #if OS == .WINDOWS then output_filename = Basic.tprint("%.dll", output_basename); else assert(false); + case; assert(false); + } + case .EXECUTABLE; + output_filename = Basic.copy_temporary_string(output_basename); + } + + #if OS == .WINDOWS { + String.path_overwrite_separators(output_filename, #char "\\"); + } + + compiler := compiler_executable_path; + ar := ar_executable_path; + if !compiler || (type == .STATIC_LIBRARY && !ar) { + is_cpp_project := false; + for files { + if String.ends_with(it, ".cpp") { + is_cpp_project = true; // Use c++ compiler, so we link the required c++ runtime libraries by default. + break; + } + } + + if !compiler { + if is_cpp_project { + // @Cleanup: Could be simplified to the following, but that currently triggers a compiler bug. -rluba, 2024-01-23 + // compiler = ifx to_string(getenv("CXX")) else "clang++"; + compiler = to_string(getenv("CXX")); + if !compiler compiler ="clang++"; + } else { + compiler = to_string(getenv("CC")); + if !compiler compiler ="clang"; + } + } + + if !ar ar = "ar"; + + } + + Basic.array_add(*arguments, compiler); + + if debug { + Basic.array_add(*arguments, "-g", "-Og"); + } else { + Basic.array_add(*arguments, "-O3"); + } + + Basic.array_add(*arguments, ..extra); + + if type == .STATIC_LIBRARY || type == .OBJ_FILE { + array_add(*arguments, "-c"); + } else { + if type == .DYNAMIC_LIBRARY { + array_add(*arguments, "-shared", "-fpic"); + } + + if target == .MACOS { + if type == { + case .DYNAMIC_LIBRARY; + array_add(*arguments, "-install_name", tprint("@rpath/%", output_filename)); + case .EXECUTABLE; + array_add(*arguments, "-rpath", "@loader_path"); + } + } + + array_add(*arguments, "-o", output_filename); + } + + // Add files: + objs: [..] string; + array_reserve(*objs, files.count); + for files { + src := copy_temporary_string(it); + String.path_overwrite_separators(src); + array_add(*arguments, src); + + array_add(*objs, tprint("%.o", String.path_basename(it))); + } + + // Make sure to cleanup the resulting obj files. + defer { + if type != .OBJ_FILE { + for objs File.file_delete(it); + } + } + + array_add(*arguments, .. library_files); + + log("%", Process.get_quoted_command_string(arguments)); + result, output_string, error_string := Process.run_command(..arguments, capture_and_return_output = true, print_captured_output = true, working_directory = working_directory); + + if result.exit_code { + Compiler.compiler_report(tprint("Compiler failed with exit code '%'.\n", result.exit_code), loc); + return false; + } + + if type == .STATIC_LIBRARY { + File.file_delete(output_filename); // ar only adds/updates the archive, but does not delete files from it. + + // Create library: + array_reset_keeping_memory(*arguments); + array_add(*arguments, + ar, + "-rc", // replace or insert files into the archive, do not warn if archive needs to be created. + output_filename, + ); + + array_add(*arguments, ..objs); + + // Run archiver command: + log("%", Process.get_quoted_command_string(arguments)); + result, output_string, error_string := Process.run_command(..arguments, capture_and_return_output = true, print_captured_output = true, working_directory = working_directory); + + if result.exit_code { + Compiler.compiler_report(tprint("Archive command failed with exit code '%'.\n", result.exit_code), loc); + return false; + } + } + } + + return true; +} + +enum_cpp_files :: (path: string, recursive:=false) -> [..] string { + files: [..] string; + + visitor :: (info: *FileUtils.File_Visit_Info, files: *[..] string) { + extension := String.path_extension(info.full_name); + if extension == "cpp" || extension == "c" { + Basic.array_add(files, String.copy_string(info.full_name)); + } + } + + FileUtils.visit_files(path, recursive=recursive, *files, visitor); + + return files; +} + +free_cpp_files :: (files: [] string) { + for files Basic.free(it); + Basic.array_free(files); +} + + +generate_bindings :: (args: [] string, minimum_os_version: type_of(Compiler.Build_Options.minimum_os_version)) -> bool { + compile := Basic.array_find(args, "-compile"); + compile_debug := Basic.array_find(args, "-debug"); + + if compile { + could_copy := FileUtils.copy_file("../../clay.h", "source/clay.h"); + if !could_copy then return false; + + source_file := Basic.tprint("%/clay.c", SOURCE_PATH); + + success := true; + #if OS == .WINDOWS { + File.make_directory_if_it_does_not_exist("clay-jai/windows", true); + + // Can't use this because clay doesn't support MSVC + success &&= build_cpp_static_lib( + "clay-jai/windows/clay", + source_file, + debug = compile_debug, + target=.NONE, + compiler_executable_path="clang", + ar_executable_path="llvm-ar", + ); + + // { + // command := Process.break_command_into_strings("clang -c -o clay-jai/windows/clay.lib -static source/clay.c"); + // result, out, error := Process.run_command(..command, capture_and_return_output = true); + + // write_string(out); + // if result.exit_code != 0 + // { + // write_string("Failed to build clay. Do you have clang installed ?\n"); + // write_string(error); + // success = false; + // } + // } + + // { + // command := Process.break_command_into_strings("clang -c -o clay-jai/windows/clay.dll -dynamic source/clay.c"); + // result, out, error := Process.run_command(..command, capture_and_return_output = true); + + // write_string(out); + // if result.exit_code != 0 + // { + // write_string("Failed to build clay. Do you have clang installed ?\n"); + // write_string(error); + // success = false; + // } + // } + } else { + // TODO MacOS + // TODO Linux + assert(false); + } + + if !success then return false; + } + + output_filename: string; + options: Generator.Generate_Bindings_Options; + { + using options; + + #if OS == .WINDOWS { + Basic.array_add(*libpaths, "clay-jai/windows"); + output_filename = "windows.jai"; + } else { + assert(false); + } + + Basic.array_add(*libnames, "clay"); + Basic.array_add(*include_paths, SOURCE_PATH); + Basic.array_add(*source_files, Basic.tprint("%/clay.h", SOURCE_PATH)); + Basic.array_add(*strip_prefixes, "Clay_"); + + auto_detect_enum_prefixes = true; + log_stripped_declarations = true; + generate_compile_time_struct_checks = false; + } + + could_generate := Generator.generate_bindings(options, output_filename); + + File.file_delete("source/clay.h"); + + return could_generate; +} + +#scope_file + +using Basic :: #import "Basic"; +Generator :: #import "Bindings_Generator"; +Compiler :: #import "Compiler"; +File :: #import "File"; +FileUtils :: #import "File_Utilities"; +BuildCpp :: #import "BuildCpp"; +Process :: #import "Process"; +String :: #import "String"; +WindowsResources :: #import "Windows_Resources"; + +#if OS == .WINDOWS { + Windows :: #import "Windows"; + getenv :: Windows.getenv; +} else { + Posix :: #import "POSIX"; + getenv :: Posix.getenv; +} diff --git a/bindings/jai/module.jai b/bindings/jai/module.jai new file mode 100644 index 0000000..c284510 --- /dev/null +++ b/bindings/jai/module.jai @@ -0,0 +1,5 @@ +#if OS == .WINDOWS { + #load "windows.jai"; +} else { + assert(false) +} \ No newline at end of file diff --git a/bindings/jai/source/clay.c b/bindings/jai/source/clay.c new file mode 100644 index 0000000..22259af --- /dev/null +++ b/bindings/jai/source/clay.c @@ -0,0 +1,2 @@ +#define CLAY_IMPLEMENTATION +#include "clay.h" \ No newline at end of file diff --git a/bindings/jai/windows.jai b/bindings/jai/windows.jai new file mode 100644 index 0000000..de200b1 --- /dev/null +++ b/bindings/jai/windows.jai @@ -0,0 +1,392 @@ +// +// This file was auto-generated using the following command: +// +// jai ./generate.jai - -compile +// + + + +// Utility Structs ------------------------- +// Note: Clay_String is not guaranteed to be null terminated. It may be if created from a literal C string, +// but it is also used to represent slices. +String :: struct { + length: s32; + chars: *u8; +} + +StringArray :: struct { + capacity: u32; + length: u32; + internalArray: *String; +} + +Arena :: struct { + label: String; + nextAllocation: u64; + capacity: u64; + memory: *u8; +} + +Dimensions :: struct { + width: float; + height: float; +} + +Vector2 :: struct { + x: float; + y: float; +} + +Color :: struct { + r: float; + g: float; + b: float; + a: float; +} + +BoundingBox :: struct { + x: float; + y: float; + width: float; + height: float; +} + +// baseId + offset = id +ElementId :: struct { + id: u32; + offset: u32; + baseId: u32; + stringId: String; +} + +CornerRadius :: struct { + topLeft: float; + topRight: float; + bottomLeft: float; + bottomRight: float; +} + +ElementConfigType :: enum s32 { + RECTANGLE :: 1; + BORDER_CONTAINER :: 2; + FLOATING_CONTAINER :: 4; + SCROLL_CONTAINER :: 8; + IMAGE :: 16; + TEXT :: 32; + CUSTOM :: 64; + + CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE :: RECTANGLE; + CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER :: BORDER_CONTAINER; + CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER :: FLOATING_CONTAINER; + CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER :: SCROLL_CONTAINER; + CLAY__ELEMENT_CONFIG_TYPE_IMAGE :: IMAGE; + CLAY__ELEMENT_CONFIG_TYPE_TEXT :: TEXT; + CLAY__ELEMENT_CONFIG_TYPE_CUSTOM :: CUSTOM; +} + +// Element Configs --------------------------- +// Layout +LayoutDirection :: enum s32 { + LEFT_TO_RIGHT :: 0; + TOP_TO_BOTTOM :: 1; + + CLAY_LEFT_TO_RIGHT :: LEFT_TO_RIGHT; + CLAY_TOP_TO_BOTTOM :: TOP_TO_BOTTOM; +} + +LayoutAlignmentX :: enum s32 { + LEFT :: 0; + RIGHT :: 1; + CENTER :: 2; + + CLAY_ALIGN_X_LEFT :: LEFT; + CLAY_ALIGN_X_RIGHT :: RIGHT; + CLAY_ALIGN_X_CENTER :: CENTER; +} + +LayoutAlignmentY :: enum s32 { + TOP :: 0; + BOTTOM :: 1; + CENTER :: 2; + + CLAY_ALIGN_Y_TOP :: TOP; + CLAY_ALIGN_Y_BOTTOM :: BOTTOM; + CLAY_ALIGN_Y_CENTER :: CENTER; +} + +SizingType :: enum s32 { + FIT :: 0; + GROW :: 1; + PERCENT :: 2; + FIXED :: 3; + + CLAY__SIZING_TYPE_FIT :: FIT; + CLAY__SIZING_TYPE_GROW :: GROW; + CLAY__SIZING_TYPE_PERCENT :: PERCENT; + CLAY__SIZING_TYPE_FIXED :: FIXED; +} + +ChildAlignment :: struct { + x: LayoutAlignmentX; + y: LayoutAlignmentY; +} + +SizingMinMax :: struct { + min: float; + max: float; +} + +SizingAxis :: struct { + union { + sizeMinMax: SizingMinMax; + sizePercent: float; + } + + type: SizingType; +} + +Sizing :: struct { + width: SizingAxis; + height: SizingAxis; +} + +Padding :: struct { + x: u16; + y: u16; +} + +LayoutConfig :: struct { + sizing: Sizing; + padding: Padding; + childGap: u16; + childAlignment: ChildAlignment; + layoutDirection: LayoutDirection; +} + +CLAY_LAYOUT_DEFAULT: LayoutConfig #elsewhere clay; + +// Rectangle +RectangleElementConfig :: struct { + color: Color; + cornerRadius: CornerRadius; +} + +// Text +TextElementConfigWrapMode :: enum s32 { + WORDS :: 0; + NEWLINES :: 1; + NONE :: 2; + + CLAY_TEXT_WRAP_WORDS :: WORDS; + CLAY_TEXT_WRAP_NEWLINES :: NEWLINES; + CLAY_TEXT_WRAP_NONE :: NONE; +} + +TextElementConfig :: struct { + textColor: Color; + fontId: u16; + fontSize: u16; + letterSpacing: u16; + lineHeight: u16; + wrapMode: TextElementConfigWrapMode; +} + +// Image +ImageElementConfig :: struct { + imageData: *void; + sourceDimensions: Dimensions; +} + +// Floating +FloatingAttachPointType :: enum s32 { + LEFT_TOP :: 0; + LEFT_CENTER :: 1; + LEFT_BOTTOM :: 2; + CENTER_TOP :: 3; + CENTER_CENTER :: 4; + CENTER_BOTTOM :: 5; + RIGHT_TOP :: 6; + RIGHT_CENTER :: 7; + RIGHT_BOTTOM :: 8; + + CLAY_ATTACH_POINT_LEFT_TOP :: LEFT_TOP; + CLAY_ATTACH_POINT_LEFT_CENTER :: LEFT_CENTER; + CLAY_ATTACH_POINT_LEFT_BOTTOM :: LEFT_BOTTOM; + CLAY_ATTACH_POINT_CENTER_TOP :: CENTER_TOP; + CLAY_ATTACH_POINT_CENTER_CENTER :: CENTER_CENTER; + CLAY_ATTACH_POINT_CENTER_BOTTOM :: CENTER_BOTTOM; + CLAY_ATTACH_POINT_RIGHT_TOP :: RIGHT_TOP; + CLAY_ATTACH_POINT_RIGHT_CENTER :: RIGHT_CENTER; + CLAY_ATTACH_POINT_RIGHT_BOTTOM :: RIGHT_BOTTOM; +} + +FloatingAttachPoints :: struct { + element: FloatingAttachPointType; + parent: FloatingAttachPointType; +} + +PointerCaptureMode :: enum s32 { + CAPTURE :: 0; + + PASSTHROUGH :: 1; + + CLAY_POINTER_CAPTURE_MODE_CAPTURE :: CAPTURE; + + CLAY_POINTER_CAPTURE_MODE_PASSTHROUGH :: PASSTHROUGH; +} + +FloatingElementConfig :: struct { + offset: Vector2; + expand: Dimensions; + zIndex: u16; + parentId: u32; + attachment: FloatingAttachPoints; + pointerCaptureMode: PointerCaptureMode; +} + +// Custom +CustomElementConfig :: struct { + customData: *void; +} + +// Scroll +ScrollElementConfig :: struct { + horizontal: bool; + vertical: bool; +} + +// Border +Border :: struct { + width: u32; + color: Color; +} + +BorderElementConfig :: struct { + left: Border; + right: Border; + top: Border; + bottom: Border; + betweenChildren: Border; + cornerRadius: CornerRadius; +} + +ElementConfigUnion :: union { + rectangleElementConfig: *RectangleElementConfig; + textElementConfig: *TextElementConfig; + imageElementConfig: *ImageElementConfig; + floatingElementConfig: *FloatingElementConfig; + customElementConfig: *CustomElementConfig; + scrollElementConfig: *ScrollElementConfig; + borderElementConfig: *BorderElementConfig; +} + +ElementConfig :: struct { + type: ElementConfigType; + config: ElementConfigUnion; +} + +// Miscellaneous Structs & Enums --------------------------------- +ScrollContainerData :: struct { + // Note: This is a pointer to the real internal scroll position, mutating it may cause a change in final layout. + // Intended for use with external functionality that modifies scroll position, such as scroll bars or auto scrolling. + scrollPosition: *Vector2; + scrollContainerDimensions: Dimensions; + contentDimensions: Dimensions; + config: ScrollElementConfig; + + // Indicates whether an actual scroll container matched the provided ID or if the default struct was returned. + found: bool; +} + +RenderCommandType :: enum s32 { + NONE :: 0; + RECTANGLE :: 1; + BORDER :: 2; + TEXT :: 3; + IMAGE :: 4; + SCISSOR_START :: 5; + SCISSOR_END :: 6; + CUSTOM :: 7; + + CLAY_RENDER_COMMAND_TYPE_NONE :: NONE; + CLAY_RENDER_COMMAND_TYPE_RECTANGLE :: RECTANGLE; + CLAY_RENDER_COMMAND_TYPE_BORDER :: BORDER; + CLAY_RENDER_COMMAND_TYPE_TEXT :: TEXT; + CLAY_RENDER_COMMAND_TYPE_IMAGE :: IMAGE; + CLAY_RENDER_COMMAND_TYPE_SCISSOR_START :: SCISSOR_START; + CLAY_RENDER_COMMAND_TYPE_SCISSOR_END :: SCISSOR_END; + CLAY_RENDER_COMMAND_TYPE_CUSTOM :: CUSTOM; +} + +RenderCommand :: struct { + boundingBox: BoundingBox; + config: ElementConfigUnion; + text: String; // TODO I wish there was a way to avoid having to have this on every render command + id: u32; + commandType: RenderCommandType; +} + +RenderCommandArray :: struct { + capacity: u32; + length: u32; + internalArray: *RenderCommand; +} + +PointerDataInteractionState :: enum s32 { + PRESSED_THIS_FRAME :: 0; + PRESSED :: 1; + RELEASED_THIS_FRAME :: 2; + RELEASED :: 3; + + CLAY_POINTER_DATA_PRESSED_THIS_FRAME :: PRESSED_THIS_FRAME; + CLAY_POINTER_DATA_PRESSED :: PRESSED; + CLAY_POINTER_DATA_RELEASED_THIS_FRAME :: RELEASED_THIS_FRAME; + CLAY_POINTER_DATA_RELEASED :: RELEASED; +} + +PointerData :: struct { + position: Vector2; + state: PointerDataInteractionState; +} + +// Function Forward Declarations --------------------------------- +// Public API functions --- +MinMemorySize :: (__args: ..Any) -> u32 #foreign clay "Clay_MinMemorySize"; +CreateArenaWithCapacityAndMemory :: (capacity: u32, offset: *void) -> Arena #foreign clay "Clay_CreateArenaWithCapacityAndMemory"; +SetPointerState :: (position: Vector2, pointerDown: bool) -> void #foreign clay "Clay_SetPointerState"; +Initialize :: (arena: Arena, layoutDimensions: Dimensions) -> void #foreign clay "Clay_Initialize"; +UpdateScrollContainers :: (enableDragScrolling: bool, scrollDelta: Vector2, deltaTime: float) -> void #foreign clay "Clay_UpdateScrollContainers"; +SetLayoutDimensions :: (dimensions: Dimensions) -> void #foreign clay "Clay_SetLayoutDimensions"; +BeginLayout :: (__args: ..Any) -> void #foreign clay "Clay_BeginLayout"; +EndLayout :: (__args: ..Any) -> RenderCommandArray #foreign clay "Clay_EndLayout"; +GetElementId :: (idString: String) -> ElementId #foreign clay "Clay_GetElementId"; +GetElementIdWithIndex :: (idString: String, index: u32) -> ElementId #foreign clay "Clay_GetElementIdWithIndex"; +Hovered :: (__args: ..Any) -> bool #foreign clay "Clay_Hovered"; +OnHover :: (onHoverFunction: #type (elementId: ElementId, pointerData: PointerData, userData: s64) -> void #c_call, userData: s64) -> void #foreign clay "Clay_OnHover"; +GetScrollContainerData :: (id: ElementId) -> ScrollContainerData #foreign clay "Clay_GetScrollContainerData"; +SetMeasureTextFunction :: (measureTextFunction: #type (text: *String, config: *TextElementConfig) -> Dimensions #c_call) -> void #foreign clay "Clay_SetMeasureTextFunction"; +SetQueryScrollOffsetFunction :: (queryScrollOffsetFunction: #type (elementId: u32) -> Vector2 #c_call) -> void #foreign clay "Clay_SetQueryScrollOffsetFunction"; +RenderCommandArray_Get :: (array: *RenderCommandArray, index: s32) -> *RenderCommand #foreign clay "Clay_RenderCommandArray_Get"; +SetDebugModeEnabled :: (enabled: bool) -> void #foreign clay "Clay_SetDebugModeEnabled"; +SetCullingEnabled :: (enabled: bool) -> void #foreign clay "Clay_SetCullingEnabled"; + +// Internal API functions required by macros +OpenElement :: (__args: ..Any) -> void #foreign clay "Clay__OpenElement"; +CloseElement :: (__args: ..Any) -> void #foreign clay "Clay__CloseElement"; + +ElementPostConfiguration :: (__args: ..Any) -> void #foreign clay "Clay__ElementPostConfiguration"; +AttachId :: (id: ElementId) -> void #foreign clay "Clay__AttachId"; +AttachLayoutConfig :: (config: *LayoutConfig) -> void #foreign clay "Clay__AttachLayoutConfig"; +AttachElementConfig :: (config: ElementConfigUnion, type: ElementConfigType) -> void #foreign clay "Clay__AttachElementConfig"; + +HashString :: (key: String, offset: u32, seed: u32) -> ElementId #foreign clay "Clay__HashString"; +Noop :: (__args: ..Any) -> void #foreign clay "Clay__Noop"; +OpenTextElement :: (text: String, textConfig: *TextElementConfig) -> void #foreign clay "Clay__OpenTextElement"; + +Clay__debugViewHighlightColor: Color #elsewhere clay; +Clay__debugViewWidth: u32 #elsewhere clay; +Clay__debugMaxElementsLatch: bool #elsewhere clay; + +#scope_file + +clay :: #library,no_dll "clay-jai/windows/clay";