From 92c4f733d49f79b8f011f9f951912c6985fc008c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Catarino=20Fran=C3=A7a?= Date: Tue, 16 Jan 2024 17:12:03 -0300 Subject: [PATCH] imgui example --- build.zig | 63 +- build.zig.zon | 8 +- src/examples/imgui.d | 91 + src/sokol/c/sokol_imgui.c | 10 + src/sokol/c/sokol_imgui.h | 3101 +++++++++++++++++++++++ src/sokol/imgui.d | 4943 +++++++++++++++++++++++++++++++++++++ 6 files changed, 8195 insertions(+), 21 deletions(-) create mode 100644 src/examples/imgui.d create mode 100644 src/sokol/c/sokol_imgui.c create mode 100644 src/sokol/c/sokol_imgui.h create mode 100644 src/sokol/imgui.d diff --git a/build.zig b/build.zig index 5cfcd9c..e372e25 100644 --- a/build.zig +++ b/build.zig @@ -149,6 +149,7 @@ pub fn buildLibSokol(b: *Build, options: LibSokolOptions) !*CompileStep { csrc_root ++ "sokol_glue.c", csrc_root ++ "sokol_debugtext.c", csrc_root ++ "sokol_shape.c", + csrc_root ++ "sokol_imgui.c", }; for (csources) |csrc| { lib.addCSourceFile(.{ @@ -156,6 +157,11 @@ pub fn buildLibSokol(b: *Build, options: LibSokolOptions) !*CompileStep { .flags = cflags, }); } + const cimgui = buildImgui(b, .{ .target = options.target, .optimize = options.optimize }); + for (cimgui.root_module.include_dirs.items) |dir| { + try lib.root_module.include_dirs.append(b.allocator, dir); + } + lib.linkLibrary(cimgui); if (sharedlib) b.installArtifact(lib); return lib; @@ -219,6 +225,7 @@ pub fn build(b: *Build) !void { // "debugtext-userfont", // "shapes", "user-data", + "imgui", }; b.getInstallStep().name = "sokol library"; inline for (examples) |example| { @@ -239,8 +246,6 @@ pub fn build(b: *Build) !void { b.getInstallStep().dependOn(&ldc.step); } buildShaders(b); - const ll = buildImgui(b, .{ .target = target, .optimize = optimize }); - b.installArtifact(ll); } // a separate step to compile shaders, expects the shader compiler in ../sokol-tools-bin/ @@ -502,6 +507,22 @@ fn ldcBuild(b: *Build, lib_sokol: *CompileStep, options: DCompileStep) !*RunStep // run the command var ldc_exec = b.addSystemCommand(cmds.items); ldc_exec.addArtifactArg(lib_sokol); + var it = lib_sokol.root_module.iterateDependencies(lib_sokol, false); + while (it.next()) |item| { + for (item.module.link_objects.items) |link_object| { + switch (link_object) { + .other_step => |compile_step| { + switch (compile_step.kind) { + .lib => { + ldc_exec.addArtifactArg(compile_step); + }, + else => {}, + } + }, + else => {}, + } + } + } ldc_exec.setName(options.name); const example_run = b.addSystemCommand(&.{b.pathJoin(&.{ b.install_path, "bin", options.name })}); @@ -546,41 +567,49 @@ fn buildImgui(b: *Build, options: struct { target: Build.ResolvedTarget, optimiz const imgui_cpp = b.dependency("imgui", .{}); const imgui_cpp_dir = imgui_cpp.path("").getPath(b); const cimgui = b.dependency("cimgui", .{}); - // const cimgui_dir = cimgui.path("").getPath(b); + const cimgui_dir = cimgui.path("").getPath(b); - const lib = b.addStaticLibrary(.{ - .name = "imgui", + const libimgui = b.addStaticLibrary(.{ + .name = "cimgui", .target = options.target, .optimize = options.optimize, }); - lib.addIncludePath(imgui_cpp.path("")); - lib.addIncludePath(cimgui.path("")); - lib.addCSourceFiles(.{ + if (libimgui.linkage == .static) + libimgui.pie = true + else + libimgui.root_module.pic = true; + libimgui.addIncludePath(.{ .path = cimgui_dir }); + libimgui.addIncludePath(.{ .path = imgui_cpp_dir }); + libimgui.addCSourceFiles(.{ .files = &.{ + b.pathJoin(&.{ cimgui_dir, "cimgui.cpp" }), b.pathJoin(&.{ imgui_cpp_dir, "imgui.cpp" }), b.pathJoin(&.{ imgui_cpp_dir, "imgui_draw.cpp" }), b.pathJoin(&.{ imgui_cpp_dir, "imgui_demo.cpp" }), b.pathJoin(&.{ imgui_cpp_dir, "imgui_widgets.cpp" }), b.pathJoin(&.{ imgui_cpp_dir, "imgui_tables.cpp" }), - // b.pathJoin(&.{ cimgui_dir, "cimgui.cpp" }), }, .flags = &.{ "-Wall", - "-Wformat", - "-Wpedantic", "-Wextra", - "-fno-exceptions", + "-Wformat", "-fno-rtti", + "-fno-exceptions", + "-Werror", + "-DIMGUI_DISABLE_OBSOLETE_FUNCTIONS=1", + "-fno-threadsafe-statics", }, }); - lib.root_module.sanitize_c = false; + libimgui.root_module.sanitize_c = false; + if (libimgui.rootModuleTarget().os.tag == .windows) + libimgui.linkSystemLibrary2("imm32", .{ .use_pkg_config = .no }); // https://github.com/ziglang/zig/issues/5312 - if (lib.rootModuleTarget().abi != .msvc) { + if (libimgui.rootModuleTarget().abi != .msvc) { // llvm-libcxx + llvm-libunwind + os-libc - lib.linkLibCpp(); + libimgui.linkLibCpp(); } else { - lib.linkLibC(); + libimgui.linkLibC(); } - return lib; + return libimgui; } diff --git a/build.zig.zon b/build.zig.zon index 85ee106..c19a732 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -13,12 +13,12 @@ // .hash = "1220194ac6476adaed11b30299a8abdd593eb7ae6d368bf6832d7fe6a604f12cae4f", // }, .cimgui = .{ - .url = "git+https://github.com/cimgui/cimgui#831f155f605c0ef3ad2e2bc20dae298cdb6f5779", - .hash = "1220abb48ac358308cc4db0603dc92dcc1452b9a99026c7dbca0766f88424a4725c6", + .url = "git+https://github.com/kassane/cimgui#f5b64afa65549d5e5ca65b003a443030ead23c9b", + .hash = "1220e6183fb9559dbfafe58d7fab20f1c330bee32342205815aa10553134ff9f9302", }, .imgui = .{ - .url = "git+https://github.com/ocornut/imgui#6228c2e1ec7ef21ca1809579c055ed34540dedb0", - .hash = "12205a78270c1c77b8996639cb35adb6b63265aa31143f51ee207cb4fe90afc7d55d", + .url = "git+https://github.com/ocornut/imgui#5fdcdf7080aade03b30f742dd9369172460fcfd7", + .hash = "12202af0db41b79a4c7904950269b5e33b7d48f50aae042e334cb8d717a5a2caf48d", }, }, } diff --git a/src/examples/imgui.d b/src/examples/imgui.d new file mode 100644 index 0000000..efe6325 --- /dev/null +++ b/src/examples/imgui.d @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// imgui.d +// +// Using cimgui+sokol, based on https://github.com/floooh/cimgui-sokol-starterkit +//------------------------------------------------------------------------------ + +module examples.imgui; + +import sg = sokol.gfx; +import sgapp = sokol.glue; +import sapp = sokol.app; +import imgui = sokol.imgui; +import log = sokol.log; + +extern (C): + +struct State{ + sg.PassAction pass_action = { + colors: [{ + load_action: sg.LoadAction.Clear, + clear_value: { r: 0.0, g: 0.5, b: 1.0, a: 1.0 }, + }] + }; +} +static State state; + +void init() +{ + sg.Desc gfx = { + context: sgapp.context(), + logger: {func: &log.slog_func} + }; + sg.setup(gfx); + imgui.simgui_desc_t imgui_desc = {0}; + imgui.simgui_setup(&imgui_desc); +} + +void frame() +{ + imgui.simgui_frame_desc_t imgui_desc = { + width: sapp.width(), + height: sapp.height(), + delta_time: sapp.frameDuration(), + dpi_scale: sapp.dpiScale(), + }; + imgui.simgui_new_frame(&imgui_desc); + + /*=== UI CODE STARTS HERE ===*/ + const imgui.ImVec2 window_pos = {0,0}; + const imgui.ImVec2 window_pos_pivot = {0,0}; + const imgui.ImVec2 window_size = {400, 100}; + imgui.igSetNextWindowPos(window_pos, imgui.ImGuiCond_.ImGuiCond_Once, window_pos_pivot); + imgui.igSetNextWindowSize(window_size, imgui.ImGuiCond_.ImGuiCond_Once); + imgui.igBegin("Hello Dear ImGui!".ptr, null, imgui.ImGuiWindowFlags_.ImGuiWindowFlags_None); + const(char)* label = "Background"; + float[3] rgb = [state.pass_action.colors[0].clear_value.r, state.pass_action.colors[0].clear_value.g, state.pass_action.colors[0].clear_value.b]; + imgui.igColorEdit3(label, rgb, imgui.ImGuiColorEditFlags_.ImGuiColorEditFlags_None); + imgui.igEnd(); + /*=== UI CODE ENDS HERE ===*/ + + sg.beginDefaultPass(state.pass_action, sapp.width(), sapp.height()); + sg.endPass(); + sg.commit(); +} + +void event(const(sapp.Event)* ev) +{ + imgui.simgui_handle_event(ev); +} + +void cleanup() +{ + imgui.simgui_shutdown(); + sg.shutdown(); +} + +void main() +{ + sapp.Desc runner = { + window_title: "imgui.d", + init_cb: &init, + frame_cb: &frame, + cleanup_cb: &cleanup, + event_cb: &event, + width: 800, + height: 600, + icon: {sokol_default: true}, + logger: {func: &log.func} + }; + sapp.run(runner); +} diff --git a/src/sokol/c/sokol_imgui.c b/src/sokol/c/sokol_imgui.c new file mode 100644 index 0000000..9d400bc --- /dev/null +++ b/src/sokol/c/sokol_imgui.c @@ -0,0 +1,10 @@ +#if defined(IMPL) +#define SOKOL_IMGUI_IMPL +#endif +#include "sokol_app.h" +#include "sokol_gfx.h" +#include "sokol_log.h" +#include "sokol_glue.h" +#define CIMGUI_DEFINE_ENUMS_AND_STRUCTS +#include +#include "sokol_imgui.h" diff --git a/src/sokol/c/sokol_imgui.h b/src/sokol/c/sokol_imgui.h new file mode 100644 index 0000000..83af392 --- /dev/null +++ b/src/sokol/c/sokol_imgui.h @@ -0,0 +1,3101 @@ +#if defined(SOKOL_IMPL) && !defined(SOKOL_IMGUI_IMPL) +#define SOKOL_IMGUI_IMPL +#endif +#ifndef SOKOL_IMGUI_INCLUDED +/* + sokol_imgui.h -- drop-in Dear ImGui renderer/event-handler for sokol_gfx.h + + Project URL: https://github.com/floooh/sokol + + Do this: + #define SOKOL_IMPL or + #define SOKOL_IMGUI_IMPL + + before you include this file in *one* C or C++ file to create the + implementation. + + NOTE that the implementation can be compiled either as C++ or as C. + When compiled as C++, sokol_imgui.h will directly call into the + Dear ImGui C++ API. When compiled as C, sokol_imgui.h will call + cimgui.h functions instead. + + NOTE that the formerly separate header sokol_cimgui.h has been + merged into sokol_imgui.h + + The following defines are used by the implementation to select the + platform-specific embedded shader code (these are the same defines as + used by sokol_gfx.h and sokol_app.h): + + SOKOL_GLCORE33 + SOKOL_GLES3 + SOKOL_D3D11 + SOKOL_METAL + SOKOL_WGPU + + Optionally provide the following configuration defines before including the + implementation: + + SOKOL_IMGUI_NO_SOKOL_APP - don't depend on sokol_app.h (see below for details) + + Optionally provide the following macros before including the implementation + to override defaults: + + SOKOL_ASSERT(c) - your own assert macro (default: assert(c)) + SOKOL_IMGUI_API_DECL- public function declaration prefix (default: extern) + SOKOL_API_DECL - same as SOKOL_IMGUI_API_DECL + SOKOL_API_IMPL - public function implementation prefix (default: -) + + If sokol_imgui.h is compiled as a DLL, define the following before + including the declaration or implementation: + + SOKOL_DLL + + On Windows, SOKOL_DLL will define SOKOL_IMGUI_API_DECL as __declspec(dllexport) + or __declspec(dllimport) as needed. + + Include the following headers before sokol_imgui.h (both before including + the declaration and implementation): + + sokol_gfx.h + sokol_app.h (except SOKOL_IMGUI_NO_SOKOL_APP) + + Additionally, include the following headers before including the + implementation: + + If the implementation is compiled as C++: + imgui.h + + If the implementation is compiled as C: + cimgui.h + + + FEATURE OVERVIEW: + ================= + sokol_imgui.h implements the initialization, rendering and event-handling + code for Dear ImGui (https://github.com/ocornut/imgui) on top of + sokol_gfx.h and (optionally) sokol_app.h. + + The sokol_app.h dependency is optional and used for input event handling. + If you only use sokol_gfx.h but not sokol_app.h in your application, + define SOKOL_IMGUI_NO_SOKOL_APP before including the implementation + of sokol_imgui.h, this will remove any dependency to sokol_app.h, but + you must feed input events into Dear ImGui yourself. + + sokol_imgui.h is not thread-safe, all calls must be made from the + same thread where sokol_gfx.h is running. + + HOWTO: + ====== + + --- To initialize sokol-imgui, call: + + simgui_setup(const simgui_desc_t* desc) + + This will initialize Dear ImGui and create sokol-gfx resources + (two buffers for vertices and indices, a font texture and a pipeline- + state-object). + + Use the following simgui_desc_t members to configure behaviour: + + int max_vertices + The maximum number of vertices used for UI rendering, default is 65536. + sokol-imgui will use this to compute the size of the vertex- + and index-buffers allocated via sokol_gfx.h + + int image_pool_size + Number of simgui_image_t objects which can be alive at the same time. + The default is 256. + + sg_pixel_format color_format + The color pixel format of the render pass where the UI + will be rendered. The default (0) matches sokoL_gfx.h's + default pass. + + sg_pixel_format depth_format + The depth-buffer pixel format of the render pass where + the UI will be rendered. The default (0) matches + sokol_gfx.h's default pass depth format. + + int sample_count + The MSAA sample-count of the render pass where the UI + will be rendered. The default (0) matches sokol_gfx.h's + default pass sample count. + + const char* ini_filename + Sets this path as ImGui::GetIO().IniFilename where ImGui will store + and load UI persistency data. By default this is 0, so that Dear ImGui + will not preserve state between sessions (and also won't do + any filesystem calls). Also see the ImGui functions: + - LoadIniSettingsFromMemory() + - SaveIniSettingsFromMemory() + These functions give you explicit control over loading and saving + UI state while using your own filesystem wrapper functions (in this + case keep simgui_desc.ini_filename zero) + + bool no_default_font + Set this to true if you don't want to use ImGui's default + font. In this case you need to initialize the font + yourself after simgui_setup() is called. + + bool disable_paste_override + If set to true, sokol_imgui.h will not 'emulate' a Dear Imgui + clipboard paste action on SAPP_EVENTTYPE_CLIPBOARD_PASTED event. + This is mainly a hack/workaround to allow external workarounds + for making copy/paste work on the web platform. In general, + copy/paste support isn't properly fleshed out in sokol_imgui.h yet. + + bool disable_set_mouse_cursor + If true, sokol_imgui.h will not control the mouse cursor type + by calling sapp_set_mouse_cursor(). + + bool disable_windows_resize_from_edges + If true, windows can only be resized from the bottom right corner. + The default is false, meaning windows can be resized from edges. + + bool write_alpha_channel + Set this to true if you want alpha values written to the + framebuffer. By default this behavior is disabled to prevent + undesired behavior on platforms like the web where the canvas is + always alpha-blended with the background. + + simgui_allocator_t allocator + Used to override memory allocation functions. See further below + for details. + + simgui_logger_t logger + A user-provided logging callback. Note that without logging + callback, sokol-imgui will be completely silent! + See the section about ERROR REPORTING AND LOGGING below + for more details. + + --- At the start of a frame, call: + + simgui_new_frame(&(simgui_frame_desc_t){ + .width = ..., + .height = ..., + .delta_time = ..., + .dpi_scale = ... + }); + + 'width' and 'height' are the dimensions of the rendering surface, + passed to ImGui::GetIO().DisplaySize. + + 'delta_time' is the frame duration passed to ImGui::GetIO().DeltaTime. + + 'dpi_scale' is the current DPI scale factor, if this is left zero-initialized, + 1.0f will be used instead. Typical values for dpi_scale are >= 1.0f. + + For example, if you're using sokol_app.h and render to the default framebuffer: + + simgui_new_frame(&(simgui_frame_desc_t){ + .width = sapp_width(), + .height = sapp_height(), + .delta_time = sapp_frame_duration(), + .dpi_scale = sapp_dpi_scale() + }); + + --- at the end of the frame, before the sg_end_pass() where you + want to render the UI, call: + + simgui_render() + + This will first call ImGui::Render(), and then render ImGui's draw list + through sokol_gfx.h + + --- if you're using sokol_app.h, from inside the sokol_app.h event callback, + call: + + bool simgui_handle_event(const sapp_event* ev); + + The return value is the value of ImGui::GetIO().WantCaptureKeyboard, + if this is true, you might want to skip keyboard input handling + in your own event handler. + + If you want to use the ImGui functions for checking if a key is pressed + (e.g. ImGui::IsKeyPressed()) the following helper function to map + an sapp_keycode to an ImGuiKey value may be useful: + + int simgui_map_keycode(sapp_keycode c); + + Note that simgui_map_keycode() can be called outside simgui_setup()/simgui_shutdown(). + + --- finally, on application shutdown, call + + simgui_shutdown() + + + ON USER-PROVIDED IMAGES AND SAMPLERS + ==================================== + To render your own images via ImGui::Image(), first create an simgui_image_t + object from a sokol-gfx image and sampler object. + + // create a sokol-imgui image object which associates an sg_image with an sg_sampler + simgui_image_t simgui_img = simgui_make_image(&(simgui_image_desc_t){ + .image = sg_make_image(...), + .sampler = sg_make_sampler(...), + }); + + // convert the returned image handle into a ImTextureID handle + ImTextureID tex_id = simgui_imtextureid(simgui_img); + + // use the ImTextureID handle in Dear ImGui calls: + ImGui::Image(tex_id, ...); + + simgui_image_t objects are small and cheap (literally just the image and sampler + handle). + + You can omit the sampler handle in the simgui_make_image() call, in this case a + default sampler will be used with nearest-filtering and clamp-to-edge. + + Trying to render with an invalid simgui_image_t handle will render a small 8x8 + white default texture instead. + + To destroy a sokol-imgui image object, call + + simgui_destroy_image(simgui_img); + + But please be aware that the image object needs to be around until simgui_render() is called + in a frame (if this turns out to be too much of a hassle we could introduce some sort + of garbage collection where destroyed simgui_image_t objects are kept around until + the simgui_render() call). + + You can call: + + simgui_image_desc_t desc = simgui_query_image_desc(img) + + ...to get the original desc struct, useful if you need to get the sokol-gfx image + and sampler handle of the simgui_image_t object. + + You can convert an ImTextureID back into an simgui_image_t handle: + + simgui_image_t img = simgui_image_from_imtextureid(tex_id); + + + MEMORY ALLOCATION OVERRIDE + ========================== + You can override the memory allocation functions at initialization time + like this: + + void* my_alloc(size_t size, void* user_data) { + return malloc(size); + } + + void my_free(void* ptr, void* user_data) { + free(ptr); + } + + ... + simgui_setup(&(simgui_desc_t){ + // ... + .allocator = { + .alloc_fn = my_alloc, + .free_fn = my_free, + .user_data = ...; + } + }); + ... + + If no overrides are provided, malloc and free will be used. + + This only affects memory allocation calls done by sokol_imgui.h + itself though, not any allocations in Dear ImGui. + + + ERROR REPORTING AND LOGGING + =========================== + To get any logging information at all you need to provide a logging callback in the setup call + the easiest way is to use sokol_log.h: + + #include "sokol_log.h" + + simgui_setup(&(simgui_desc_t){ + .logger.func = slog_func + }); + + To override logging with your own callback, first write a logging function like this: + + void my_log(const char* tag, // e.g. 'simgui' + uint32_t log_level, // 0=panic, 1=error, 2=warn, 3=info + uint32_t log_item_id, // SIMGUI_LOGITEM_* + const char* message_or_null, // a message string, may be nullptr in release mode + uint32_t line_nr, // line number in sokol_imgui.h + const char* filename_or_null, // source filename, may be nullptr in release mode + void* user_data) + { + ... + } + + ...and then setup sokol-imgui like this: + + simgui_setup(&(simgui_desc_t){ + .logger = { + .func = my_log, + .user_data = my_user_data, + } + }); + + The provided logging function must be reentrant (e.g. be callable from + different threads). + + If you don't want to provide your own custom logger it is highly recommended to use + the standard logger in sokol_log.h instead, otherwise you won't see any warnings or + errors. + + + IMGUI EVENT HANDLING + ==================== + You can call these functions from your platform's events to handle ImGui events + when SOKOL_IMGUI_NO_SOKOL_APP is defined. + + E.g. mouse position events can be dispatched like this: + + simgui_add_mouse_pos_event(100, 200); + + Key events require a mapping function to convert your platform's key values to ImGuiKey's: + + int map_keycode(int keycode) { + // Your mapping logic here... + } + simgui_add_key_event(map_keycode, keycode, true); + + Take note that modifiers (shift, ctrl, etc.) must be updated manually. + + If sokol_app is being used, ImGui events are handled for you. + + + LICENSE + ======= + + zlib/libpng license + + Copyright (c) 2018 Andre Weissflog + + This software is provided 'as-is', without any express or implied warranty. + In no event will the authors be held liable for any damages arising from the + use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software in a + product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ +#define SOKOL_IMGUI_INCLUDED (1) +#include +#include +#include // size_t + +#if !defined(SOKOL_GFX_INCLUDED) +#error "Please include sokol_gfx.h before sokol_imgui.h" +#endif +#if !defined(SOKOL_IMGUI_NO_SOKOL_APP) && !defined(SOKOL_APP_INCLUDED) +#error "Please include sokol_app.h before sokol_imgui.h" +#endif + +#if defined(SOKOL_API_DECL) && !defined(SOKOL_IMGUI_API_DECL) +#define SOKOL_IMGUI_API_DECL SOKOL_API_DECL +#endif +#ifndef SOKOL_IMGUI_API_DECL +#if defined(_WIN32) && defined(SOKOL_DLL) && defined(SOKOL_IMGUI_IMPL) +#define SOKOL_IMGUI_API_DECL __declspec(dllexport) +#elif defined(_WIN32) && defined(SOKOL_DLL) +#define SOKOL_IMGUI_API_DECL __declspec(dllimport) +#else +#define SOKOL_IMGUI_API_DECL extern +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + SIMGUI_INVALID_ID = 0, +}; + +/* + simgui_image_t + + A combined image-sampler pair used to inject custom images and samplers into Dear ImGui. + + Create with simgui_make_image(), and convert to an ImTextureID handle via + simgui_imtextureid(). +*/ +typedef struct simgui_image_t { uint32_t id; } simgui_image_t; + +/* + simgui_image_desc_t + + Descriptor struct for simgui_make_image(). You must provide + at least an sg_image handle. Keeping the sg_sampler handle + zero-initialized will select the builtin default sampler + which uses linear filtering. +*/ +typedef struct simgui_image_desc_t { + sg_image image; + sg_sampler sampler; +} simgui_image_desc_t; + +/* + simgui_log_item + + An enum with a unique item for each log message, warning, error + and validation layer message. +*/ +#define _SIMGUI_LOG_ITEMS \ + _SIMGUI_LOGITEM_XMACRO(OK, "Ok") \ + _SIMGUI_LOGITEM_XMACRO(MALLOC_FAILED, "memory allocation failed") \ + _SIMGUI_LOGITEM_XMACRO(IMAGE_POOL_EXHAUSTED, "image pool exhausted") \ + +#define _SIMGUI_LOGITEM_XMACRO(item,msg) SIMGUI_LOGITEM_##item, +typedef enum simgui_log_item_t { + _SIMGUI_LOG_ITEMS +} simgui_log_item_t; +#undef _SIMGUI_LOGITEM_XMACRO + +/* + simgui_allocator_t + + Used in simgui_desc_t to provide custom memory-alloc and -free functions + to sokol_imgui.h. If memory management should be overridden, both the + alloc_fn and free_fn function must be provided (e.g. it's not valid to + override one function but not the other). +*/ +typedef struct simgui_allocator_t { + void* (*alloc_fn)(size_t size, void* user_data); + void (*free_fn)(void* ptr, void* user_data); + void* user_data; +} simgui_allocator_t; + +/* + simgui_logger + + Used in simgui_desc_t to provide a logging function. Please be aware + that without logging function, sokol-imgui will be completely + silent, e.g. it will not report errors, warnings and + validation layer messages. For maximum error verbosity, + compile in debug mode (e.g. NDEBUG *not* defined) and install + a logger (for instance the standard logging function from sokol_log.h). +*/ +typedef struct simgui_logger_t { + void (*func)( + const char* tag, // always "simgui" + uint32_t log_level, // 0=panic, 1=error, 2=warning, 3=info + uint32_t log_item_id, // SIMGUI_LOGITEM_* + const char* message_or_null, // a message string, may be nullptr in release mode + uint32_t line_nr, // line number in sokol_imgui.h + const char* filename_or_null, // source filename, may be nullptr in release mode + void* user_data); + void* user_data; +} simgui_logger_t; + +typedef struct simgui_desc_t { + int max_vertices; // default: 65536 + int image_pool_size; // default: 256 + sg_pixel_format color_format; + sg_pixel_format depth_format; + int sample_count; + const char* ini_filename; + bool no_default_font; + bool disable_paste_override; // if true, don't send Ctrl-V on EVENTTYPE_CLIPBOARD_PASTED + bool disable_set_mouse_cursor; // if true, don't control the mouse cursor type via sapp_set_mouse_cursor() + bool disable_windows_resize_from_edges; // if true, only resize edges from the bottom right corner + bool write_alpha_channel; // if true, alpha values get written into the framebuffer + simgui_allocator_t allocator; // optional memory allocation overrides (default: malloc/free) + simgui_logger_t logger; // optional log function override +} simgui_desc_t; + +typedef struct simgui_frame_desc_t { + int width; + int height; + double delta_time; + float dpi_scale; +} simgui_frame_desc_t; + +SOKOL_IMGUI_API_DECL void simgui_setup(const simgui_desc_t* desc); +SOKOL_IMGUI_API_DECL void simgui_new_frame(const simgui_frame_desc_t* desc); +SOKOL_IMGUI_API_DECL void simgui_render(void); +SOKOL_IMGUI_API_DECL simgui_image_t simgui_make_image(const simgui_image_desc_t* desc); +SOKOL_IMGUI_API_DECL void simgui_destroy_image(simgui_image_t img); +SOKOL_IMGUI_API_DECL simgui_image_desc_t simgui_query_image_desc(simgui_image_t img); +SOKOL_IMGUI_API_DECL void* simgui_imtextureid(simgui_image_t img); +SOKOL_IMGUI_API_DECL simgui_image_t simgui_image_from_imtextureid(void* imtextureid); +SOKOL_IMGUI_API_DECL void simgui_add_focus_event(bool focus); +SOKOL_IMGUI_API_DECL void simgui_add_mouse_pos_event(float x, float y); +SOKOL_IMGUI_API_DECL void simgui_add_touch_pos_event(float x, float y); +SOKOL_IMGUI_API_DECL void simgui_add_mouse_button_event(int mouse_button, bool down); +SOKOL_IMGUI_API_DECL void simgui_add_mouse_wheel_event(float wheel_x, float wheel_y); +SOKOL_IMGUI_API_DECL void simgui_add_key_event(int (*map_keycode)(int), int keycode, bool down); +SOKOL_IMGUI_API_DECL void simgui_add_input_character(uint32_t c); +SOKOL_IMGUI_API_DECL void simgui_add_input_characters_utf8(const char* c); +SOKOL_IMGUI_API_DECL void simgui_add_touch_button_event(int mouse_button, bool down); +#if !defined(SOKOL_IMGUI_NO_SOKOL_APP) +SOKOL_IMGUI_API_DECL bool simgui_handle_event(const sapp_event* ev); +SOKOL_IMGUI_API_DECL int simgui_map_keycode(sapp_keycode keycode); // returns ImGuiKey_* +#endif +SOKOL_IMGUI_API_DECL void simgui_shutdown(void); + +#ifdef __cplusplus +} // extern "C" + +// reference-based equivalents for C++ +inline void simgui_setup(const simgui_desc_t& desc) { return simgui_setup(&desc); } +inline simgui_image_t simgui_make_image(const simgui_image_desc_t& desc) { return simgui_make_image(&desc); } +inline void simgui_new_frame(const simgui_frame_desc_t& desc) { return simgui_new_frame(&desc); } + +#endif +#endif /* SOKOL_IMGUI_INCLUDED */ + +//-- IMPLEMENTATION ------------------------------------------------------------ +#ifdef SOKOL_IMGUI_IMPL +#define SOKOL_IMGUI_IMPL_INCLUDED (1) + +#if defined(SOKOL_MALLOC) || defined(SOKOL_CALLOC) || defined(SOKOL_FREE) +#error "SOKOL_MALLOC/CALLOC/FREE macros are no longer supported, please use simgui_desc_t.allocator to override memory allocation functions" +#endif + +#if defined(__cplusplus) + #if !defined(IMGUI_VERSION) + #error "Please include imgui.h before the sokol_imgui.h implementation" + #endif +#else + #if !defined(CIMGUI_INCLUDED) + #error "Please include cimgui.h before the sokol_imgui.h implementation" + #endif +#endif + +#include // memset +#include // malloc/free + +#if defined(__EMSCRIPTEN__) && !defined(SOKOL_DUMMY_BACKEND) +#include +#endif + +#ifndef SOKOL_API_IMPL +#define SOKOL_API_IMPL +#endif +#ifndef SOKOL_DEBUG + #ifndef NDEBUG + #define SOKOL_DEBUG + #endif +#endif +#ifndef SOKOL_ASSERT + #include + #define SOKOL_ASSERT(c) assert(c) +#endif +#ifndef _SOKOL_PRIVATE + #if defined(__GNUC__) || defined(__clang__) + #define _SOKOL_PRIVATE __attribute__((unused)) static + #else + #define _SOKOL_PRIVATE static + #endif +#endif + +#define _SIMGUI_INIT_COOKIE (0xBABEBABE) +#define _SIMGUI_INVALID_SLOT_INDEX (0) +#define _SIMGUI_SLOT_SHIFT (16) +#define _SIMGUI_MAX_POOL_SIZE (1<<_SIMGUI_SLOT_SHIFT) +#define _SIMGUI_SLOT_MASK (_SIMGUI_MAX_POOL_SIZE-1) + +// helper macros and constants +#define _simgui_def(val, def) (((val) == 0) ? (def) : (val)) + +typedef struct { + ImVec2 disp_size; + uint8_t _pad_8[8]; +} _simgui_vs_params_t; + +typedef enum { + _SIMGUI_RESOURCESTATE_INITIAL, + _SIMGUI_RESOURCESTATE_ALLOC, + _SIMGUI_RESOURCESTATE_VALID, + _SIMGUI_RESOURCESTATE_FAILED, + _SIMGUI_RESOURCESTATE_INVALID, + _SIMGUI_RESOURCESTATE_FORCE_U32 = 0x7FFFFFFF +} _simgui_resource_state; + +typedef struct { + uint32_t id; + _simgui_resource_state state; +} _simgui_slot_t; + +typedef struct { + int size; + int queue_top; + uint32_t* gen_ctrs; + int* free_queue; +} _simgui_pool_t; + +typedef struct { + _simgui_slot_t slot; + sg_image image; + sg_sampler sampler; + sg_pipeline pip; // this will either be _simgui.def_pip or _simgui.pip_unfilterable +} _simgui_image_t; + +typedef struct { + _simgui_pool_t pool; + _simgui_image_t* items; +} _simgui_image_pool_t; + +typedef struct { + uint32_t init_cookie; + simgui_desc_t desc; + float cur_dpi_scale; + sg_buffer vbuf; + sg_buffer ibuf; + sg_image font_img; + sg_sampler font_smp; + simgui_image_t default_font; + sg_image def_img; // used as default image for user images + sg_sampler def_smp; // used as default sampler for user images + sg_shader def_shd; + sg_pipeline def_pip; + // separate shader and pipeline for unfilterable user images + sg_shader shd_unfilterable; + sg_pipeline pip_unfilterable; + sg_range vertices; + sg_range indices; + bool is_osx; + _simgui_image_pool_t image_pool; +} _simgui_state_t; +static _simgui_state_t _simgui; + +/* + Embedded source code compiled with: + + sokol-shdc -i simgui.glsl -o simgui.h -l glsl330:glsl300es:hlsl4:metal_macos:metal_ios:metal_sim:wgpu -b + + (not that for Metal and D3D11 byte code, sokol-shdc must be run + on macOS and Windows) + + @vs vs + uniform vs_params { + vec2 disp_size; + }; + in vec2 position; + in vec2 texcoord0; + in vec4 color0; + out vec2 uv; + out vec4 color; + void main() { + gl_Position = vec4(((position/disp_size)-0.5)*vec2(2.0,-2.0), 0.5, 1.0); + uv = texcoord0; + color = color0; + } + @end + + @fs fs + uniform texture2D tex; + uniform sampler smp; + in vec2 uv; + in vec4 color; + out vec4 frag_color; + void main() { + frag_color = texture(sampler2D(tex, smp), uv) * color; + } + @end + + @program simgui vs fs +*/ +#if defined(SOKOL_GLCORE33) +static const char _simgui_vs_source_glsl330[341] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, + 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, + 0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, + 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, + 0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, + 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79, + 0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31, + 0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f, + 0x72,0x64,0x30,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, + 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, + 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28, + 0x28,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x2f,0x20,0x76,0x73,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x78,0x79,0x29,0x20,0x2d,0x20, + 0x76,0x65,0x63,0x32,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x76,0x65,0x63, + 0x32,0x28,0x32,0x2e,0x30,0x2c,0x20,0x2d,0x32,0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e, + 0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x20, + 0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b, + 0x0a,0x7d,0x0a,0x0a,0x00, +}; +static const char _simgui_fs_source_glsl330[177] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, + 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, + 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, + 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, + 0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a, + 0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74, + 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20, + 0x75,0x76,0x29,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a, + 0x00, +}; +#elif defined(SOKOL_GLES3) +static const char _simgui_vs_source_glsl300es[344] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, + 0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f, + 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29, + 0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a, + 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x65,0x78, + 0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f, + 0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, + 0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65, + 0x63,0x34,0x28,0x28,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x2f,0x20, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x78,0x79,0x29, + 0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20, + 0x76,0x65,0x63,0x32,0x28,0x32,0x2e,0x30,0x2c,0x20,0x2d,0x32,0x2e,0x30,0x29,0x2c, + 0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x75,0x76,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +}; +static const char _simgui_fs_source_glsl300es[250] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, + 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, + 0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69, + 0x6f,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x69,0x6e,0x74,0x3b,0x0a,0x0a,0x75, + 0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x73,0x61,0x6d, + 0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a, + 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x68,0x69,0x67,0x68,0x70,0x20, + 0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b, + 0x0a,0x69,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x32,0x20,0x75, + 0x76,0x3b,0x0a,0x69,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x34, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61, + 0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f, + 0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28, + 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x29,0x20,0x2a,0x20,0x63, + 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +}; +#elif defined(SOKOL_METAL) +static const uint8_t _simgui_vs_bytecode_metal_macos[3052] = { + 0x4d,0x54,0x4c,0x42,0x01,0x80,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xec,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0xe0,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, + 0x4e,0x41,0x4d,0x45,0x06,0x00,0x6d,0x61,0x69,0x6e,0x30,0x00,0x54,0x59,0x50,0x45, + 0x01,0x00,0x00,0x48,0x41,0x53,0x48,0x20,0x00,0x7b,0x12,0x23,0x17,0xd9,0x25,0x1c, + 0x1b,0x42,0x42,0x9f,0xbf,0x31,0xd2,0x2c,0x3a,0x55,0x22,0x1d,0x40,0xd8,0xc4,0xf8, + 0x20,0x49,0x60,0x6d,0x3c,0xea,0x4e,0x1c,0x34,0x4f,0x46,0x46,0x54,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x45,0x52,0x53,0x08,0x00,0x01,0x00,0x08, + 0x00,0x01,0x00,0x01,0x00,0x45,0x4e,0x44,0x54,0x37,0x00,0x00,0x00,0x56,0x41,0x54, + 0x54,0x22,0x00,0x03,0x00,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x00,0x80, + 0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x00,0x01,0x80,0x63,0x6f,0x6c,0x6f, + 0x72,0x30,0x00,0x02,0x80,0x56,0x41,0x54,0x59,0x05,0x00,0x03,0x00,0x04,0x04,0x06, + 0x45,0x4e,0x44,0x54,0x04,0x00,0x00,0x00,0x45,0x4e,0x44,0x54,0xde,0xc0,0x17,0x0b, + 0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xc8,0x0a,0x00,0x00,0xff,0xff,0xff,0xff, + 0x42,0x43,0xc0,0xde,0x21,0x0c,0x00,0x00,0xaf,0x02,0x00,0x00,0x0b,0x82,0x20,0x00, + 0x02,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x07,0x81,0x23,0x91,0x41,0xc8,0x04,0x49, + 0x06,0x10,0x32,0x39,0x92,0x01,0x84,0x0c,0x25,0x05,0x08,0x19,0x1e,0x04,0x8b,0x62, + 0x80,0x10,0x45,0x02,0x42,0x92,0x0b,0x42,0x84,0x10,0x32,0x14,0x38,0x08,0x18,0x49, + 0x0a,0x32,0x44,0x24,0x48,0x0a,0x90,0x21,0x23,0xc4,0x52,0x80,0x0c,0x19,0x21,0x72, + 0x24,0x07,0xc8,0x08,0x11,0x62,0xa8,0xa0,0xa8,0x40,0xc6,0xf0,0x01,0x00,0x00,0x00, + 0x51,0x18,0x00,0x00,0x81,0x00,0x00,0x00,0x1b,0xc8,0x25,0xf8,0xff,0xff,0xff,0xff, + 0x01,0x90,0x80,0x8a,0x18,0x87,0x77,0x90,0x07,0x79,0x28,0x87,0x71,0xa0,0x07,0x76, + 0xc8,0x87,0x36,0x90,0x87,0x77,0xa8,0x07,0x77,0x20,0x87,0x72,0x20,0x87,0x36,0x20, + 0x87,0x74,0xb0,0x87,0x74,0x20,0x87,0x72,0x68,0x83,0x79,0x88,0x07,0x79,0xa0,0x87, + 0x36,0x30,0x07,0x78,0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0xc0,0x1c,0xc2,0x81, + 0x1d,0xe6,0xa1,0x1c,0x00,0x82,0x1c,0xd2,0x61,0x1e,0xc2,0x41,0x1c,0xd8,0xa1,0x1c, + 0xda,0x80,0x1e,0xc2,0x21,0x1d,0xd8,0xa1,0x0d,0xc6,0x21,0x1c,0xd8,0x81,0x1d,0xe6, + 0x01,0x30,0x87,0x70,0x60,0x87,0x79,0x28,0x07,0x80,0x60,0x87,0x72,0x98,0x87,0x79, + 0x68,0x03,0x78,0x90,0x87,0x72,0x18,0x87,0x74,0x98,0x87,0x72,0x68,0x03,0x73,0x80, + 0x87,0x76,0x08,0x07,0x72,0x00,0xcc,0x21,0x1c,0xd8,0x61,0x1e,0xca,0x01,0x20,0xdc, + 0xe1,0x1d,0xda,0xc0,0x1c,0xe4,0x21,0x1c,0xda,0xa1,0x1c,0xda,0x00,0x1e,0xde,0x21, + 0x1d,0xdc,0x81,0x1e,0xca,0x41,0x1e,0xda,0xa0,0x1c,0xd8,0x21,0x1d,0xda,0x01,0xa0, + 0x07,0x79,0xa8,0x87,0x72,0x00,0x06,0x77,0x78,0x87,0x36,0x30,0x07,0x79,0x08,0x87, + 0x76,0x28,0x87,0x36,0x80,0x87,0x77,0x48,0x07,0x77,0xa0,0x87,0x72,0x90,0x87,0x36, + 0x28,0x07,0x76,0x48,0x87,0x76,0x68,0x03,0x77,0x78,0x07,0x77,0x68,0x03,0x76,0x28, + 0x87,0x70,0x30,0x07,0x80,0x70,0x87,0x77,0x68,0x83,0x74,0x70,0x07,0x73,0x98,0x87, + 0x36,0x30,0x07,0x78,0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0x80,0x1e,0xe4,0xa1, + 0x1e,0xca,0x01,0x20,0xdc,0xe1,0x1d,0xda,0x40,0x1d,0xea,0xa1,0x1d,0xe0,0xa1,0x0d, + 0xe8,0x21,0x1c,0xc4,0x81,0x1d,0xca,0x61,0x1e,0x00,0x73,0x08,0x07,0x76,0x98,0x87, + 0x72,0x00,0x08,0x77,0x78,0x87,0x36,0x70,0x87,0x70,0x70,0x87,0x79,0x68,0x03,0x73, + 0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e,0xea,0xa1,0x1c, + 0x00,0xc2,0x1d,0xde,0xa1,0x0d,0xe6,0x21,0x1d,0xce,0xc1,0x1d,0xca,0x81,0x1c,0xda, + 0x40,0x1f,0xca,0x41,0x1e,0xde,0x61,0x1e,0xda,0xc0,0x1c,0xe0,0xa1,0x0d,0xda,0x21, + 0x1c,0xe8,0x01,0x1d,0x00,0x7a,0x90,0x87,0x7a,0x28,0x07,0x80,0x70,0x87,0x77,0x68, + 0x03,0x7a,0x90,0x87,0x70,0x80,0x07,0x78,0x48,0x07,0x77,0x38,0x87,0x36,0x68,0x87, + 0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e,0xea,0xa1,0x1c,0x00,0x62,0x1e,0xe8,0x21, + 0x1c,0xc6,0x61,0x1d,0xda,0x00,0x1e,0xe4,0xe1,0x1d,0xe8,0xa1,0x1c,0xc6,0x81,0x1e, + 0xde,0x41,0x1e,0xda,0x40,0x1c,0xea,0xc1,0x1c,0xcc,0xa1,0x1c,0xe4,0xa1,0x0d,0xe6, + 0x21,0x1d,0xf4,0xa1,0x1c,0x00,0x3c,0x00,0x88,0x7a,0x70,0x87,0x79,0x08,0x07,0x73, + 0x28,0x87,0x36,0x30,0x07,0x78,0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0x80,0x1e, + 0xe4,0xa1,0x1e,0xca,0x01,0x20,0xea,0x61,0x1e,0xca,0xa1,0x0d,0xe6,0xe1,0x1d,0xcc, + 0x81,0x1e,0xda,0xc0,0x1c,0xd8,0xe1,0x1d,0xc2,0x81,0x1e,0x00,0x73,0x08,0x07,0x76, + 0x98,0x87,0x72,0x00,0x36,0x18,0x02,0x01,0x2c,0x40,0x05,0x00,0x49,0x18,0x00,0x00, + 0x01,0x00,0x00,0x00,0x13,0x84,0x40,0x00,0x89,0x20,0x00,0x00,0x16,0x00,0x00,0x00, + 0x32,0x22,0x08,0x09,0x20,0x64,0x85,0x04,0x13,0x22,0xa4,0x84,0x04,0x13,0x22,0xe3, + 0x84,0xa1,0x90,0x14,0x12,0x4c,0x88,0x8c,0x0b,0x84,0x84,0x4c,0x10,0x3c,0x33,0x00, + 0xc3,0x08,0x02,0x30,0x8c,0x40,0x00,0x76,0x08,0x91,0x83,0xa4,0x29,0xa2,0x84,0xc9, + 0xaf,0xa4,0xff,0x01,0x22,0x80,0x91,0x50,0x10,0x83,0x08,0x84,0x50,0x8a,0x89,0x90, + 0x22,0x1b,0x08,0x98,0x23,0x00,0x83,0x14,0xc8,0x39,0x02,0x50,0x18,0x44,0x08,0x84, + 0x61,0x04,0x22,0x19,0x01,0x00,0x00,0x00,0x13,0xb2,0x70,0x48,0x07,0x79,0xb0,0x03, + 0x3a,0x68,0x83,0x70,0x80,0x07,0x78,0x60,0x87,0x72,0x68,0x83,0x76,0x08,0x87,0x71, + 0x78,0x87,0x79,0xc0,0x87,0x38,0x80,0x03,0x37,0x88,0x83,0x38,0x70,0x03,0x38,0xd8, + 0x70,0x1b,0xe5,0xd0,0x06,0xf0,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xa0, + 0x07,0x76,0x40,0x07,0x6d,0x90,0x0e,0x71,0xa0,0x07,0x78,0xa0,0x07,0x78,0xd0,0x06, + 0xe9,0x80,0x07,0x7a,0x80,0x07,0x7a,0x80,0x07,0x6d,0x90,0x0e,0x71,0x60,0x07,0x7a, + 0x10,0x07,0x76,0xa0,0x07,0x71,0x60,0x07,0x6d,0x90,0x0e,0x73,0x20,0x07,0x7a,0x30, + 0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x6d,0x90,0x0e,0x76,0x40,0x07,0x7a,0x60,0x07, + 0x74,0xa0,0x07,0x76,0x40,0x07,0x6d,0x60,0x0e,0x73,0x20,0x07,0x7a,0x30,0x07,0x72, + 0xa0,0x07,0x73,0x20,0x07,0x6d,0x60,0x0e,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xa0, + 0x07,0x76,0x40,0x07,0x6d,0x60,0x0f,0x71,0x60,0x07,0x7a,0x10,0x07,0x76,0xa0,0x07, + 0x71,0x60,0x07,0x6d,0x60,0x0f,0x72,0x40,0x07,0x7a,0x30,0x07,0x72,0xa0,0x07,0x73, + 0x20,0x07,0x6d,0x60,0x0f,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xa0,0x07,0x73,0x20, + 0x07,0x6d,0x60,0x0f,0x74,0x80,0x07,0x7a,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07, + 0x6d,0x60,0x0f,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x6d, + 0x60,0x0f,0x79,0x60,0x07,0x7a,0x10,0x07,0x72,0x80,0x07,0x7a,0x10,0x07,0x72,0x80, + 0x07,0x6d,0x60,0x0f,0x71,0x20,0x07,0x78,0xa0,0x07,0x71,0x20,0x07,0x78,0xa0,0x07, + 0x71,0x20,0x07,0x78,0xd0,0x06,0xf6,0x10,0x07,0x79,0x20,0x07,0x7a,0x20,0x07,0x75, + 0x60,0x07,0x7a,0x20,0x07,0x75,0x60,0x07,0x6d,0x60,0x0f,0x72,0x50,0x07,0x76,0xa0, + 0x07,0x72,0x50,0x07,0x76,0xa0,0x07,0x72,0x50,0x07,0x76,0xd0,0x06,0xf6,0x50,0x07, + 0x71,0x20,0x07,0x7a,0x50,0x07,0x71,0x20,0x07,0x7a,0x50,0x07,0x71,0x20,0x07,0x6d, + 0x60,0x0f,0x71,0x00,0x07,0x72,0x40,0x07,0x7a,0x10,0x07,0x70,0x20,0x07,0x74,0xa0, + 0x07,0x71,0x00,0x07,0x72,0x40,0x07,0x6d,0xe0,0x0e,0x78,0xa0,0x07,0x71,0x60,0x07, + 0x7a,0x30,0x07,0x72,0x30,0x84,0x39,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0xc8, + 0x02,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x32,0x1e,0x98,0x10,0x19,0x11,0x4c,0x90, + 0x8c,0x09,0x26,0x47,0xc6,0x04,0x43,0xca,0x12,0x18,0x01,0x28,0x88,0x22,0x28,0x84, + 0x32,0xa0,0x1d,0x01,0x20,0x1d,0x4b,0x68,0x02,0x00,0x00,0x00,0x79,0x18,0x00,0x00, + 0xea,0x00,0x00,0x00,0x1a,0x03,0x4c,0x10,0x97,0x29,0xa2,0x25,0x10,0xab,0x32,0xb9, + 0xb9,0xb4,0x37,0xb7,0x21,0x46,0x42,0x20,0x80,0x82,0x50,0xb9,0x1b,0x43,0x0b,0x93, + 0xfb,0x9a,0x4b,0xd3,0x2b,0x1b,0x62,0x24,0x01,0x22,0x24,0x05,0xe7,0x20,0x08,0x0e, + 0x8e,0xad,0x0c,0xa4,0xad,0x8c,0x2e,0x8c,0x0d,0xc4,0xae,0x4c,0x6e,0x2e,0xed,0xcd, + 0x0d,0x64,0x26,0x06,0x06,0x26,0xc6,0xc5,0xc6,0xe6,0x06,0x04,0xa5,0xad,0x8c,0x2e, + 0x8c,0xcd,0xac,0xac,0x65,0x26,0x06,0x06,0x26,0xc6,0xc5,0xc6,0xe6,0xc6,0x45,0x26, + 0x65,0x88,0x80,0x10,0x43,0x8c,0x24,0x48,0x86,0x44,0x60,0xd1,0x54,0x46,0x17,0xc6, + 0x36,0x04,0x41,0x8e,0x24,0x48,0x82,0x44,0xe0,0x16,0x96,0x26,0xe7,0x32,0xf6,0xd6, + 0x06,0x97,0xc6,0x56,0xe6,0x42,0x56,0xe6,0xf6,0x26,0xd7,0x36,0xf7,0x45,0x96,0x36, + 0x17,0x26,0xc6,0x56,0x36,0x44,0x40,0x12,0x72,0x61,0x69,0x72,0x2e,0x63,0x6f,0x6d, + 0x70,0x69,0x6c,0x65,0x2e,0x66,0x61,0x73,0x74,0x5f,0x6d,0x61,0x74,0x68,0x5f,0x65, + 0x6e,0x61,0x62,0x6c,0x65,0x43,0x04,0x64,0x61,0x19,0x84,0xa5,0xc9,0xb9,0x8c,0xbd, + 0xb5,0xc1,0xa5,0xb1,0x95,0xb9,0x98,0xc9,0x85,0xb5,0x95,0x89,0xd5,0x99,0x99,0x95, + 0xc9,0x7d,0x99,0x95,0xd1,0x8d,0xa1,0x7d,0x91,0xa5,0xcd,0x85,0x89,0xb1,0x95,0x0d, + 0x11,0x90,0x86,0x51,0x58,0x9a,0x9c,0x8b,0x5d,0x99,0x1c,0x5d,0x19,0xde,0xd7,0x5b, + 0x1d,0x1d,0x5c,0x1d,0x1d,0x97,0xba,0xb9,0x32,0x39,0x14,0xb6,0xb7,0x31,0x37,0x98, + 0x14,0x46,0x61,0x69,0x72,0x2e,0x61,0x72,0x67,0x5f,0x74,0x79,0x70,0x65,0x5f,0x6e, + 0x61,0x6d,0x65,0x34,0xcc,0xd8,0xde,0xc2,0xe8,0x64,0xc8,0x84,0xa5,0xc9,0xb9,0x84, + 0xc9,0x9d,0x7d,0xb9,0x85,0xb5,0x95,0x51,0xa8,0xb3,0x1b,0xc2,0x20,0x0f,0x02,0x21, + 0x11,0x22,0x21,0x13,0x42,0x71,0xa9,0x9b,0x2b,0x93,0x43,0x61,0x7b,0x1b,0x73,0x8b, + 0x49,0xa1,0x61,0xc6,0xf6,0x16,0x46,0x47,0xc3,0x62,0xec,0x8d,0xed,0x4d,0x6e,0x08, + 0x83,0x3c,0x88,0x85,0x44,0xc8,0x85,0x4c,0x08,0x46,0x26,0x2c,0x4d,0xce,0x05,0xee, + 0x6d,0x2e,0x8d,0x2e,0xed,0xcd,0x8d,0xcb,0x19,0xdb,0x17,0xd4,0xdb,0x5c,0x1a,0x5d, + 0xda,0x9b,0xdb,0x10,0x05,0xd1,0x90,0x08,0xb9,0x90,0x09,0xd9,0x86,0x18,0x48,0x85, + 0x64,0x08,0x47,0x28,0x2c,0x4d,0xce,0xc5,0xae,0x4c,0x8e,0xae,0x0c,0xef,0x2b,0xcd, + 0x0d,0xae,0x8e,0x8e,0x52,0x58,0x9a,0x9c,0x0b,0xdb,0xdb,0x58,0x18,0x5d,0xda,0x9b, + 0xdb,0x57,0x9a,0x1b,0x59,0x19,0x1e,0xbd,0xb3,0x32,0xb7,0x32,0xb9,0x30,0xba,0x32, + 0x32,0x94,0xaf,0xaf,0xb0,0x34,0xb9,0x2f,0x38,0xb6,0xb0,0xb1,0x32,0xb4,0x37,0x36, + 0xb2,0x32,0xb9,0xaf,0xaf,0x14,0x22,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x43, + 0xa8,0x44,0x40,0x3c,0xe4,0x4b,0x84,0x24,0x40,0xc0,0x00,0x89,0x10,0x09,0x99,0x90, + 0x30,0x60,0x42,0x57,0x86,0x37,0xf6,0xf6,0x26,0x47,0x06,0x33,0x84,0x4a,0x02,0xc4, + 0x43,0xbe,0x24,0x48,0x02,0x04,0x0c,0x90,0x08,0x91,0x90,0x09,0x19,0x03,0x1a,0x63, + 0x6f,0x6c,0x6f,0x72,0x30,0x43,0xa8,0x84,0x40,0x3c,0xe4,0x4b,0x88,0x24,0x40,0xc0, + 0x00,0x89,0x90,0x0b,0x99,0x90,0x32,0xa0,0x12,0x96,0x26,0xe7,0x22,0x56,0x67,0x66, + 0x56,0x26,0xc7,0x27,0x2c,0x4d,0xce,0x45,0xac,0xce,0xcc,0xac,0x4c,0xee,0x6b,0x2e, + 0x4d,0xaf,0x8c,0x48,0x58,0x9a,0x9c,0x8b,0x5c,0x59,0x18,0x19,0xa9,0xb0,0x34,0x39, + 0x97,0x39,0x3a,0xb9,0xba,0x31,0xba,0x2f,0xba,0x3c,0xb8,0xb2,0xaf,0x34,0x37,0xb3, + 0x37,0x26,0x64,0x69,0x73,0x70,0x5f,0x73,0x69,0x7a,0x65,0x43,0x94,0x44,0x48,0x86, + 0x44,0x40,0x24,0x64,0x0d,0x18,0x85,0xa5,0xc9,0xb9,0x84,0xc9,0x9d,0x7d,0xd1,0xe5, + 0xc1,0x95,0x7d,0xcd,0xa5,0xe9,0x95,0xf1,0x0a,0x4b,0x93,0x73,0x09,0x93,0x3b,0xfb, + 0xa2,0xcb,0x83,0x2b,0xfb,0x0a,0x63,0x4b,0x3b,0x73,0xfb,0x9a,0x4b,0xd3,0x2b,0x63, + 0x62,0x37,0xf7,0x05,0x17,0x26,0x17,0xd6,0x36,0xc7,0xe1,0x4b,0x46,0x66,0x08,0x19, + 0x24,0x06,0x72,0x06,0x08,0x1a,0x24,0x03,0xf2,0x25,0x42,0x12,0x20,0x69,0x80,0xa8, + 0x01,0xc2,0x06,0x48,0x1b,0x24,0x03,0xe2,0x06,0xc9,0x80,0x44,0xc8,0x1b,0x20,0x13, + 0x02,0x07,0x43,0x10,0x44,0x0c,0x10,0x32,0x40,0xcc,0x00,0x89,0x83,0x21,0xc6,0x01, + 0x20,0x1d,0x22,0x07,0x7c,0xde,0xda,0xdc,0xd2,0xe0,0xde,0xe8,0xca,0xdc,0xe8,0x40, + 0xc6,0xd0,0xc2,0xe4,0xf8,0x4c,0xa5,0xb5,0xc1,0xb1,0x95,0x81,0x0c,0xad,0xac,0x80, + 0x50,0x09,0x05,0x05,0x0d,0x11,0x90,0x3a,0x18,0x62,0x20,0x74,0x80,0xd8,0xc1,0x72, + 0x0c,0x31,0x90,0x3b,0x40,0xee,0x60,0x39,0x46,0x44,0xec,0xc0,0x0e,0xf6,0xd0,0x0e, + 0x6e,0xd0,0x0e,0xef,0x40,0x0e,0xf5,0xc0,0x0e,0xe5,0xe0,0x06,0xe6,0xc0,0x0e,0xe1, + 0x70,0x0e,0xf3,0x30,0x45,0x08,0x86,0x11,0x0a,0x3b,0xb0,0x83,0x3d,0xb4,0x83,0x1b, + 0xa4,0x03,0x39,0x94,0x83,0x3b,0xd0,0xc3,0x94,0xa0,0x18,0xb1,0x84,0x43,0x3a,0xc8, + 0x83,0x1b,0xd8,0x43,0x39,0xc8,0xc3,0x3c,0xa4,0xc3,0x3b,0xb8,0xc3,0x94,0xc0,0x18, + 0x41,0x85,0x43,0x3a,0xc8,0x83,0x1b,0xb0,0x43,0x38,0xb8,0xc3,0x39,0xd4,0x43,0x38, + 0x9c,0x43,0x39,0xfc,0x82,0x3d,0x94,0x83,0x3c,0xcc,0x43,0x3a,0xbc,0x83,0x3b,0x4c, + 0x09,0x90,0x11,0x53,0x38,0xa4,0x83,0x3c,0xb8,0xc1,0x38,0xbc,0x43,0x3b,0xc0,0x43, + 0x3a,0xb0,0x43,0x39,0xfc,0xc2,0x3b,0xc0,0x03,0x3d,0xa4,0xc3,0x3b,0xb8,0xc3,0x3c, + 0x4c,0x19,0x14,0xc6,0x19,0xa1,0x84,0x43,0x3a,0xc8,0x83,0x1b,0xd8,0x43,0x39,0xc8, + 0x03,0x3d,0x94,0x03,0x3e,0x4c,0x09,0xe6,0x00,0x00,0x00,0x00,0x79,0x18,0x00,0x00, + 0x7b,0x00,0x00,0x00,0x33,0x08,0x80,0x1c,0xc4,0xe1,0x1c,0x66,0x14,0x01,0x3d,0x88, + 0x43,0x38,0x84,0xc3,0x8c,0x42,0x80,0x07,0x79,0x78,0x07,0x73,0x98,0x71,0x0c,0xe6, + 0x00,0x0f,0xed,0x10,0x0e,0xf4,0x80,0x0e,0x33,0x0c,0x42,0x1e,0xc2,0xc1,0x1d,0xce, + 0xa1,0x1c,0x66,0x30,0x05,0x3d,0x88,0x43,0x38,0x84,0x83,0x1b,0xcc,0x03,0x3d,0xc8, + 0x43,0x3d,0x8c,0x03,0x3d,0xcc,0x78,0x8c,0x74,0x70,0x07,0x7b,0x08,0x07,0x79,0x48, + 0x87,0x70,0x70,0x07,0x7a,0x70,0x03,0x76,0x78,0x87,0x70,0x20,0x87,0x19,0xcc,0x11, + 0x0e,0xec,0x90,0x0e,0xe1,0x30,0x0f,0x6e,0x30,0x0f,0xe3,0xf0,0x0e,0xf0,0x50,0x0e, + 0x33,0x10,0xc4,0x1d,0xde,0x21,0x1c,0xd8,0x21,0x1d,0xc2,0x61,0x1e,0x66,0x30,0x89, + 0x3b,0xbc,0x83,0x3b,0xd0,0x43,0x39,0xb4,0x03,0x3c,0xbc,0x83,0x3c,0x84,0x03,0x3b, + 0xcc,0xf0,0x14,0x76,0x60,0x07,0x7b,0x68,0x07,0x37,0x68,0x87,0x72,0x68,0x07,0x37, + 0x80,0x87,0x70,0x90,0x87,0x70,0x60,0x07,0x76,0x28,0x07,0x76,0xf8,0x05,0x76,0x78, + 0x87,0x77,0x80,0x87,0x5f,0x08,0x87,0x71,0x18,0x87,0x72,0x98,0x87,0x79,0x98,0x81, + 0x2c,0xee,0xf0,0x0e,0xee,0xe0,0x0e,0xf5,0xc0,0x0e,0xec,0x30,0x03,0x62,0xc8,0xa1, + 0x1c,0xe4,0xa1,0x1c,0xcc,0xa1,0x1c,0xe4,0xa1,0x1c,0xdc,0x61,0x1c,0xca,0x21,0x1c, + 0xc4,0x81,0x1d,0xca,0x61,0x06,0xd6,0x90,0x43,0x39,0xc8,0x43,0x39,0x98,0x43,0x39, + 0xc8,0x43,0x39,0xb8,0xc3,0x38,0x94,0x43,0x38,0x88,0x03,0x3b,0x94,0xc3,0x2f,0xbc, + 0x83,0x3c,0xfc,0x82,0x3b,0xd4,0x03,0x3b,0xb0,0xc3,0x0c,0xc7,0x69,0x87,0x70,0x58, + 0x87,0x72,0x70,0x83,0x74,0x68,0x07,0x78,0x60,0x87,0x74,0x18,0x87,0x74,0xa0,0x87, + 0x19,0xce,0x53,0x0f,0xee,0x00,0x0f,0xf2,0x50,0x0e,0xe4,0x90,0x0e,0xe3,0x40,0x0f, + 0xe1,0x20,0x0e,0xec,0x50,0x0e,0x33,0x20,0x28,0x1d,0xdc,0xc1,0x1e,0xc2,0x41,0x1e, + 0xd2,0x21,0x1c,0xdc,0x81,0x1e,0xdc,0xe0,0x1c,0xe4,0xe1,0x1d,0xea,0x01,0x1e,0x66, + 0x18,0x51,0x38,0xb0,0x43,0x3a,0x9c,0x83,0x3b,0xcc,0x50,0x24,0x76,0x60,0x07,0x7b, + 0x68,0x07,0x37,0x60,0x87,0x77,0x78,0x07,0x78,0x98,0x51,0x4c,0xf4,0x90,0x0f,0xf0, + 0x50,0x0e,0x33,0x1e,0x6a,0x1e,0xca,0x61,0x1c,0xe8,0x21,0x1d,0xde,0xc1,0x1d,0x7e, + 0x01,0x1e,0xe4,0xa1,0x1c,0xcc,0x21,0x1d,0xf0,0x61,0x06,0x54,0x85,0x83,0x38,0xcc, + 0xc3,0x3b,0xb0,0x43,0x3d,0xd0,0x43,0x39,0xfc,0xc2,0x3c,0xe4,0x43,0x3b,0x88,0xc3, + 0x3b,0xb0,0xc3,0x8c,0xc5,0x0a,0x87,0x79,0x98,0x87,0x77,0x18,0x87,0x74,0x08,0x07, + 0x7a,0x28,0x07,0x72,0x98,0x81,0x5c,0xe3,0x10,0x0e,0xec,0xc0,0x0e,0xe5,0x50,0x0e, + 0xf3,0x30,0x23,0xc1,0xd2,0x41,0x1e,0xe4,0xe1,0x17,0xd8,0xe1,0x1d,0xde,0x01,0x1e, + 0x66,0x50,0x59,0x38,0xa4,0x83,0x3c,0xb8,0x81,0x39,0xd4,0x83,0x3b,0x8c,0x03,0x3d, + 0xa4,0xc3,0x3b,0xb8,0xc3,0x2f,0x9c,0x83,0x3c,0xbc,0x43,0x3d,0xc0,0xc3,0x3c,0x00, + 0x71,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x06,0x50,0x30,0x00,0xd2,0xd0,0x00,0x00, + 0x61,0x20,0x00,0x00,0x23,0x00,0x00,0x00,0x13,0x04,0x41,0x2c,0x10,0x00,0x00,0x00, + 0x11,0x00,0x00,0x00,0xd4,0x63,0x11,0x40,0x60,0x1c,0x73,0x10,0x42,0xf0,0x3c,0x94, + 0x33,0x00,0x14,0x63,0x09,0x20,0x08,0x82,0xf0,0x2f,0x80,0x20,0x08,0xc2,0xbf,0x30, + 0x96,0x00,0x82,0x20,0x08,0x82,0x01,0x08,0x82,0x20,0x08,0x0e,0x33,0x00,0x24,0x73, + 0x10,0xd7,0x65,0x55,0x34,0x33,0x00,0x04,0x63,0x04,0x20,0x08,0x82,0xf8,0x37,0x46, + 0x00,0x82,0x20,0x08,0x7f,0x33,0x00,0x00,0xe3,0x0d,0x4c,0x64,0x51,0x40,0x2c,0x0a, + 0xe8,0x63,0xc1,0x02,0x1f,0x0b,0x16,0xf9,0x0c,0x32,0x04,0xcb,0x33,0xc8,0x10,0x2c, + 0xd1,0x6c,0xc3,0x52,0x01,0xb3,0x0d,0x41,0x15,0xcc,0x36,0x04,0x83,0x90,0x41,0x40, + 0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x5b,0x86,0x20,0xc0,0x03,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +static const uint8_t _simgui_fs_bytecode_metal_macos[2809] = { + 0x4d,0x54,0x4c,0x42,0x01,0x80,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf9,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x20,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, + 0x4e,0x41,0x4d,0x45,0x06,0x00,0x6d,0x61,0x69,0x6e,0x30,0x00,0x54,0x59,0x50,0x45, + 0x01,0x00,0x01,0x48,0x41,0x53,0x48,0x20,0x00,0xa1,0xce,0x6b,0xd1,0x1f,0x32,0x9e, + 0x8d,0x8d,0x1c,0xcc,0x19,0xcb,0xd3,0xb6,0x21,0x99,0x0b,0xb6,0x46,0x8b,0x87,0x98, + 0x8e,0x2d,0xb5,0x98,0x92,0x0a,0x81,0x7d,0xf3,0x4f,0x46,0x46,0x54,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x45,0x52,0x53,0x08,0x00,0x01,0x00,0x08, + 0x00,0x01,0x00,0x01,0x00,0x45,0x4e,0x44,0x54,0x04,0x00,0x00,0x00,0x45,0x4e,0x44, + 0x54,0x04,0x00,0x00,0x00,0x45,0x4e,0x44,0x54,0xde,0xc0,0x17,0x0b,0x00,0x00,0x00, + 0x00,0x14,0x00,0x00,0x00,0x0c,0x0a,0x00,0x00,0xff,0xff,0xff,0xff,0x42,0x43,0xc0, + 0xde,0x21,0x0c,0x00,0x00,0x80,0x02,0x00,0x00,0x0b,0x82,0x20,0x00,0x02,0x00,0x00, + 0x00,0x12,0x00,0x00,0x00,0x07,0x81,0x23,0x91,0x41,0xc8,0x04,0x49,0x06,0x10,0x32, + 0x39,0x92,0x01,0x84,0x0c,0x25,0x05,0x08,0x19,0x1e,0x04,0x8b,0x62,0x80,0x14,0x45, + 0x02,0x42,0x92,0x0b,0x42,0xa4,0x10,0x32,0x14,0x38,0x08,0x18,0x49,0x0a,0x32,0x44, + 0x24,0x48,0x0a,0x90,0x21,0x23,0xc4,0x52,0x80,0x0c,0x19,0x21,0x72,0x24,0x07,0xc8, + 0x48,0x11,0x62,0xa8,0xa0,0xa8,0x40,0xc6,0xf0,0x01,0x00,0x00,0x00,0x51,0x18,0x00, + 0x00,0x89,0x00,0x00,0x00,0x1b,0xcc,0x25,0xf8,0xff,0xff,0xff,0xff,0x01,0x60,0x00, + 0x09,0xa8,0x88,0x71,0x78,0x07,0x79,0x90,0x87,0x72,0x18,0x07,0x7a,0x60,0x87,0x7c, + 0x68,0x03,0x79,0x78,0x87,0x7a,0x70,0x07,0x72,0x28,0x07,0x72,0x68,0x03,0x72,0x48, + 0x07,0x7b,0x48,0x07,0x72,0x28,0x87,0x36,0x98,0x87,0x78,0x90,0x07,0x7a,0x68,0x03, + 0x73,0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xcc,0x21,0x1c,0xd8,0x61, + 0x1e,0xca,0x01,0x20,0xc8,0x21,0x1d,0xe6,0x21,0x1c,0xc4,0x81,0x1d,0xca,0xa1,0x0d, + 0xe8,0x21,0x1c,0xd2,0x81,0x1d,0xda,0x60,0x1c,0xc2,0x81,0x1d,0xd8,0x61,0x1e,0x00, + 0x73,0x08,0x07,0x76,0x98,0x87,0x72,0x00,0x08,0x76,0x28,0x87,0x79,0x98,0x87,0x36, + 0x80,0x07,0x79,0x28,0x87,0x71,0x48,0x87,0x79,0x28,0x87,0x36,0x30,0x07,0x78,0x68, + 0x87,0x70,0x20,0x07,0xc0,0x1c,0xc2,0x81,0x1d,0xe6,0xa1,0x1c,0x00,0xc2,0x1d,0xde, + 0xa1,0x0d,0xcc,0x41,0x1e,0xc2,0xa1,0x1d,0xca,0xa1,0x0d,0xe0,0xe1,0x1d,0xd2,0xc1, + 0x1d,0xe8,0xa1,0x1c,0xe4,0xa1,0x0d,0xca,0x81,0x1d,0xd2,0xa1,0x1d,0x00,0x7a,0x90, + 0x87,0x7a,0x28,0x07,0x60,0x70,0x87,0x77,0x68,0x03,0x73,0x90,0x87,0x70,0x68,0x87, + 0x72,0x68,0x03,0x78,0x78,0x87,0x74,0x70,0x07,0x7a,0x28,0x07,0x79,0x68,0x83,0x72, + 0x60,0x87,0x74,0x68,0x87,0x36,0x70,0x87,0x77,0x70,0x87,0x36,0x60,0x87,0x72,0x08, + 0x07,0x73,0x00,0x08,0x77,0x78,0x87,0x36,0x48,0x07,0x77,0x30,0x87,0x79,0x68,0x03, + 0x73,0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e,0xea,0xa1, + 0x1c,0x00,0xc2,0x1d,0xde,0xa1,0x0d,0xd4,0xa1,0x1e,0xda,0x01,0x1e,0xda,0x80,0x1e, + 0xc2,0x41,0x1c,0xd8,0xa1,0x1c,0xe6,0x01,0x30,0x87,0x70,0x60,0x87,0x79,0x28,0x07, + 0x80,0x70,0x87,0x77,0x68,0x03,0x77,0x08,0x07,0x77,0x98,0x87,0x36,0x30,0x07,0x78, + 0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0x80,0x1e,0xe4,0xa1,0x1e,0xca,0x01,0x20, + 0xdc,0xe1,0x1d,0xda,0x60,0x1e,0xd2,0xe1,0x1c,0xdc,0xa1,0x1c,0xc8,0xa1,0x0d,0xf4, + 0xa1,0x1c,0xe4,0xe1,0x1d,0xe6,0xa1,0x0d,0xcc,0x01,0x1e,0xda,0xa0,0x1d,0xc2,0x81, + 0x1e,0xd0,0x01,0xa0,0x07,0x79,0xa8,0x87,0x72,0x00,0x08,0x77,0x78,0x87,0x36,0xa0, + 0x07,0x79,0x08,0x07,0x78,0x80,0x87,0x74,0x70,0x87,0x73,0x68,0x83,0x76,0x08,0x07, + 0x7a,0x40,0x07,0x80,0x1e,0xe4,0xa1,0x1e,0xca,0x01,0x20,0xe6,0x81,0x1e,0xc2,0x61, + 0x1c,0xd6,0xa1,0x0d,0xe0,0x41,0x1e,0xde,0x81,0x1e,0xca,0x61,0x1c,0xe8,0xe1,0x1d, + 0xe4,0xa1,0x0d,0xc4,0xa1,0x1e,0xcc,0xc1,0x1c,0xca,0x41,0x1e,0xda,0x60,0x1e,0xd2, + 0x41,0x1f,0xca,0x01,0xc0,0x03,0x80,0xa8,0x07,0x77,0x98,0x87,0x70,0x30,0x87,0x72, + 0x68,0x03,0x73,0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e, + 0xea,0xa1,0x1c,0x00,0xa2,0x1e,0xe6,0xa1,0x1c,0xda,0x60,0x1e,0xde,0xc1,0x1c,0xe8, + 0xa1,0x0d,0xcc,0x81,0x1d,0xde,0x21,0x1c,0xe8,0x01,0x30,0x87,0x70,0x60,0x87,0x79, + 0x28,0x07,0x60,0x83,0x21,0x0c,0xc0,0x02,0x54,0x1b,0x8c,0x81,0x00,0x16,0xa0,0xda, + 0x80,0x10,0xff,0xff,0xff,0xff,0x3f,0x00,0x0c,0x20,0x01,0xd5,0x06,0xa3,0x08,0x80, + 0x05,0xa8,0x36,0x18,0x86,0x00,0x2c,0x40,0x05,0x49,0x18,0x00,0x00,0x03,0x00,0x00, + 0x00,0x13,0x86,0x40,0x18,0x26,0x0c,0x44,0x61,0x00,0x00,0x00,0x00,0x89,0x20,0x00, + 0x00,0x1d,0x00,0x00,0x00,0x32,0x22,0x48,0x09,0x20,0x64,0x85,0x04,0x93,0x22,0xa4, + 0x84,0x04,0x93,0x22,0xe3,0x84,0xa1,0x90,0x14,0x12,0x4c,0x8a,0x8c,0x0b,0x84,0xa4, + 0x4c,0x10,0x48,0x33,0x00,0xc3,0x08,0x04,0x60,0x83,0x30,0x8c,0x20,0x00,0x47,0x49, + 0x53,0x44,0x09,0x93,0xff,0x4f,0xc4,0x35,0x51,0x11,0xf1,0xdb,0xc3,0x3f,0x8d,0x11, + 0x00,0x83,0x08,0x44,0x70,0x91,0x34,0x45,0x94,0x30,0xf9,0xbf,0x04,0x30,0xcf,0x42, + 0x44,0xff,0x34,0x46,0x00,0x0c,0x22,0x18,0x42,0x29,0xc4,0x08,0xe5,0x10,0x9a,0x23, + 0x08,0xe6,0x08,0xc0,0x60,0x18,0x41,0x58,0x0a,0x12,0xca,0x19,0x8a,0x29,0x40,0x6d, + 0x20,0x20,0x05,0xd6,0x08,0x00,0x00,0x00,0x00,0x13,0xb2,0x70,0x48,0x07,0x79,0xb0, + 0x03,0x3a,0x68,0x83,0x70,0x80,0x07,0x78,0x60,0x87,0x72,0x68,0x83,0x76,0x08,0x87, + 0x71,0x78,0x87,0x79,0xc0,0x87,0x38,0x80,0x03,0x37,0x88,0x83,0x38,0x70,0x03,0x38, + 0xd8,0x70,0x1b,0xe5,0xd0,0x06,0xf0,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74, + 0xa0,0x07,0x76,0x40,0x07,0x6d,0x90,0x0e,0x71,0xa0,0x07,0x78,0xa0,0x07,0x78,0xd0, + 0x06,0xe9,0x80,0x07,0x7a,0x80,0x07,0x7a,0x80,0x07,0x6d,0x90,0x0e,0x71,0x60,0x07, + 0x7a,0x10,0x07,0x76,0xa0,0x07,0x71,0x60,0x07,0x6d,0x90,0x0e,0x73,0x20,0x07,0x7a, + 0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x6d,0x90,0x0e,0x76,0x40,0x07,0x7a,0x60, + 0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x6d,0x60,0x0e,0x73,0x20,0x07,0x7a,0x30,0x07, + 0x72,0xa0,0x07,0x73,0x20,0x07,0x6d,0x60,0x0e,0x76,0x40,0x07,0x7a,0x60,0x07,0x74, + 0xa0,0x07,0x76,0x40,0x07,0x6d,0x60,0x0f,0x71,0x60,0x07,0x7a,0x10,0x07,0x76,0xa0, + 0x07,0x71,0x60,0x07,0x6d,0x60,0x0f,0x72,0x40,0x07,0x7a,0x30,0x07,0x72,0xa0,0x07, + 0x73,0x20,0x07,0x6d,0x60,0x0f,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xa0,0x07,0x73, + 0x20,0x07,0x6d,0x60,0x0f,0x74,0x80,0x07,0x7a,0x60,0x07,0x74,0xa0,0x07,0x76,0x40, + 0x07,0x6d,0x60,0x0f,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07, + 0x6d,0x60,0x0f,0x79,0x60,0x07,0x7a,0x10,0x07,0x72,0x80,0x07,0x7a,0x10,0x07,0x72, + 0x80,0x07,0x6d,0x60,0x0f,0x71,0x20,0x07,0x78,0xa0,0x07,0x71,0x20,0x07,0x78,0xa0, + 0x07,0x71,0x20,0x07,0x78,0xd0,0x06,0xf6,0x10,0x07,0x79,0x20,0x07,0x7a,0x20,0x07, + 0x75,0x60,0x07,0x7a,0x20,0x07,0x75,0x60,0x07,0x6d,0x60,0x0f,0x72,0x50,0x07,0x76, + 0xa0,0x07,0x72,0x50,0x07,0x76,0xa0,0x07,0x72,0x50,0x07,0x76,0xd0,0x06,0xf6,0x50, + 0x07,0x71,0x20,0x07,0x7a,0x50,0x07,0x71,0x20,0x07,0x7a,0x50,0x07,0x71,0x20,0x07, + 0x6d,0x60,0x0f,0x71,0x00,0x07,0x72,0x40,0x07,0x7a,0x10,0x07,0x70,0x20,0x07,0x74, + 0xa0,0x07,0x71,0x00,0x07,0x72,0x40,0x07,0x6d,0xe0,0x0e,0x78,0xa0,0x07,0x71,0x60, + 0x07,0x7a,0x30,0x07,0x72,0x30,0x84,0x49,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00, + 0x18,0xc2,0x38,0x40,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x64,0x81,0x00,0x00,0x00, + 0x00,0x08,0x00,0x00,0x00,0x32,0x1e,0x98,0x10,0x19,0x11,0x4c,0x90,0x8c,0x09,0x26, + 0x47,0xc6,0x04,0x43,0x5a,0x25,0x30,0x02,0x50,0x04,0x85,0x50,0x10,0x65,0x40,0x70, + 0x2c,0xa1,0x09,0x00,0x00,0x79,0x18,0x00,0x00,0xb9,0x00,0x00,0x00,0x1a,0x03,0x4c, + 0x10,0x97,0x29,0xa2,0x25,0x10,0xab,0x32,0xb9,0xb9,0xb4,0x37,0xb7,0x21,0xc6,0x42, + 0x3c,0x00,0x84,0x50,0xb9,0x1b,0x43,0x0b,0x93,0xfb,0x9a,0x4b,0xd3,0x2b,0x1b,0x62, + 0x2c,0xc2,0x23,0x2c,0x05,0xe7,0x20,0x08,0x0e,0x8e,0xad,0x0c,0xa4,0xad,0x8c,0x2e, + 0x8c,0x0d,0xc4,0xae,0x4c,0x6e,0x2e,0xed,0xcd,0x0d,0x64,0x26,0x06,0x06,0x26,0xc6, + 0xc5,0xc6,0xe6,0x06,0x04,0xa5,0xad,0x8c,0x2e,0x8c,0xcd,0xac,0xac,0x65,0x26,0x06, + 0x06,0x26,0xc6,0xc5,0xc6,0xe6,0xc6,0x45,0x26,0x65,0x88,0xf0,0x10,0x43,0x8c,0x45, + 0x58,0x8c,0x65,0x60,0xd1,0x54,0x46,0x17,0xc6,0x36,0x04,0x79,0x8e,0x45,0x58,0x84, + 0x65,0xe0,0x16,0x96,0x26,0xe7,0x32,0xf6,0xd6,0x06,0x97,0xc6,0x56,0xe6,0x42,0x56, + 0xe6,0xf6,0x26,0xd7,0x36,0xf7,0x45,0x96,0x36,0x17,0x26,0xc6,0x56,0x36,0x44,0x78, + 0x12,0x72,0x61,0x69,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x69,0x6c,0x65,0x2e,0x66,0x61, + 0x73,0x74,0x5f,0x6d,0x61,0x74,0x68,0x5f,0x65,0x6e,0x61,0x62,0x6c,0x65,0x43,0x84, + 0x67,0x61,0x19,0x84,0xa5,0xc9,0xb9,0x8c,0xbd,0xb5,0xc1,0xa5,0xb1,0x95,0xb9,0x98, + 0xc9,0x85,0xb5,0x95,0x89,0xd5,0x99,0x99,0x95,0xc9,0x7d,0x99,0x95,0xd1,0x8d,0xa1, + 0x7d,0x91,0xa5,0xcd,0x85,0x89,0xb1,0x95,0x0d,0x11,0x9e,0x86,0x51,0x58,0x9a,0x9c, + 0x8b,0x5c,0x99,0x1b,0x59,0x99,0xdc,0x17,0x5d,0x98,0xdc,0x59,0x19,0x1d,0xa3,0xb0, + 0x34,0x39,0x97,0x30,0xb9,0xb3,0x2f,0xba,0x3c,0xb8,0xb2,0x2f,0xb7,0xb0,0xb6,0x32, + 0x1a,0x66,0x6c,0x6f,0x61,0x74,0x34,0x64,0xc2,0xd2,0xe4,0x5c,0xc2,0xe4,0xce,0xbe, + 0xdc,0xc2,0xda,0xca,0xa8,0x98,0xc9,0x85,0x9d,0x7d,0x8d,0xbd,0xb1,0xbd,0xc9,0x0d, + 0x61,0x9e,0x67,0x19,0x1e,0xe8,0x89,0x1e,0xe9,0x99,0x86,0x08,0x0f,0x45,0x29,0x2c, + 0x4d,0xce,0xc5,0x4c,0x2e,0xec,0xac,0xad,0xcc,0x8d,0xee,0x2b,0xcd,0x0d,0xae,0x8e, + 0x8e,0x4b,0xdd,0x5c,0x99,0x1c,0x0a,0xdb,0xdb,0x98,0x1b,0x4c,0x0a,0x95,0xb0,0x34, + 0x39,0x97,0xb1,0x32,0x37,0xba,0x32,0x39,0x3e,0x61,0x69,0x72,0x2e,0x70,0x65,0x72, + 0x73,0x70,0x65,0x63,0x74,0x69,0x76,0x65,0x34,0xcc,0xd8,0xde,0xc2,0xe8,0x64,0x28, + 0xd4,0xd9,0x0d,0x91,0x96,0xe1,0xb1,0x9e,0xeb,0xc1,0x9e,0xec,0x81,0x1e,0xed,0x91, + 0x9e,0x8d,0x4b,0xdd,0x5c,0x99,0x1c,0x0a,0xdb,0xdb,0x98,0x5b,0x4c,0x0a,0x8b,0xb1, + 0x37,0xb6,0x37,0xb9,0x21,0xd2,0x22,0x3c,0xd6,0xd3,0x3d,0xd8,0x93,0x3d,0xd0,0x13, + 0x3d,0xd2,0xe3,0x71,0x09,0x4b,0x93,0x73,0xa1,0x2b,0xc3,0xa3,0xab,0x93,0x2b,0xa3, + 0x14,0x96,0x26,0xe7,0xc2,0xf6,0x36,0x16,0x46,0x97,0xf6,0xe6,0xf6,0x95,0xe6,0x46, + 0x56,0x86,0x47,0x25,0x2c,0x4d,0xce,0x65,0x2e,0xac,0x0d,0x8e,0xad,0x8c,0x18,0x5d, + 0x19,0x1e,0x5d,0x9d,0x5c,0x99,0x0c,0x19,0x8f,0x19,0xdb,0x5b,0x18,0x1d,0x0b,0xc8, + 0x5c,0x58,0x1b,0x1c,0x5b,0x99,0x0f,0x07,0xba,0x32,0xbc,0x21,0xd4,0x42,0x3c,0x60, + 0xf0,0x84,0xc1,0x32,0x2c,0xc2,0x23,0x06,0x0f,0xf4,0x8c,0xc1,0x23,0x3d,0x64,0xc0, + 0x25,0x2c,0x4d,0xce,0x65,0x2e,0xac,0x0d,0x8e,0xad,0x4c,0x8e,0xc7,0x5c,0x58,0x1b, + 0x1c,0x5b,0x99,0x1c,0x87,0xb9,0x36,0xb8,0x21,0xd2,0x72,0x3c,0x66,0xf0,0x84,0xc1, + 0x32,0x2c,0xc2,0x03,0x3d,0x67,0xf0,0x48,0x0f,0x1a,0x0c,0x41,0x1e,0xee,0xf9,0x9e, + 0x32,0x78,0xd2,0x60,0x88,0x91,0x00,0x4f,0xf5,0xa8,0xc1,0x88,0x88,0x1d,0xd8,0xc1, + 0x1e,0xda,0xc1,0x0d,0xda,0xe1,0x1d,0xc8,0xa1,0x1e,0xd8,0xa1,0x1c,0xdc,0xc0,0x1c, + 0xd8,0x21,0x1c,0xce,0x61,0x1e,0xa6,0x08,0xc1,0x30,0x42,0x61,0x07,0x76,0xb0,0x87, + 0x76,0x70,0x83,0x74,0x20,0x87,0x72,0x70,0x07,0x7a,0x98,0x12,0x14,0x23,0x96,0x70, + 0x48,0x07,0x79,0x70,0x03,0x7b,0x28,0x07,0x79,0x98,0x87,0x74,0x78,0x07,0x77,0x98, + 0x12,0x18,0x23,0xa8,0x70,0x48,0x07,0x79,0x70,0x03,0x76,0x08,0x07,0x77,0x38,0x87, + 0x7a,0x08,0x87,0x73,0x28,0x87,0x5f,0xb0,0x87,0x72,0x90,0x87,0x79,0x48,0x87,0x77, + 0x70,0x87,0x29,0x01,0x32,0x62,0x0a,0x87,0x74,0x90,0x07,0x37,0x18,0x87,0x77,0x68, + 0x07,0x78,0x48,0x07,0x76,0x28,0x87,0x5f,0x78,0x07,0x78,0xa0,0x87,0x74,0x78,0x07, + 0x77,0x98,0x87,0x29,0x83,0xc2,0x38,0x23,0x98,0x70,0x48,0x07,0x79,0x70,0x03,0x73, + 0x90,0x87,0x70,0x38,0x87,0x76,0x28,0x07,0x77,0xa0,0x87,0x29,0xc1,0x1a,0x00,0x00, + 0x00,0x79,0x18,0x00,0x00,0x7b,0x00,0x00,0x00,0x33,0x08,0x80,0x1c,0xc4,0xe1,0x1c, + 0x66,0x14,0x01,0x3d,0x88,0x43,0x38,0x84,0xc3,0x8c,0x42,0x80,0x07,0x79,0x78,0x07, + 0x73,0x98,0x71,0x0c,0xe6,0x00,0x0f,0xed,0x10,0x0e,0xf4,0x80,0x0e,0x33,0x0c,0x42, + 0x1e,0xc2,0xc1,0x1d,0xce,0xa1,0x1c,0x66,0x30,0x05,0x3d,0x88,0x43,0x38,0x84,0x83, + 0x1b,0xcc,0x03,0x3d,0xc8,0x43,0x3d,0x8c,0x03,0x3d,0xcc,0x78,0x8c,0x74,0x70,0x07, + 0x7b,0x08,0x07,0x79,0x48,0x87,0x70,0x70,0x07,0x7a,0x70,0x03,0x76,0x78,0x87,0x70, + 0x20,0x87,0x19,0xcc,0x11,0x0e,0xec,0x90,0x0e,0xe1,0x30,0x0f,0x6e,0x30,0x0f,0xe3, + 0xf0,0x0e,0xf0,0x50,0x0e,0x33,0x10,0xc4,0x1d,0xde,0x21,0x1c,0xd8,0x21,0x1d,0xc2, + 0x61,0x1e,0x66,0x30,0x89,0x3b,0xbc,0x83,0x3b,0xd0,0x43,0x39,0xb4,0x03,0x3c,0xbc, + 0x83,0x3c,0x84,0x03,0x3b,0xcc,0xf0,0x14,0x76,0x60,0x07,0x7b,0x68,0x07,0x37,0x68, + 0x87,0x72,0x68,0x07,0x37,0x80,0x87,0x70,0x90,0x87,0x70,0x60,0x07,0x76,0x28,0x07, + 0x76,0xf8,0x05,0x76,0x78,0x87,0x77,0x80,0x87,0x5f,0x08,0x87,0x71,0x18,0x87,0x72, + 0x98,0x87,0x79,0x98,0x81,0x2c,0xee,0xf0,0x0e,0xee,0xe0,0x0e,0xf5,0xc0,0x0e,0xec, + 0x30,0x03,0x62,0xc8,0xa1,0x1c,0xe4,0xa1,0x1c,0xcc,0xa1,0x1c,0xe4,0xa1,0x1c,0xdc, + 0x61,0x1c,0xca,0x21,0x1c,0xc4,0x81,0x1d,0xca,0x61,0x06,0xd6,0x90,0x43,0x39,0xc8, + 0x43,0x39,0x98,0x43,0x39,0xc8,0x43,0x39,0xb8,0xc3,0x38,0x94,0x43,0x38,0x88,0x03, + 0x3b,0x94,0xc3,0x2f,0xbc,0x83,0x3c,0xfc,0x82,0x3b,0xd4,0x03,0x3b,0xb0,0xc3,0x0c, + 0xc7,0x69,0x87,0x70,0x58,0x87,0x72,0x70,0x83,0x74,0x68,0x07,0x78,0x60,0x87,0x74, + 0x18,0x87,0x74,0xa0,0x87,0x19,0xce,0x53,0x0f,0xee,0x00,0x0f,0xf2,0x50,0x0e,0xe4, + 0x90,0x0e,0xe3,0x40,0x0f,0xe1,0x20,0x0e,0xec,0x50,0x0e,0x33,0x20,0x28,0x1d,0xdc, + 0xc1,0x1e,0xc2,0x41,0x1e,0xd2,0x21,0x1c,0xdc,0x81,0x1e,0xdc,0xe0,0x1c,0xe4,0xe1, + 0x1d,0xea,0x01,0x1e,0x66,0x18,0x51,0x38,0xb0,0x43,0x3a,0x9c,0x83,0x3b,0xcc,0x50, + 0x24,0x76,0x60,0x07,0x7b,0x68,0x07,0x37,0x60,0x87,0x77,0x78,0x07,0x78,0x98,0x51, + 0x4c,0xf4,0x90,0x0f,0xf0,0x50,0x0e,0x33,0x1e,0x6a,0x1e,0xca,0x61,0x1c,0xe8,0x21, + 0x1d,0xde,0xc1,0x1d,0x7e,0x01,0x1e,0xe4,0xa1,0x1c,0xcc,0x21,0x1d,0xf0,0x61,0x06, + 0x54,0x85,0x83,0x38,0xcc,0xc3,0x3b,0xb0,0x43,0x3d,0xd0,0x43,0x39,0xfc,0xc2,0x3c, + 0xe4,0x43,0x3b,0x88,0xc3,0x3b,0xb0,0xc3,0x8c,0xc5,0x0a,0x87,0x79,0x98,0x87,0x77, + 0x18,0x87,0x74,0x08,0x07,0x7a,0x28,0x07,0x72,0x98,0x81,0x5c,0xe3,0x10,0x0e,0xec, + 0xc0,0x0e,0xe5,0x50,0x0e,0xf3,0x30,0x23,0xc1,0xd2,0x41,0x1e,0xe4,0xe1,0x17,0xd8, + 0xe1,0x1d,0xde,0x01,0x1e,0x66,0x50,0x59,0x38,0xa4,0x83,0x3c,0xb8,0x81,0x39,0xd4, + 0x83,0x3b,0x8c,0x03,0x3d,0xa4,0xc3,0x3b,0xb8,0xc3,0x2f,0x9c,0x83,0x3c,0xbc,0x43, + 0x3d,0xc0,0xc3,0x3c,0x00,0x71,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x16,0xb0,0x01, + 0x48,0xe4,0x4b,0x00,0xf3,0x2c,0xc4,0x3f,0x11,0xd7,0x44,0x45,0xc4,0x6f,0x0f,0x7e, + 0x85,0x17,0xb7,0x6d,0x00,0x05,0x03,0x20,0x0d,0x0d,0x00,0x00,0x00,0x61,0x20,0x00, + 0x00,0x0c,0x00,0x00,0x00,0x13,0x04,0x41,0x2c,0x10,0x00,0x00,0x00,0x04,0x00,0x00, + 0x00,0xc4,0x46,0x00,0x48,0x8d,0x00,0xd4,0x00,0x89,0x19,0x00,0x02,0x23,0x00,0x00, + 0x00,0x23,0x06,0x8a,0x10,0x44,0x87,0x91,0x0c,0x05,0x11,0x58,0x90,0xc8,0x67,0xb6, + 0x81,0x08,0x80,0x0c,0x00,0x00,0x00,0x00,0x00, +}; +static const uint8_t _simgui_vs_bytecode_metal_ios[3052] = { + 0x4d,0x54,0x4c,0x42,0x01,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xec,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0xe0,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, + 0x4e,0x41,0x4d,0x45,0x06,0x00,0x6d,0x61,0x69,0x6e,0x30,0x00,0x54,0x59,0x50,0x45, + 0x01,0x00,0x00,0x48,0x41,0x53,0x48,0x20,0x00,0x69,0x97,0x6b,0xac,0xd8,0xa2,0x51, + 0x33,0x7c,0x5f,0x96,0xb2,0xb1,0x06,0x06,0x7c,0xbb,0x5f,0x88,0xa0,0xeb,0x9f,0xea, + 0x6e,0x6b,0x70,0xa9,0x6e,0xef,0xe6,0xa4,0xea,0x4f,0x46,0x46,0x54,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x45,0x52,0x53,0x08,0x00,0x01,0x00,0x08, + 0x00,0x01,0x00,0x01,0x00,0x45,0x4e,0x44,0x54,0x37,0x00,0x00,0x00,0x56,0x41,0x54, + 0x54,0x22,0x00,0x03,0x00,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x00,0x80, + 0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x00,0x01,0x80,0x63,0x6f,0x6c,0x6f, + 0x72,0x30,0x00,0x02,0x80,0x56,0x41,0x54,0x59,0x05,0x00,0x03,0x00,0x04,0x04,0x06, + 0x45,0x4e,0x44,0x54,0x04,0x00,0x00,0x00,0x45,0x4e,0x44,0x54,0xde,0xc0,0x17,0x0b, + 0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xc0,0x0a,0x00,0x00,0xff,0xff,0xff,0xff, + 0x42,0x43,0xc0,0xde,0x21,0x0c,0x00,0x00,0xad,0x02,0x00,0x00,0x0b,0x82,0x20,0x00, + 0x02,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x07,0x81,0x23,0x91,0x41,0xc8,0x04,0x49, + 0x06,0x10,0x32,0x39,0x92,0x01,0x84,0x0c,0x25,0x05,0x08,0x19,0x1e,0x04,0x8b,0x62, + 0x80,0x10,0x45,0x02,0x42,0x92,0x0b,0x42,0x84,0x10,0x32,0x14,0x38,0x08,0x18,0x49, + 0x0a,0x32,0x44,0x24,0x48,0x0a,0x90,0x21,0x23,0xc4,0x52,0x80,0x0c,0x19,0x21,0x72, + 0x24,0x07,0xc8,0x08,0x11,0x62,0xa8,0xa0,0xa8,0x40,0xc6,0xf0,0x01,0x00,0x00,0x00, + 0x51,0x18,0x00,0x00,0x82,0x00,0x00,0x00,0x1b,0xc8,0x25,0xf8,0xff,0xff,0xff,0xff, + 0x01,0x90,0x80,0x8a,0x18,0x87,0x77,0x90,0x07,0x79,0x28,0x87,0x71,0xa0,0x07,0x76, + 0xc8,0x87,0x36,0x90,0x87,0x77,0xa8,0x07,0x77,0x20,0x87,0x72,0x20,0x87,0x36,0x20, + 0x87,0x74,0xb0,0x87,0x74,0x20,0x87,0x72,0x68,0x83,0x79,0x88,0x07,0x79,0xa0,0x87, + 0x36,0x30,0x07,0x78,0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0xc0,0x1c,0xc2,0x81, + 0x1d,0xe6,0xa1,0x1c,0x00,0x82,0x1c,0xd2,0x61,0x1e,0xc2,0x41,0x1c,0xd8,0xa1,0x1c, + 0xda,0x80,0x1e,0xc2,0x21,0x1d,0xd8,0xa1,0x0d,0xc6,0x21,0x1c,0xd8,0x81,0x1d,0xe6, + 0x01,0x30,0x87,0x70,0x60,0x87,0x79,0x28,0x07,0x80,0x60,0x87,0x72,0x98,0x87,0x79, + 0x68,0x03,0x78,0x90,0x87,0x72,0x18,0x87,0x74,0x98,0x87,0x72,0x68,0x03,0x73,0x80, + 0x87,0x76,0x08,0x07,0x72,0x00,0xcc,0x21,0x1c,0xd8,0x61,0x1e,0xca,0x01,0x20,0xdc, + 0xe1,0x1d,0xda,0xc0,0x1c,0xe4,0x21,0x1c,0xda,0xa1,0x1c,0xda,0x00,0x1e,0xde,0x21, + 0x1d,0xdc,0x81,0x1e,0xca,0x41,0x1e,0xda,0xa0,0x1c,0xd8,0x21,0x1d,0xda,0x01,0xa0, + 0x07,0x79,0xa8,0x87,0x72,0x00,0x06,0x77,0x78,0x87,0x36,0x30,0x07,0x79,0x08,0x87, + 0x76,0x28,0x87,0x36,0x80,0x87,0x77,0x48,0x07,0x77,0xa0,0x87,0x72,0x90,0x87,0x36, + 0x28,0x07,0x76,0x48,0x87,0x76,0x68,0x03,0x77,0x78,0x07,0x77,0x68,0x03,0x76,0x28, + 0x87,0x70,0x30,0x07,0x80,0x70,0x87,0x77,0x68,0x83,0x74,0x70,0x07,0x73,0x98,0x87, + 0x36,0x30,0x07,0x78,0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0x80,0x1e,0xe4,0xa1, + 0x1e,0xca,0x01,0x20,0xdc,0xe1,0x1d,0xda,0x40,0x1d,0xea,0xa1,0x1d,0xe0,0xa1,0x0d, + 0xe8,0x21,0x1c,0xc4,0x81,0x1d,0xca,0x61,0x1e,0x00,0x73,0x08,0x07,0x76,0x98,0x87, + 0x72,0x00,0x08,0x77,0x78,0x87,0x36,0x70,0x87,0x70,0x70,0x87,0x79,0x68,0x03,0x73, + 0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e,0xea,0xa1,0x1c, + 0x00,0xc2,0x1d,0xde,0xa1,0x0d,0xe6,0x21,0x1d,0xce,0xc1,0x1d,0xca,0x81,0x1c,0xda, + 0x40,0x1f,0xca,0x41,0x1e,0xde,0x61,0x1e,0xda,0xc0,0x1c,0xe0,0xa1,0x0d,0xda,0x21, + 0x1c,0xe8,0x01,0x1d,0x00,0x7a,0x90,0x87,0x7a,0x28,0x07,0x80,0x70,0x87,0x77,0x68, + 0x03,0x7a,0x90,0x87,0x70,0x80,0x07,0x78,0x48,0x07,0x77,0x38,0x87,0x36,0x68,0x87, + 0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e,0xea,0xa1,0x1c,0x00,0x62,0x1e,0xe8,0x21, + 0x1c,0xc6,0x61,0x1d,0xda,0x00,0x1e,0xe4,0xe1,0x1d,0xe8,0xa1,0x1c,0xc6,0x81,0x1e, + 0xde,0x41,0x1e,0xda,0x40,0x1c,0xea,0xc1,0x1c,0xcc,0xa1,0x1c,0xe4,0xa1,0x0d,0xe6, + 0x21,0x1d,0xf4,0xa1,0x1c,0x00,0x3c,0x00,0x88,0x7a,0x70,0x87,0x79,0x08,0x07,0x73, + 0x28,0x87,0x36,0x30,0x07,0x78,0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0x80,0x1e, + 0xe4,0xa1,0x1e,0xca,0x01,0x20,0xea,0x61,0x1e,0xca,0xa1,0x0d,0xe6,0xe1,0x1d,0xcc, + 0x81,0x1e,0xda,0xc0,0x1c,0xd8,0xe1,0x1d,0xc2,0x81,0x1e,0x00,0x73,0x08,0x07,0x76, + 0x98,0x87,0x72,0x00,0x36,0x20,0x02,0x01,0x24,0xc0,0x02,0x54,0x00,0x00,0x00,0x00, + 0x49,0x18,0x00,0x00,0x01,0x00,0x00,0x00,0x13,0x84,0x40,0x00,0x89,0x20,0x00,0x00, + 0x16,0x00,0x00,0x00,0x32,0x22,0x08,0x09,0x20,0x64,0x85,0x04,0x13,0x22,0xa4,0x84, + 0x04,0x13,0x22,0xe3,0x84,0xa1,0x90,0x14,0x12,0x4c,0x88,0x8c,0x0b,0x84,0x84,0x4c, + 0x10,0x3c,0x33,0x00,0xc3,0x08,0x02,0x30,0x8c,0x40,0x00,0x76,0x08,0x91,0x83,0xa4, + 0x29,0xa2,0x84,0xc9,0xaf,0xa4,0xff,0x01,0x22,0x80,0x91,0x50,0x10,0x83,0x08,0x84, + 0x50,0x8a,0x89,0x90,0x22,0x1b,0x08,0x98,0x23,0x00,0x83,0x14,0xc8,0x39,0x02,0x50, + 0x18,0x44,0x08,0x84,0x61,0x04,0x22,0x19,0x01,0x00,0x00,0x00,0x13,0xa8,0x70,0x48, + 0x07,0x79,0xb0,0x03,0x3a,0x68,0x83,0x70,0x80,0x07,0x78,0x60,0x87,0x72,0x68,0x83, + 0x74,0x78,0x87,0x79,0xc8,0x03,0x37,0x80,0x03,0x37,0x80,0x83,0x0d,0xb7,0x51,0x0e, + 0x6d,0x00,0x0f,0x7a,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74, + 0xd0,0x06,0xe9,0x10,0x07,0x7a,0x80,0x07,0x7a,0x80,0x07,0x6d,0x90,0x0e,0x78,0xa0, + 0x07,0x78,0xa0,0x07,0x78,0xd0,0x06,0xe9,0x10,0x07,0x76,0xa0,0x07,0x71,0x60,0x07, + 0x7a,0x10,0x07,0x76,0xd0,0x06,0xe9,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a, + 0x30,0x07,0x72,0xd0,0x06,0xe9,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60, + 0x07,0x74,0xd0,0x06,0xe6,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07, + 0x72,0xd0,0x06,0xe6,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74, + 0xd0,0x06,0xf6,0x10,0x07,0x76,0xa0,0x07,0x71,0x60,0x07,0x7a,0x10,0x07,0x76,0xd0, + 0x06,0xf6,0x20,0x07,0x74,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xd0,0x06, + 0xf6,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xd0,0x06,0xf6, + 0x40,0x07,0x78,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0,0x06,0xf6,0x60, + 0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0,0x06,0xf6,0x90,0x07, + 0x76,0xa0,0x07,0x71,0x20,0x07,0x78,0xa0,0x07,0x71,0x20,0x07,0x78,0xd0,0x06,0xf6, + 0x10,0x07,0x72,0x80,0x07,0x7a,0x10,0x07,0x72,0x80,0x07,0x7a,0x10,0x07,0x72,0x80, + 0x07,0x6d,0x60,0x0f,0x71,0x90,0x07,0x72,0xa0,0x07,0x72,0x50,0x07,0x76,0xa0,0x07, + 0x72,0x50,0x07,0x76,0xd0,0x06,0xf6,0x20,0x07,0x75,0x60,0x07,0x7a,0x20,0x07,0x75, + 0x60,0x07,0x7a,0x20,0x07,0x75,0x60,0x07,0x6d,0x60,0x0f,0x75,0x10,0x07,0x72,0xa0, + 0x07,0x75,0x10,0x07,0x72,0xa0,0x07,0x75,0x10,0x07,0x72,0xd0,0x06,0xf6,0x10,0x07, + 0x70,0x20,0x07,0x74,0xa0,0x07,0x71,0x00,0x07,0x72,0x40,0x07,0x7a,0x10,0x07,0x70, + 0x20,0x07,0x74,0xd0,0x06,0xee,0x80,0x07,0x7a,0x10,0x07,0x76,0xa0,0x07,0x73,0x20, + 0x07,0x43,0x98,0x03,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x2c,0x10,0x00,0x00, + 0x09,0x00,0x00,0x00,0x32,0x1e,0x98,0x10,0x19,0x11,0x4c,0x90,0x8c,0x09,0x26,0x47, + 0xc6,0x04,0x43,0xca,0x12,0x18,0x01,0x28,0x88,0x22,0x28,0x84,0x32,0xa0,0x1d,0x01, + 0x20,0x1d,0x4b,0x80,0x04,0x00,0x00,0x00,0x79,0x18,0x00,0x00,0xe9,0x00,0x00,0x00, + 0x1a,0x03,0x4c,0x10,0x97,0x29,0xa2,0x25,0x10,0xab,0x32,0xb9,0xb9,0xb4,0x37,0xb7, + 0x21,0x46,0x42,0x20,0x80,0x82,0x50,0xb9,0x1b,0x43,0x0b,0x93,0xfb,0x9a,0x4b,0xd3, + 0x2b,0x1b,0x62,0x24,0x01,0x22,0x24,0x05,0xe7,0x20,0x08,0x0e,0x8e,0xad,0x0c,0xa4, + 0xad,0x8c,0x2e,0x8c,0x0d,0xc4,0xae,0x4c,0x6e,0x2e,0xed,0xcd,0x0d,0x64,0x26,0x06, + 0x06,0x26,0xc6,0xc5,0xc6,0xe6,0x06,0x04,0xa5,0xad,0x8c,0x2e,0x8c,0xcd,0xac,0xac, + 0x65,0x26,0x06,0x06,0x26,0xc6,0xc5,0xc6,0xe6,0xc6,0x45,0x26,0x65,0x88,0x80,0x10, + 0x43,0x8c,0x24,0x48,0x86,0x44,0x60,0xd1,0x54,0x46,0x17,0xc6,0x36,0x04,0x41,0x8e, + 0x24,0x48,0x82,0x44,0xe0,0x16,0x96,0x26,0xe7,0x32,0xf6,0xd6,0x06,0x97,0xc6,0x56, + 0xe6,0x42,0x56,0xe6,0xf6,0x26,0xd7,0x36,0xf7,0x45,0x96,0x36,0x17,0x26,0xc6,0x56, + 0x36,0x44,0x40,0x12,0x72,0x61,0x69,0x72,0x2e,0x63,0x6f,0x6d,0x70,0x69,0x6c,0x65, + 0x2e,0x66,0x61,0x73,0x74,0x5f,0x6d,0x61,0x74,0x68,0x5f,0x65,0x6e,0x61,0x62,0x6c, + 0x65,0x43,0x04,0x64,0x21,0x19,0x84,0xa5,0xc9,0xb9,0x8c,0xbd,0xb5,0xc1,0xa5,0xb1, + 0x95,0xb9,0x98,0xc9,0x85,0xb5,0x95,0x89,0xd5,0x99,0x99,0x95,0xc9,0x7d,0x99,0x95, + 0xd1,0x8d,0xa1,0x7d,0x95,0xb9,0x85,0x89,0xb1,0x95,0x0d,0x11,0x90,0x86,0x51,0x58, + 0x9a,0x9c,0x8b,0x5d,0x99,0x1c,0x5d,0x19,0xde,0xd7,0x5b,0x1d,0x1d,0x5c,0x1d,0x1d, + 0x97,0xba,0xb9,0x32,0x39,0x14,0xb6,0xb7,0x31,0x37,0x98,0x14,0x46,0x61,0x69,0x72, + 0x2e,0x61,0x72,0x67,0x5f,0x74,0x79,0x70,0x65,0x5f,0x6e,0x61,0x6d,0x65,0x34,0xcc, + 0xd8,0xde,0xc2,0xe8,0x64,0xc8,0x84,0xa5,0xc9,0xb9,0x84,0xc9,0x9d,0x7d,0xb9,0x85, + 0xb5,0x95,0x51,0xa8,0xb3,0x1b,0xc2,0x20,0x0f,0x02,0x21,0x11,0x22,0x21,0x13,0x42, + 0x71,0xa9,0x9b,0x2b,0x93,0x43,0x61,0x7b,0x1b,0x73,0x8b,0x49,0xa1,0x61,0xc6,0xf6, + 0x16,0x46,0x47,0xc3,0x62,0xec,0x8d,0xed,0x4d,0x6e,0x08,0x83,0x3c,0x88,0x85,0x44, + 0xc8,0x85,0x4c,0x08,0x46,0x26,0x2c,0x4d,0xce,0x05,0xee,0x6d,0x2e,0x8d,0x2e,0xed, + 0xcd,0x8d,0xcb,0x19,0xdb,0x17,0xd4,0xdb,0x5c,0x1a,0x5d,0xda,0x9b,0xdb,0x10,0x05, + 0xd1,0x90,0x08,0xb9,0x90,0x09,0xd9,0x86,0x18,0x48,0x85,0x64,0x08,0x47,0x28,0x2c, + 0x4d,0xce,0xc5,0xae,0x4c,0x8e,0xae,0x0c,0xef,0x2b,0xcd,0x0d,0xae,0x8e,0x8e,0x52, + 0x58,0x9a,0x9c,0x0b,0xdb,0xdb,0x58,0x18,0x5d,0xda,0x9b,0xdb,0x57,0x9a,0x1b,0x59, + 0x19,0x1e,0xbd,0xb3,0x32,0xb7,0x32,0xb9,0x30,0xba,0x32,0x32,0x94,0xaf,0xaf,0xb0, + 0x34,0xb9,0x2f,0x38,0xb6,0xb0,0xb1,0x32,0xb4,0x37,0x36,0xb2,0x32,0xb9,0xaf,0xaf, + 0x14,0x22,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x43,0xa8,0x44,0x40,0x3c,0xe4, + 0x4b,0x84,0x24,0x40,0xc0,0x00,0x89,0x10,0x09,0x99,0x90,0x30,0x60,0x42,0x57,0x86, + 0x37,0xf6,0xf6,0x26,0x47,0x06,0x33,0x84,0x4a,0x02,0xc4,0x43,0xbe,0x24,0x48,0x02, + 0x04,0x0c,0x90,0x08,0x91,0x90,0x09,0x19,0x03,0x1a,0x63,0x6f,0x6c,0x6f,0x72,0x30, + 0x43,0xa8,0x84,0x40,0x3c,0xe4,0x4b,0x88,0x24,0x40,0xc0,0x00,0x89,0x90,0x0b,0x99, + 0x90,0x32,0xa0,0x12,0x96,0x26,0xe7,0x22,0x56,0x67,0x66,0x56,0x26,0xc7,0x27,0x2c, + 0x4d,0xce,0x45,0xac,0xce,0xcc,0xac,0x4c,0xee,0x6b,0x2e,0x4d,0xaf,0x8c,0x48,0x58, + 0x9a,0x9c,0x8b,0x5c,0x59,0x18,0x19,0xa9,0xb0,0x34,0x39,0x97,0x39,0x3a,0xb9,0xba, + 0x31,0xba,0x2f,0xba,0x3c,0xb8,0xb2,0xaf,0x34,0x37,0xb3,0x37,0x26,0x64,0x69,0x73, + 0x70,0x5f,0x73,0x69,0x7a,0x65,0x43,0x94,0x44,0x48,0x86,0x44,0x40,0x24,0x64,0x0d, + 0x18,0x85,0xa5,0xc9,0xb9,0x84,0xc9,0x9d,0x7d,0xd1,0xe5,0xc1,0x95,0x7d,0xcd,0xa5, + 0xe9,0x95,0xf1,0x0a,0x4b,0x93,0x73,0x09,0x93,0x3b,0xfb,0xa2,0xcb,0x83,0x2b,0xfb, + 0x0a,0x63,0x4b,0x3b,0x73,0xfb,0x9a,0x4b,0xd3,0x2b,0x63,0x62,0x37,0xf7,0x05,0x17, + 0x26,0x17,0xd6,0x36,0xc7,0xe1,0x4b,0x46,0x66,0x08,0x19,0x24,0x06,0x72,0x06,0x08, + 0x1a,0x24,0x03,0xf2,0x25,0x42,0x12,0x20,0x69,0x80,0xa8,0x01,0xc2,0x06,0x48,0x1b, + 0x24,0x03,0xe2,0x06,0xc9,0x80,0x44,0xc8,0x1b,0x20,0x13,0x02,0x07,0x43,0x10,0x44, + 0x0c,0x10,0x32,0x40,0xcc,0x00,0x89,0x83,0x21,0xc6,0x01,0x20,0x1d,0x22,0x07,0x7c, + 0xde,0xda,0xdc,0xd2,0xe0,0xde,0xe8,0xca,0xdc,0xe8,0x40,0xc6,0xd0,0xc2,0xe4,0xf8, + 0x4c,0xa5,0xb5,0xc1,0xb1,0x95,0x81,0x0c,0xad,0xac,0x80,0x50,0x09,0x05,0x05,0x0d, + 0x11,0x90,0x3a,0x18,0x62,0x20,0x74,0x80,0xd8,0xc1,0x72,0x0c,0x31,0x90,0x3b,0x40, + 0xee,0x60,0x39,0x46,0x44,0xec,0xc0,0x0e,0xf6,0xd0,0x0e,0x6e,0xd0,0x0e,0xef,0x40, + 0x0e,0xf5,0xc0,0x0e,0xe5,0xe0,0x06,0xe6,0xc0,0x0e,0xe1,0x70,0x0e,0xf3,0x30,0x45, + 0x08,0x86,0x11,0x0a,0x3b,0xb0,0x83,0x3d,0xb4,0x83,0x1b,0xa4,0x03,0x39,0x94,0x83, + 0x3b,0xd0,0xc3,0x94,0xa0,0x18,0xb1,0x84,0x43,0x3a,0xc8,0x83,0x1b,0xd8,0x43,0x39, + 0xc8,0xc3,0x3c,0xa4,0xc3,0x3b,0xb8,0xc3,0x94,0xc0,0x18,0x41,0x85,0x43,0x3a,0xc8, + 0x83,0x1b,0xb0,0x43,0x38,0xb8,0xc3,0x39,0xd4,0x43,0x38,0x9c,0x43,0x39,0xfc,0x82, + 0x3d,0x94,0x83,0x3c,0xcc,0x43,0x3a,0xbc,0x83,0x3b,0x4c,0x09,0x90,0x11,0x53,0x38, + 0xa4,0x83,0x3c,0xb8,0xc1,0x38,0xbc,0x43,0x3b,0xc0,0x43,0x3a,0xb0,0x43,0x39,0xfc, + 0xc2,0x3b,0xc0,0x03,0x3d,0xa4,0xc3,0x3b,0xb8,0xc3,0x3c,0x4c,0x19,0x14,0xc6,0x19, + 0xa1,0x84,0x43,0x3a,0xc8,0x83,0x1b,0xd8,0x43,0x39,0xc8,0x03,0x3d,0x94,0x03,0x3e, + 0x4c,0x09,0xe6,0x00,0x79,0x18,0x00,0x00,0x7b,0x00,0x00,0x00,0x33,0x08,0x80,0x1c, + 0xc4,0xe1,0x1c,0x66,0x14,0x01,0x3d,0x88,0x43,0x38,0x84,0xc3,0x8c,0x42,0x80,0x07, + 0x79,0x78,0x07,0x73,0x98,0x71,0x0c,0xe6,0x00,0x0f,0xed,0x10,0x0e,0xf4,0x80,0x0e, + 0x33,0x0c,0x42,0x1e,0xc2,0xc1,0x1d,0xce,0xa1,0x1c,0x66,0x30,0x05,0x3d,0x88,0x43, + 0x38,0x84,0x83,0x1b,0xcc,0x03,0x3d,0xc8,0x43,0x3d,0x8c,0x03,0x3d,0xcc,0x78,0x8c, + 0x74,0x70,0x07,0x7b,0x08,0x07,0x79,0x48,0x87,0x70,0x70,0x07,0x7a,0x70,0x03,0x76, + 0x78,0x87,0x70,0x20,0x87,0x19,0xcc,0x11,0x0e,0xec,0x90,0x0e,0xe1,0x30,0x0f,0x6e, + 0x30,0x0f,0xe3,0xf0,0x0e,0xf0,0x50,0x0e,0x33,0x10,0xc4,0x1d,0xde,0x21,0x1c,0xd8, + 0x21,0x1d,0xc2,0x61,0x1e,0x66,0x30,0x89,0x3b,0xbc,0x83,0x3b,0xd0,0x43,0x39,0xb4, + 0x03,0x3c,0xbc,0x83,0x3c,0x84,0x03,0x3b,0xcc,0xf0,0x14,0x76,0x60,0x07,0x7b,0x68, + 0x07,0x37,0x68,0x87,0x72,0x68,0x07,0x37,0x80,0x87,0x70,0x90,0x87,0x70,0x60,0x07, + 0x76,0x28,0x07,0x76,0xf8,0x05,0x76,0x78,0x87,0x77,0x80,0x87,0x5f,0x08,0x87,0x71, + 0x18,0x87,0x72,0x98,0x87,0x79,0x98,0x81,0x2c,0xee,0xf0,0x0e,0xee,0xe0,0x0e,0xf5, + 0xc0,0x0e,0xec,0x30,0x03,0x62,0xc8,0xa1,0x1c,0xe4,0xa1,0x1c,0xcc,0xa1,0x1c,0xe4, + 0xa1,0x1c,0xdc,0x61,0x1c,0xca,0x21,0x1c,0xc4,0x81,0x1d,0xca,0x61,0x06,0xd6,0x90, + 0x43,0x39,0xc8,0x43,0x39,0x98,0x43,0x39,0xc8,0x43,0x39,0xb8,0xc3,0x38,0x94,0x43, + 0x38,0x88,0x03,0x3b,0x94,0xc3,0x2f,0xbc,0x83,0x3c,0xfc,0x82,0x3b,0xd4,0x03,0x3b, + 0xb0,0xc3,0x0c,0xc7,0x69,0x87,0x70,0x58,0x87,0x72,0x70,0x83,0x74,0x68,0x07,0x78, + 0x60,0x87,0x74,0x18,0x87,0x74,0xa0,0x87,0x19,0xce,0x53,0x0f,0xee,0x00,0x0f,0xf2, + 0x50,0x0e,0xe4,0x90,0x0e,0xe3,0x40,0x0f,0xe1,0x20,0x0e,0xec,0x50,0x0e,0x33,0x20, + 0x28,0x1d,0xdc,0xc1,0x1e,0xc2,0x41,0x1e,0xd2,0x21,0x1c,0xdc,0x81,0x1e,0xdc,0xe0, + 0x1c,0xe4,0xe1,0x1d,0xea,0x01,0x1e,0x66,0x18,0x51,0x38,0xb0,0x43,0x3a,0x9c,0x83, + 0x3b,0xcc,0x50,0x24,0x76,0x60,0x07,0x7b,0x68,0x07,0x37,0x60,0x87,0x77,0x78,0x07, + 0x78,0x98,0x51,0x4c,0xf4,0x90,0x0f,0xf0,0x50,0x0e,0x33,0x1e,0x6a,0x1e,0xca,0x61, + 0x1c,0xe8,0x21,0x1d,0xde,0xc1,0x1d,0x7e,0x01,0x1e,0xe4,0xa1,0x1c,0xcc,0x21,0x1d, + 0xf0,0x61,0x06,0x54,0x85,0x83,0x38,0xcc,0xc3,0x3b,0xb0,0x43,0x3d,0xd0,0x43,0x39, + 0xfc,0xc2,0x3c,0xe4,0x43,0x3b,0x88,0xc3,0x3b,0xb0,0xc3,0x8c,0xc5,0x0a,0x87,0x79, + 0x98,0x87,0x77,0x18,0x87,0x74,0x08,0x07,0x7a,0x28,0x07,0x72,0x98,0x81,0x5c,0xe3, + 0x10,0x0e,0xec,0xc0,0x0e,0xe5,0x50,0x0e,0xf3,0x30,0x23,0xc1,0xd2,0x41,0x1e,0xe4, + 0xe1,0x17,0xd8,0xe1,0x1d,0xde,0x01,0x1e,0x66,0x50,0x59,0x38,0xa4,0x83,0x3c,0xb8, + 0x81,0x39,0xd4,0x83,0x3b,0x8c,0x03,0x3d,0xa4,0xc3,0x3b,0xb8,0xc3,0x2f,0x9c,0x83, + 0x3c,0xbc,0x43,0x3d,0xc0,0xc3,0x3c,0x00,0x71,0x20,0x00,0x00,0x02,0x00,0x00,0x00, + 0x06,0x50,0x30,0x00,0xd2,0xd0,0x00,0x00,0x61,0x20,0x00,0x00,0x23,0x00,0x00,0x00, + 0x13,0x04,0x41,0x2c,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0xd4,0x63,0x11,0x40, + 0x60,0x1c,0x73,0x10,0x42,0xf0,0x3c,0x94,0x33,0x00,0x14,0x63,0x09,0x20,0x08,0x82, + 0xf0,0x2f,0x80,0x20,0x08,0xc2,0xbf,0x30,0x96,0x00,0x82,0x20,0x08,0x82,0x01,0x08, + 0x82,0x20,0x08,0x0e,0x33,0x00,0x24,0x73,0x10,0xd7,0x65,0x55,0x34,0x33,0x00,0x04, + 0x63,0x04,0x20,0x08,0x82,0xf8,0x37,0x46,0x00,0x82,0x20,0x08,0x7f,0x33,0x00,0x00, + 0xe3,0x0d,0x4c,0x64,0x51,0x40,0x2c,0x0a,0xe8,0x63,0xc1,0x02,0x1f,0x0b,0x16,0xf9, + 0x0c,0x32,0x04,0xcb,0x33,0xc8,0x10,0x2c,0xd1,0x6c,0xc3,0x52,0x01,0xb3,0x0d,0x41, + 0x15,0xcc,0x36,0x04,0x83,0x90,0x41,0x40,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00, + 0x5b,0x86,0x20,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +static const uint8_t _simgui_fs_bytecode_metal_ios[2809] = { + 0x4d,0x54,0x4c,0x42,0x01,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xf9,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x20,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x6d,0x00,0x00,0x00, + 0x4e,0x41,0x4d,0x45,0x06,0x00,0x6d,0x61,0x69,0x6e,0x30,0x00,0x54,0x59,0x50,0x45, + 0x01,0x00,0x01,0x48,0x41,0x53,0x48,0x20,0x00,0xf0,0xa4,0xb3,0x95,0x4b,0xab,0x64, + 0x94,0xe7,0xa9,0x8a,0x69,0x27,0x6d,0x28,0x77,0x84,0x8d,0x3f,0xaf,0x7d,0x3c,0x39, + 0x31,0xc4,0xcb,0x53,0x6d,0xc0,0x0d,0xdf,0x08,0x4f,0x46,0x46,0x54,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0x45,0x52,0x53,0x08,0x00,0x01,0x00,0x08, + 0x00,0x01,0x00,0x01,0x00,0x45,0x4e,0x44,0x54,0x04,0x00,0x00,0x00,0x45,0x4e,0x44, + 0x54,0x04,0x00,0x00,0x00,0x45,0x4e,0x44,0x54,0xde,0xc0,0x17,0x0b,0x00,0x00,0x00, + 0x00,0x14,0x00,0x00,0x00,0x04,0x0a,0x00,0x00,0xff,0xff,0xff,0xff,0x42,0x43,0xc0, + 0xde,0x21,0x0c,0x00,0x00,0x7e,0x02,0x00,0x00,0x0b,0x82,0x20,0x00,0x02,0x00,0x00, + 0x00,0x12,0x00,0x00,0x00,0x07,0x81,0x23,0x91,0x41,0xc8,0x04,0x49,0x06,0x10,0x32, + 0x39,0x92,0x01,0x84,0x0c,0x25,0x05,0x08,0x19,0x1e,0x04,0x8b,0x62,0x80,0x14,0x45, + 0x02,0x42,0x92,0x0b,0x42,0xa4,0x10,0x32,0x14,0x38,0x08,0x18,0x49,0x0a,0x32,0x44, + 0x24,0x48,0x0a,0x90,0x21,0x23,0xc4,0x52,0x80,0x0c,0x19,0x21,0x72,0x24,0x07,0xc8, + 0x48,0x11,0x62,0xa8,0xa0,0xa8,0x40,0xc6,0xf0,0x01,0x00,0x00,0x00,0x51,0x18,0x00, + 0x00,0x89,0x00,0x00,0x00,0x1b,0xcc,0x25,0xf8,0xff,0xff,0xff,0xff,0x01,0x60,0x00, + 0x09,0xa8,0x88,0x71,0x78,0x07,0x79,0x90,0x87,0x72,0x18,0x07,0x7a,0x60,0x87,0x7c, + 0x68,0x03,0x79,0x78,0x87,0x7a,0x70,0x07,0x72,0x28,0x07,0x72,0x68,0x03,0x72,0x48, + 0x07,0x7b,0x48,0x07,0x72,0x28,0x87,0x36,0x98,0x87,0x78,0x90,0x07,0x7a,0x68,0x03, + 0x73,0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xcc,0x21,0x1c,0xd8,0x61, + 0x1e,0xca,0x01,0x20,0xc8,0x21,0x1d,0xe6,0x21,0x1c,0xc4,0x81,0x1d,0xca,0xa1,0x0d, + 0xe8,0x21,0x1c,0xd2,0x81,0x1d,0xda,0x60,0x1c,0xc2,0x81,0x1d,0xd8,0x61,0x1e,0x00, + 0x73,0x08,0x07,0x76,0x98,0x87,0x72,0x00,0x08,0x76,0x28,0x87,0x79,0x98,0x87,0x36, + 0x80,0x07,0x79,0x28,0x87,0x71,0x48,0x87,0x79,0x28,0x87,0x36,0x30,0x07,0x78,0x68, + 0x87,0x70,0x20,0x07,0xc0,0x1c,0xc2,0x81,0x1d,0xe6,0xa1,0x1c,0x00,0xc2,0x1d,0xde, + 0xa1,0x0d,0xcc,0x41,0x1e,0xc2,0xa1,0x1d,0xca,0xa1,0x0d,0xe0,0xe1,0x1d,0xd2,0xc1, + 0x1d,0xe8,0xa1,0x1c,0xe4,0xa1,0x0d,0xca,0x81,0x1d,0xd2,0xa1,0x1d,0x00,0x7a,0x90, + 0x87,0x7a,0x28,0x07,0x60,0x70,0x87,0x77,0x68,0x03,0x73,0x90,0x87,0x70,0x68,0x87, + 0x72,0x68,0x03,0x78,0x78,0x87,0x74,0x70,0x07,0x7a,0x28,0x07,0x79,0x68,0x83,0x72, + 0x60,0x87,0x74,0x68,0x87,0x36,0x70,0x87,0x77,0x70,0x87,0x36,0x60,0x87,0x72,0x08, + 0x07,0x73,0x00,0x08,0x77,0x78,0x87,0x36,0x48,0x07,0x77,0x30,0x87,0x79,0x68,0x03, + 0x73,0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e,0xea,0xa1, + 0x1c,0x00,0xc2,0x1d,0xde,0xa1,0x0d,0xd4,0xa1,0x1e,0xda,0x01,0x1e,0xda,0x80,0x1e, + 0xc2,0x41,0x1c,0xd8,0xa1,0x1c,0xe6,0x01,0x30,0x87,0x70,0x60,0x87,0x79,0x28,0x07, + 0x80,0x70,0x87,0x77,0x68,0x03,0x77,0x08,0x07,0x77,0x98,0x87,0x36,0x30,0x07,0x78, + 0x68,0x83,0x76,0x08,0x07,0x7a,0x40,0x07,0x80,0x1e,0xe4,0xa1,0x1e,0xca,0x01,0x20, + 0xdc,0xe1,0x1d,0xda,0x60,0x1e,0xd2,0xe1,0x1c,0xdc,0xa1,0x1c,0xc8,0xa1,0x0d,0xf4, + 0xa1,0x1c,0xe4,0xe1,0x1d,0xe6,0xa1,0x0d,0xcc,0x01,0x1e,0xda,0xa0,0x1d,0xc2,0x81, + 0x1e,0xd0,0x01,0xa0,0x07,0x79,0xa8,0x87,0x72,0x00,0x08,0x77,0x78,0x87,0x36,0xa0, + 0x07,0x79,0x08,0x07,0x78,0x80,0x87,0x74,0x70,0x87,0x73,0x68,0x83,0x76,0x08,0x07, + 0x7a,0x40,0x07,0x80,0x1e,0xe4,0xa1,0x1e,0xca,0x01,0x20,0xe6,0x81,0x1e,0xc2,0x61, + 0x1c,0xd6,0xa1,0x0d,0xe0,0x41,0x1e,0xde,0x81,0x1e,0xca,0x61,0x1c,0xe8,0xe1,0x1d, + 0xe4,0xa1,0x0d,0xc4,0xa1,0x1e,0xcc,0xc1,0x1c,0xca,0x41,0x1e,0xda,0x60,0x1e,0xd2, + 0x41,0x1f,0xca,0x01,0xc0,0x03,0x80,0xa8,0x07,0x77,0x98,0x87,0x70,0x30,0x87,0x72, + 0x68,0x03,0x73,0x80,0x87,0x36,0x68,0x87,0x70,0xa0,0x07,0x74,0x00,0xe8,0x41,0x1e, + 0xea,0xa1,0x1c,0x00,0xa2,0x1e,0xe6,0xa1,0x1c,0xda,0x60,0x1e,0xde,0xc1,0x1c,0xe8, + 0xa1,0x0d,0xcc,0x81,0x1d,0xde,0x21,0x1c,0xe8,0x01,0x30,0x87,0x70,0x60,0x87,0x79, + 0x28,0x07,0x60,0x83,0x21,0x0c,0xc0,0x02,0x54,0x1b,0x8c,0x81,0x00,0x16,0xa0,0xda, + 0x80,0x10,0xff,0xff,0xff,0xff,0x3f,0x00,0x0c,0x20,0x01,0xd5,0x06,0xa3,0x08,0x80, + 0x05,0xa8,0x36,0x18,0x86,0x00,0x2c,0x40,0x05,0x49,0x18,0x00,0x00,0x03,0x00,0x00, + 0x00,0x13,0x86,0x40,0x18,0x26,0x0c,0x44,0x61,0x00,0x00,0x00,0x00,0x89,0x20,0x00, + 0x00,0x1d,0x00,0x00,0x00,0x32,0x22,0x48,0x09,0x20,0x64,0x85,0x04,0x93,0x22,0xa4, + 0x84,0x04,0x93,0x22,0xe3,0x84,0xa1,0x90,0x14,0x12,0x4c,0x8a,0x8c,0x0b,0x84,0xa4, + 0x4c,0x10,0x48,0x33,0x00,0xc3,0x08,0x04,0x60,0x83,0x30,0x8c,0x20,0x00,0x47,0x49, + 0x53,0x44,0x09,0x93,0xff,0x4f,0xc4,0x35,0x51,0x11,0xf1,0xdb,0xc3,0x3f,0x8d,0x11, + 0x00,0x83,0x08,0x44,0x70,0x91,0x34,0x45,0x94,0x30,0xf9,0xbf,0x04,0x30,0xcf,0x42, + 0x44,0xff,0x34,0x46,0x00,0x0c,0x22,0x18,0x42,0x29,0xc4,0x08,0xe5,0x10,0x9a,0x23, + 0x08,0xe6,0x08,0xc0,0x60,0x18,0x41,0x58,0x0a,0x12,0xca,0x19,0x8a,0x29,0x40,0x6d, + 0x20,0x20,0x05,0xd6,0x08,0x00,0x00,0x00,0x00,0x13,0xa8,0x70,0x48,0x07,0x79,0xb0, + 0x03,0x3a,0x68,0x83,0x70,0x80,0x07,0x78,0x60,0x87,0x72,0x68,0x83,0x74,0x78,0x87, + 0x79,0xc8,0x03,0x37,0x80,0x03,0x37,0x80,0x83,0x0d,0xb7,0x51,0x0e,0x6d,0x00,0x0f, + 0x7a,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0,0x06,0xe9, + 0x10,0x07,0x7a,0x80,0x07,0x7a,0x80,0x07,0x6d,0x90,0x0e,0x78,0xa0,0x07,0x78,0xa0, + 0x07,0x78,0xd0,0x06,0xe9,0x10,0x07,0x76,0xa0,0x07,0x71,0x60,0x07,0x7a,0x10,0x07, + 0x76,0xd0,0x06,0xe9,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07,0x72, + 0xd0,0x06,0xe9,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0, + 0x06,0xe6,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xd0,0x06, + 0xe6,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0,0x06,0xf6, + 0x10,0x07,0x76,0xa0,0x07,0x71,0x60,0x07,0x7a,0x10,0x07,0x76,0xd0,0x06,0xf6,0x20, + 0x07,0x74,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xd0,0x06,0xf6,0x30,0x07, + 0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,0x07,0x72,0xd0,0x06,0xf6,0x40,0x07,0x78, + 0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0,0x06,0xf6,0x60,0x07,0x74,0xa0, + 0x07,0x76,0x40,0x07,0x7a,0x60,0x07,0x74,0xd0,0x06,0xf6,0x90,0x07,0x76,0xa0,0x07, + 0x71,0x20,0x07,0x78,0xa0,0x07,0x71,0x20,0x07,0x78,0xd0,0x06,0xf6,0x10,0x07,0x72, + 0x80,0x07,0x7a,0x10,0x07,0x72,0x80,0x07,0x7a,0x10,0x07,0x72,0x80,0x07,0x6d,0x60, + 0x0f,0x71,0x90,0x07,0x72,0xa0,0x07,0x72,0x50,0x07,0x76,0xa0,0x07,0x72,0x50,0x07, + 0x76,0xd0,0x06,0xf6,0x20,0x07,0x75,0x60,0x07,0x7a,0x20,0x07,0x75,0x60,0x07,0x7a, + 0x20,0x07,0x75,0x60,0x07,0x6d,0x60,0x0f,0x75,0x10,0x07,0x72,0xa0,0x07,0x75,0x10, + 0x07,0x72,0xa0,0x07,0x75,0x10,0x07,0x72,0xd0,0x06,0xf6,0x10,0x07,0x70,0x20,0x07, + 0x74,0xa0,0x07,0x71,0x00,0x07,0x72,0x40,0x07,0x7a,0x10,0x07,0x70,0x20,0x07,0x74, + 0xd0,0x06,0xee,0x80,0x07,0x7a,0x10,0x07,0x76,0xa0,0x07,0x73,0x20,0x07,0x43,0x98, + 0x04,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x21,0x8c,0x03,0x04,0x80,0x00,0x00, + 0x00,0x00,0x00,0x40,0x16,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x32,0x1e,0x98, + 0x10,0x19,0x11,0x4c,0x90,0x8c,0x09,0x26,0x47,0xc6,0x04,0x43,0x5a,0x25,0x30,0x02, + 0x50,0x04,0x85,0x50,0x10,0x65,0x40,0x70,0x2c,0x01,0x12,0x00,0x00,0x79,0x18,0x00, + 0x00,0xb9,0x00,0x00,0x00,0x1a,0x03,0x4c,0x10,0x97,0x29,0xa2,0x25,0x10,0xab,0x32, + 0xb9,0xb9,0xb4,0x37,0xb7,0x21,0xc6,0x42,0x3c,0x00,0x84,0x50,0xb9,0x1b,0x43,0x0b, + 0x93,0xfb,0x9a,0x4b,0xd3,0x2b,0x1b,0x62,0x2c,0xc2,0x23,0x2c,0x05,0xe7,0x20,0x08, + 0x0e,0x8e,0xad,0x0c,0xa4,0xad,0x8c,0x2e,0x8c,0x0d,0xc4,0xae,0x4c,0x6e,0x2e,0xed, + 0xcd,0x0d,0x64,0x26,0x06,0x06,0x26,0xc6,0xc5,0xc6,0xe6,0x06,0x04,0xa5,0xad,0x8c, + 0x2e,0x8c,0xcd,0xac,0xac,0x65,0x26,0x06,0x06,0x26,0xc6,0xc5,0xc6,0xe6,0xc6,0x45, + 0x26,0x65,0x88,0xf0,0x10,0x43,0x8c,0x45,0x58,0x8c,0x65,0x60,0xd1,0x54,0x46,0x17, + 0xc6,0x36,0x04,0x79,0x8e,0x45,0x58,0x84,0x65,0xe0,0x16,0x96,0x26,0xe7,0x32,0xf6, + 0xd6,0x06,0x97,0xc6,0x56,0xe6,0x42,0x56,0xe6,0xf6,0x26,0xd7,0x36,0xf7,0x45,0x96, + 0x36,0x17,0x26,0xc6,0x56,0x36,0x44,0x78,0x12,0x72,0x61,0x69,0x72,0x2e,0x63,0x6f, + 0x6d,0x70,0x69,0x6c,0x65,0x2e,0x66,0x61,0x73,0x74,0x5f,0x6d,0x61,0x74,0x68,0x5f, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x43,0x84,0x67,0x21,0x19,0x84,0xa5,0xc9,0xb9,0x8c, + 0xbd,0xb5,0xc1,0xa5,0xb1,0x95,0xb9,0x98,0xc9,0x85,0xb5,0x95,0x89,0xd5,0x99,0x99, + 0x95,0xc9,0x7d,0x99,0x95,0xd1,0x8d,0xa1,0x7d,0x95,0xb9,0x85,0x89,0xb1,0x95,0x0d, + 0x11,0x9e,0x86,0x51,0x58,0x9a,0x9c,0x8b,0x5c,0x99,0x1b,0x59,0x99,0xdc,0x17,0x5d, + 0x98,0xdc,0x59,0x19,0x1d,0xa3,0xb0,0x34,0x39,0x97,0x30,0xb9,0xb3,0x2f,0xba,0x3c, + 0xb8,0xb2,0x2f,0xb7,0xb0,0xb6,0x32,0x1a,0x66,0x6c,0x6f,0x61,0x74,0x34,0x64,0xc2, + 0xd2,0xe4,0x5c,0xc2,0xe4,0xce,0xbe,0xdc,0xc2,0xda,0xca,0xa8,0x98,0xc9,0x85,0x9d, + 0x7d,0x8d,0xbd,0xb1,0xbd,0xc9,0x0d,0x61,0x9e,0x67,0x19,0x1e,0xe8,0x89,0x1e,0xe9, + 0x99,0x86,0x08,0x0f,0x45,0x29,0x2c,0x4d,0xce,0xc5,0x4c,0x2e,0xec,0xac,0xad,0xcc, + 0x8d,0xee,0x2b,0xcd,0x0d,0xae,0x8e,0x8e,0x4b,0xdd,0x5c,0x99,0x1c,0x0a,0xdb,0xdb, + 0x98,0x1b,0x4c,0x0a,0x95,0xb0,0x34,0x39,0x97,0xb1,0x32,0x37,0xba,0x32,0x39,0x3e, + 0x61,0x69,0x72,0x2e,0x70,0x65,0x72,0x73,0x70,0x65,0x63,0x74,0x69,0x76,0x65,0x34, + 0xcc,0xd8,0xde,0xc2,0xe8,0x64,0x28,0xd4,0xd9,0x0d,0x91,0x96,0xe1,0xb1,0x9e,0xeb, + 0xc1,0x9e,0xec,0x81,0x1e,0xed,0x91,0x9e,0x8d,0x4b,0xdd,0x5c,0x99,0x1c,0x0a,0xdb, + 0xdb,0x98,0x5b,0x4c,0x0a,0x8b,0xb1,0x37,0xb6,0x37,0xb9,0x21,0xd2,0x22,0x3c,0xd6, + 0xd3,0x3d,0xd8,0x93,0x3d,0xd0,0x13,0x3d,0xd2,0xe3,0x71,0x09,0x4b,0x93,0x73,0xa1, + 0x2b,0xc3,0xa3,0xab,0x93,0x2b,0xa3,0x14,0x96,0x26,0xe7,0xc2,0xf6,0x36,0x16,0x46, + 0x97,0xf6,0xe6,0xf6,0x95,0xe6,0x46,0x56,0x86,0x47,0x25,0x2c,0x4d,0xce,0x65,0x2e, + 0xac,0x0d,0x8e,0xad,0x8c,0x18,0x5d,0x19,0x1e,0x5d,0x9d,0x5c,0x99,0x0c,0x19,0x8f, + 0x19,0xdb,0x5b,0x18,0x1d,0x0b,0xc8,0x5c,0x58,0x1b,0x1c,0x5b,0x99,0x0f,0x07,0xba, + 0x32,0xbc,0x21,0xd4,0x42,0x3c,0x60,0xf0,0x84,0xc1,0x32,0x2c,0xc2,0x23,0x06,0x0f, + 0xf4,0x8c,0xc1,0x23,0x3d,0x64,0xc0,0x25,0x2c,0x4d,0xce,0x65,0x2e,0xac,0x0d,0x8e, + 0xad,0x4c,0x8e,0xc7,0x5c,0x58,0x1b,0x1c,0x5b,0x99,0x1c,0x87,0xb9,0x36,0xb8,0x21, + 0xd2,0x72,0x3c,0x66,0xf0,0x84,0xc1,0x32,0x2c,0xc2,0x03,0x3d,0x67,0xf0,0x48,0x0f, + 0x1a,0x0c,0x41,0x1e,0xee,0xf9,0x9e,0x32,0x78,0xd2,0x60,0x88,0x91,0x00,0x4f,0xf5, + 0xa8,0xc1,0x88,0x88,0x1d,0xd8,0xc1,0x1e,0xda,0xc1,0x0d,0xda,0xe1,0x1d,0xc8,0xa1, + 0x1e,0xd8,0xa1,0x1c,0xdc,0xc0,0x1c,0xd8,0x21,0x1c,0xce,0x61,0x1e,0xa6,0x08,0xc1, + 0x30,0x42,0x61,0x07,0x76,0xb0,0x87,0x76,0x70,0x83,0x74,0x20,0x87,0x72,0x70,0x07, + 0x7a,0x98,0x12,0x14,0x23,0x96,0x70,0x48,0x07,0x79,0x70,0x03,0x7b,0x28,0x07,0x79, + 0x98,0x87,0x74,0x78,0x07,0x77,0x98,0x12,0x18,0x23,0xa8,0x70,0x48,0x07,0x79,0x70, + 0x03,0x76,0x08,0x07,0x77,0x38,0x87,0x7a,0x08,0x87,0x73,0x28,0x87,0x5f,0xb0,0x87, + 0x72,0x90,0x87,0x79,0x48,0x87,0x77,0x70,0x87,0x29,0x01,0x32,0x62,0x0a,0x87,0x74, + 0x90,0x07,0x37,0x18,0x87,0x77,0x68,0x07,0x78,0x48,0x07,0x76,0x28,0x87,0x5f,0x78, + 0x07,0x78,0xa0,0x87,0x74,0x78,0x07,0x77,0x98,0x87,0x29,0x83,0xc2,0x38,0x23,0x98, + 0x70,0x48,0x07,0x79,0x70,0x03,0x73,0x90,0x87,0x70,0x38,0x87,0x76,0x28,0x07,0x77, + 0xa0,0x87,0x29,0xc1,0x1a,0x00,0x00,0x00,0x00,0x79,0x18,0x00,0x00,0x7b,0x00,0x00, + 0x00,0x33,0x08,0x80,0x1c,0xc4,0xe1,0x1c,0x66,0x14,0x01,0x3d,0x88,0x43,0x38,0x84, + 0xc3,0x8c,0x42,0x80,0x07,0x79,0x78,0x07,0x73,0x98,0x71,0x0c,0xe6,0x00,0x0f,0xed, + 0x10,0x0e,0xf4,0x80,0x0e,0x33,0x0c,0x42,0x1e,0xc2,0xc1,0x1d,0xce,0xa1,0x1c,0x66, + 0x30,0x05,0x3d,0x88,0x43,0x38,0x84,0x83,0x1b,0xcc,0x03,0x3d,0xc8,0x43,0x3d,0x8c, + 0x03,0x3d,0xcc,0x78,0x8c,0x74,0x70,0x07,0x7b,0x08,0x07,0x79,0x48,0x87,0x70,0x70, + 0x07,0x7a,0x70,0x03,0x76,0x78,0x87,0x70,0x20,0x87,0x19,0xcc,0x11,0x0e,0xec,0x90, + 0x0e,0xe1,0x30,0x0f,0x6e,0x30,0x0f,0xe3,0xf0,0x0e,0xf0,0x50,0x0e,0x33,0x10,0xc4, + 0x1d,0xde,0x21,0x1c,0xd8,0x21,0x1d,0xc2,0x61,0x1e,0x66,0x30,0x89,0x3b,0xbc,0x83, + 0x3b,0xd0,0x43,0x39,0xb4,0x03,0x3c,0xbc,0x83,0x3c,0x84,0x03,0x3b,0xcc,0xf0,0x14, + 0x76,0x60,0x07,0x7b,0x68,0x07,0x37,0x68,0x87,0x72,0x68,0x07,0x37,0x80,0x87,0x70, + 0x90,0x87,0x70,0x60,0x07,0x76,0x28,0x07,0x76,0xf8,0x05,0x76,0x78,0x87,0x77,0x80, + 0x87,0x5f,0x08,0x87,0x71,0x18,0x87,0x72,0x98,0x87,0x79,0x98,0x81,0x2c,0xee,0xf0, + 0x0e,0xee,0xe0,0x0e,0xf5,0xc0,0x0e,0xec,0x30,0x03,0x62,0xc8,0xa1,0x1c,0xe4,0xa1, + 0x1c,0xcc,0xa1,0x1c,0xe4,0xa1,0x1c,0xdc,0x61,0x1c,0xca,0x21,0x1c,0xc4,0x81,0x1d, + 0xca,0x61,0x06,0xd6,0x90,0x43,0x39,0xc8,0x43,0x39,0x98,0x43,0x39,0xc8,0x43,0x39, + 0xb8,0xc3,0x38,0x94,0x43,0x38,0x88,0x03,0x3b,0x94,0xc3,0x2f,0xbc,0x83,0x3c,0xfc, + 0x82,0x3b,0xd4,0x03,0x3b,0xb0,0xc3,0x0c,0xc7,0x69,0x87,0x70,0x58,0x87,0x72,0x70, + 0x83,0x74,0x68,0x07,0x78,0x60,0x87,0x74,0x18,0x87,0x74,0xa0,0x87,0x19,0xce,0x53, + 0x0f,0xee,0x00,0x0f,0xf2,0x50,0x0e,0xe4,0x90,0x0e,0xe3,0x40,0x0f,0xe1,0x20,0x0e, + 0xec,0x50,0x0e,0x33,0x20,0x28,0x1d,0xdc,0xc1,0x1e,0xc2,0x41,0x1e,0xd2,0x21,0x1c, + 0xdc,0x81,0x1e,0xdc,0xe0,0x1c,0xe4,0xe1,0x1d,0xea,0x01,0x1e,0x66,0x18,0x51,0x38, + 0xb0,0x43,0x3a,0x9c,0x83,0x3b,0xcc,0x50,0x24,0x76,0x60,0x07,0x7b,0x68,0x07,0x37, + 0x60,0x87,0x77,0x78,0x07,0x78,0x98,0x51,0x4c,0xf4,0x90,0x0f,0xf0,0x50,0x0e,0x33, + 0x1e,0x6a,0x1e,0xca,0x61,0x1c,0xe8,0x21,0x1d,0xde,0xc1,0x1d,0x7e,0x01,0x1e,0xe4, + 0xa1,0x1c,0xcc,0x21,0x1d,0xf0,0x61,0x06,0x54,0x85,0x83,0x38,0xcc,0xc3,0x3b,0xb0, + 0x43,0x3d,0xd0,0x43,0x39,0xfc,0xc2,0x3c,0xe4,0x43,0x3b,0x88,0xc3,0x3b,0xb0,0xc3, + 0x8c,0xc5,0x0a,0x87,0x79,0x98,0x87,0x77,0x18,0x87,0x74,0x08,0x07,0x7a,0x28,0x07, + 0x72,0x98,0x81,0x5c,0xe3,0x10,0x0e,0xec,0xc0,0x0e,0xe5,0x50,0x0e,0xf3,0x30,0x23, + 0xc1,0xd2,0x41,0x1e,0xe4,0xe1,0x17,0xd8,0xe1,0x1d,0xde,0x01,0x1e,0x66,0x50,0x59, + 0x38,0xa4,0x83,0x3c,0xb8,0x81,0x39,0xd4,0x83,0x3b,0x8c,0x03,0x3d,0xa4,0xc3,0x3b, + 0xb8,0xc3,0x2f,0x9c,0x83,0x3c,0xbc,0x43,0x3d,0xc0,0xc3,0x3c,0x00,0x71,0x20,0x00, + 0x00,0x08,0x00,0x00,0x00,0x16,0xb0,0x01,0x48,0xe4,0x4b,0x00,0xf3,0x2c,0xc4,0x3f, + 0x11,0xd7,0x44,0x45,0xc4,0x6f,0x0f,0x7e,0x85,0x17,0xb7,0x6d,0x00,0x05,0x03,0x20, + 0x0d,0x0d,0x00,0x00,0x00,0x61,0x20,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x04,0x41, + 0x2c,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x46,0x00,0x48,0x8d,0x00,0xd4, + 0x00,0x89,0x19,0x00,0x02,0x23,0x00,0x00,0x00,0x23,0x06,0x8a,0x10,0x44,0x87,0x91, + 0x0c,0x05,0x11,0x58,0x90,0xc8,0x67,0xb6,0x81,0x08,0x80,0x0c,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +static const char _simgui_vs_source_metal_sim[672] = { + 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, + 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, + 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, + 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, + 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x76, + 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x32,0x20,0x64,0x69,0x73,0x70,0x5f,0x73,0x69,0x7a,0x65,0x3b, + 0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e, + 0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x32,0x20,0x75,0x76,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63, + 0x6e,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c, + 0x6f,0x63,0x6e,0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x61,0x74,0x34,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20, + 0x5b,0x5b,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b, + 0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69, + 0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70, + 0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62, + 0x75,0x74,0x65,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x20,0x5b, + 0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x31,0x29,0x5d,0x5d,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x30,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x32, + 0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x65,0x72,0x74,0x65,0x78,0x20, + 0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x28, + 0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,0x74, + 0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61, + 0x6e,0x74,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x26,0x20,0x5f,0x32, + 0x32,0x20,0x5b,0x5b,0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29, + 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74, + 0x20,0x6f,0x75,0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f, + 0x75,0x74,0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x28,0x69,0x6e,0x2e,0x70,0x6f,0x73, + 0x69,0x74,0x69,0x6f,0x6e,0x20,0x2f,0x20,0x5f,0x32,0x32,0x2e,0x64,0x69,0x73,0x70, + 0x5f,0x73,0x69,0x7a,0x65,0x29,0x20,0x2d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28, + 0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x32, + 0x2e,0x30,0x2c,0x20,0x2d,0x32,0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c,0x20, + 0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x75,0x76, + 0x20,0x3d,0x20,0x69,0x6e,0x2e,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, + 0x20,0x69,0x6e,0x2e,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + +}; +static const char _simgui_fs_source_metal_sim[436] = { + 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, + 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, + 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, + 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, + 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d, + 0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x5b,0x5b,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d, + 0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f, + 0x69,0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20, + 0x75,0x76,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,0x29, + 0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63, + 0x6f,0x6c,0x6f,0x72,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e, + 0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d,0x65, + 0x6e,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69, + 0x6e,0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b, + 0x5b,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x74,0x65,0x78, + 0x74,0x75,0x72,0x65,0x32,0x64,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x3e,0x20,0x74,0x65, + 0x78,0x20,0x5b,0x5b,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x30,0x29,0x5d,0x5d, + 0x2c,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x20,0x73,0x6d,0x70,0x20,0x5b,0x5b, + 0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75, + 0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e, + 0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78, + 0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,0x20,0x69,0x6e,0x2e, + 0x75,0x76,0x29,0x20,0x2a,0x20,0x69,0x6e,0x2e,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a, + 0x7d,0x0a,0x0a,0x00, +}; +#elif defined(SOKOL_D3D11) +static const uint8_t _simgui_vs_bytecode_hlsl4[892] = { + 0x44,0x58,0x42,0x43,0x0d,0xbd,0x9e,0x9e,0x7d,0xc0,0x2b,0x54,0x88,0xf9,0xca,0x89, + 0x32,0xe4,0x0c,0x59,0x01,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x05,0x00,0x00,0x00, + 0x34,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0xd0,0x01,0x00,0x00, + 0x00,0x03,0x00,0x00,0x52,0x44,0x45,0x46,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x04,0xfe,0xff, + 0x10,0x81,0x00,0x00,0x98,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x00,0xab,0xab,0x3c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x60,0x00,0x00,0x00, + 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x88,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5f,0x32,0x32,0x5f,0x64,0x69,0x73,0x70,0x5f,0x73,0x69,0x7a, + 0x65,0x00,0xab,0xab,0x01,0x00,0x03,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x28,0x52, + 0x29,0x20,0x48,0x4c,0x53,0x4c,0x20,0x53,0x68,0x61,0x64,0x65,0x72,0x20,0x43,0x6f, + 0x6d,0x70,0x69,0x6c,0x65,0x72,0x20,0x31,0x30,0x2e,0x31,0x00,0x49,0x53,0x47,0x4e, + 0x5c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x50,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x03,0x00,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x50,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00, + 0x0f,0x0f,0x00,0x00,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x00,0xab,0xab,0xab, + 0x4f,0x53,0x47,0x4e,0x68,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00, + 0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x03,0x0c,0x00,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, + 0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44, + 0x00,0x53,0x56,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0xab,0xab,0xab, + 0x53,0x48,0x44,0x52,0x28,0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x4a,0x00,0x00,0x00, + 0x59,0x00,0x00,0x04,0x46,0x8e,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x5f,0x00,0x00,0x03,0x32,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x5f,0x00,0x00,0x03, + 0x32,0x10,0x10,0x00,0x01,0x00,0x00,0x00,0x5f,0x00,0x00,0x03,0xf2,0x10,0x10,0x00, + 0x02,0x00,0x00,0x00,0x65,0x00,0x00,0x03,0x32,0x20,0x10,0x00,0x00,0x00,0x00,0x00, + 0x65,0x00,0x00,0x03,0xf2,0x20,0x10,0x00,0x01,0x00,0x00,0x00,0x67,0x00,0x00,0x04, + 0xf2,0x20,0x10,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x68,0x00,0x00,0x02, + 0x01,0x00,0x00,0x00,0x36,0x00,0x00,0x05,0x32,0x20,0x10,0x00,0x00,0x00,0x00,0x00, + 0x46,0x10,0x10,0x00,0x01,0x00,0x00,0x00,0x36,0x00,0x00,0x05,0xf2,0x20,0x10,0x00, + 0x01,0x00,0x00,0x00,0x46,0x1e,0x10,0x00,0x02,0x00,0x00,0x00,0x0e,0x00,0x00,0x08, + 0x32,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x10,0x10,0x00,0x00,0x00,0x00,0x00, + 0x46,0x80,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a, + 0x32,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x00,0x10,0x00,0x00,0x00,0x00,0x00, + 0x02,0x40,0x00,0x00,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x0a,0x32,0x20,0x10,0x00,0x02,0x00,0x00,0x00, + 0x46,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0x00,0x40, + 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x08, + 0xc2,0x20,0x10,0x00,0x02,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x80,0x3f,0x3e,0x00,0x00,0x01, + 0x53,0x54,0x41,0x54,0x74,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; +static const uint8_t _simgui_fs_bytecode_hlsl4[608] = { + 0x44,0x58,0x42,0x43,0x3a,0xa7,0x41,0x21,0xb4,0x2d,0xa7,0x6e,0xfe,0x31,0xb0,0xe0, + 0x14,0xe0,0xdf,0x5a,0x01,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x05,0x00,0x00,0x00, + 0x34,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x48,0x01,0x00,0x00, + 0xe4,0x01,0x00,0x00,0x52,0x44,0x45,0x46,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x04,0xff,0xff, + 0x10,0x81,0x00,0x00,0x64,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x00,0x00,0x00, + 0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x73,0x6d,0x70,0x00,0x74,0x65,0x78,0x00, + 0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x28,0x52,0x29,0x20,0x48,0x4c, + 0x53,0x4c,0x20,0x53,0x68,0x61,0x64,0x65,0x72,0x20,0x43,0x6f,0x6d,0x70,0x69,0x6c, + 0x65,0x72,0x20,0x31,0x30,0x2e,0x31,0x00,0x49,0x53,0x47,0x4e,0x44,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00, + 0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x0f,0x0f,0x00,0x00,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44, + 0x00,0xab,0xab,0xab,0x4f,0x53,0x47,0x4e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x53,0x56,0x5f,0x54, + 0x61,0x72,0x67,0x65,0x74,0x00,0xab,0xab,0x53,0x48,0x44,0x52,0x94,0x00,0x00,0x00, + 0x40,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x5a,0x00,0x00,0x03,0x00,0x60,0x10,0x00, + 0x00,0x00,0x00,0x00,0x58,0x18,0x00,0x04,0x00,0x70,0x10,0x00,0x00,0x00,0x00,0x00, + 0x55,0x55,0x00,0x00,0x62,0x10,0x00,0x03,0x32,0x10,0x10,0x00,0x00,0x00,0x00,0x00, + 0x62,0x10,0x00,0x03,0xf2,0x10,0x10,0x00,0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x03, + 0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x02,0x01,0x00,0x00,0x00, + 0x45,0x00,0x00,0x09,0xf2,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x10,0x10,0x00, + 0x00,0x00,0x00,0x00,0x46,0x7e,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x10,0x00, + 0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x07,0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00, + 0x46,0x0e,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x1e,0x10,0x00,0x01,0x00,0x00,0x00, + 0x3e,0x00,0x00,0x01,0x53,0x54,0x41,0x54,0x74,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + +}; +#elif defined(SOKOL_WGPU) +static const char _simgui_vs_source_wgsl[1083] = { + 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, + 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, + 0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x7b,0x0a,0x20,0x20,0x2f,0x2a, + 0x20,0x40,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x30,0x29,0x20,0x2a,0x2f,0x0a,0x20, + 0x20,0x64,0x69,0x73,0x70,0x5f,0x73,0x69,0x7a,0x65,0x20,0x3a,0x20,0x76,0x65,0x63, + 0x32,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61, + 0x74,0x65,0x3e,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5f,0x31,0x20,0x3a, + 0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28, + 0x30,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x30,0x29,0x20,0x76, + 0x61,0x72,0x3c,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x3e,0x20,0x78,0x5f,0x32,0x32, + 0x20,0x3a,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x3b,0x0a,0x0a,0x76, + 0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x20,0x3a, + 0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, + 0x76,0x61,0x74,0x65,0x3e,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x20, + 0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72, + 0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3a,0x20,0x76, + 0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61, + 0x74,0x65,0x3e,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x20,0x3a,0x20,0x76,0x65,0x63, + 0x34,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65, + 0x3e,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20, + 0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f, + 0x31,0x28,0x29,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x31,0x39, + 0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74, + 0x69,0x6f,0x6e,0x5f,0x31,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32, + 0x35,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x78,0x5f,0x32,0x32, + 0x2e,0x64,0x69,0x73,0x70,0x5f,0x73,0x69,0x7a,0x65,0x3b,0x0a,0x20,0x20,0x6c,0x65, + 0x74,0x20,0x78,0x5f,0x33,0x33,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d, + 0x20,0x28,0x28,0x28,0x78,0x5f,0x31,0x39,0x20,0x2f,0x20,0x78,0x5f,0x32,0x35,0x29, + 0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x66,0x28,0x30,0x2e,0x35,0x66,0x2c,0x20,0x30, + 0x2e,0x35,0x66,0x29,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x32,0x66,0x28,0x32,0x2e, + 0x30,0x66,0x2c,0x20,0x2d,0x32,0x2e,0x30,0x66,0x29,0x29,0x3b,0x0a,0x20,0x20,0x67, + 0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63, + 0x34,0x66,0x28,0x78,0x5f,0x33,0x33,0x2e,0x78,0x2c,0x20,0x78,0x5f,0x33,0x33,0x2e, + 0x79,0x2c,0x20,0x30,0x2e,0x35,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a, + 0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x34,0x33,0x20,0x3a,0x20,0x76,0x65,0x63, + 0x32,0x66,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a, + 0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x78,0x5f,0x34,0x33,0x3b,0x0a,0x20,0x20,0x6c, + 0x65,0x74,0x20,0x78,0x5f,0x34,0x37,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20, + 0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x20,0x3d,0x20,0x78,0x5f,0x34,0x37,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75, + 0x72,0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61, + 0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x40,0x62,0x75,0x69,0x6c, + 0x74,0x69,0x6e,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x0a,0x20,0x20, + 0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x76,0x65, + 0x63,0x34,0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x28,0x30,0x29,0x0a,0x20,0x20,0x75,0x76,0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63, + 0x32,0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28, + 0x31,0x29,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x3a,0x20,0x76, + 0x65,0x63,0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x76,0x65,0x72,0x74,0x65,0x78, + 0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x28,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69, + 0x6f,0x6e,0x28,0x30,0x29,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5f,0x31, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x2c,0x20, + 0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x31,0x29,0x20,0x74,0x65,0x78, + 0x63,0x6f,0x6f,0x72,0x64,0x30,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76, + 0x65,0x63,0x32,0x66,0x2c,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28, + 0x32,0x29,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20, + 0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x29,0x20,0x2d,0x3e,0x20,0x6d,0x61,0x69,0x6e, + 0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x5f,0x31,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5f,0x31, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f, + 0x72,0x64,0x30,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x20, + 0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a, + 0x20,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x3b,0x0a,0x20,0x20,0x72,0x65, + 0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x28,0x67,0x6c, + 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x75,0x76,0x2c,0x20,0x63, + 0x6f,0x6c,0x6f,0x72,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +}; +static const char _simgui_fs_source_wgsl[630] = { + 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, + 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, + 0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, + 0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75, + 0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x33,0x32, + 0x29,0x20,0x76,0x61,0x72,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x40,0x67, + 0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67, + 0x28,0x34,0x38,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73, + 0x61,0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, + 0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66, + 0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a, + 0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,0x0a,0x20,0x20, + 0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,0x33,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66, + 0x20,0x3d,0x20,0x75,0x76,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32, + 0x34,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20,0x3d,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x53,0x61,0x6d,0x70,0x6c,0x65,0x28,0x74,0x65,0x78,0x2c,0x20,0x73, + 0x6d,0x70,0x2c,0x20,0x78,0x5f,0x32,0x33,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74, + 0x20,0x78,0x5f,0x32,0x37,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20,0x3d,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f, + 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x28,0x78,0x5f,0x32,0x34,0x20,0x2a,0x20,0x78,0x5f, + 0x32,0x37,0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x0a,0x7d, + 0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75, + 0x74,0x20,0x7b,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28, + 0x30,0x29,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f, + 0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x66, + 0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x28, + 0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x20,0x75,0x76,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x2c,0x20,0x40, + 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x31,0x29,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x29, + 0x20,0x2d,0x3e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20, + 0x20,0x75,0x76,0x20,0x3d,0x20,0x75,0x76,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a, + 0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28, + 0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e, + 0x5f,0x6f,0x75,0x74,0x28,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29, + 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +}; +#elif defined(SOKOL_DUMMY_BACKEND) +static const char* _simgui_vs_source_dummy = ""; +static const char* _simgui_fs_source_dummy = ""; +#else +#error "Please define one of SOKOL_GLCORE33, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND!" +#endif + +#if !defined(SOKOL_IMGUI_NO_SOKOL_APP) +static void _simgui_set_clipboard(void* user_data, const char* text) { + (void)user_data; + sapp_set_clipboard_string(text); +} + +static const char* _simgui_get_clipboard(void* user_data) { + (void)user_data; + return sapp_get_clipboard_string(); +} +#endif + +#if defined(__EMSCRIPTEN__) && !defined(SOKOL_DUMMY_BACKEND) +EM_JS(int, simgui_js_is_osx, (void), { + if (navigator.userAgent.includes('Macintosh')) { + return 1; + } else { + return 0; + } +}); +#endif + +// ██ ██████ ██████ ██████ ██ ███ ██ ██████ +// ██ ██ ██ ██ ██ ██ ████ ██ ██ +// ██ ██ ██ ██ ███ ██ ███ ██ ██ ██ ██ ██ ███ +// ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +// ███████ ██████ ██████ ██████ ██ ██ ████ ██████ +// +// >>logging +#if defined(SOKOL_DEBUG) +#define _SIMGUI_LOGITEM_XMACRO(item,msg) #item ": " msg, +static const char* _simgui_log_messages[] = { + _SIMGUI_LOG_ITEMS +}; +#undef _SIMGUI_LOGITEM_XMACRO +#endif // SOKOL_DEBUG + +#define _SIMGUI_PANIC(code) _simgui_log(SIMGUI_LOGITEM_ ##code, 0, 0, __LINE__) +#define _SIMGUI_ERROR(code) _simgui_log(SIMGUI_LOGITEM_ ##code, 1, 0, __LINE__) +#define _SIMGUI_WARN(code) _simgui_log(SIMGUI_LOGITEM_ ##code, 2, 0, __LINE__) +#define _SIMGUI_INFO(code) _simgui_log(SIMGUI_LOGITEM_ ##code, 3, 0, __LINE__) +#define _SIMGUI_LOGMSG(code,msg) _simgui_log(SIMGUI_LOGITEM_ ##code, 3, msg, __LINE__) + +static void _simgui_log(simgui_log_item_t log_item, uint32_t log_level, const char* msg, uint32_t line_nr) { + if (_simgui.desc.logger.func) { + const char* filename = 0; + #if defined(SOKOL_DEBUG) + filename = __FILE__; + if (0 == msg) { + msg = _simgui_log_messages[log_item]; + } + #endif + _simgui.desc.logger.func("simgui", log_level, log_item, msg, line_nr, filename, _simgui.desc.logger.user_data); + } else { + // for log level PANIC it would be 'undefined behaviour' to continue + if (log_level == 0) { + abort(); + } + } +} + +// ███ ███ ███████ ███ ███ ██████ ██████ ██ ██ +// ████ ████ ██ ████ ████ ██ ██ ██ ██ ██ ██ +// ██ ████ ██ █████ ██ ████ ██ ██ ██ ██████ ████ +// ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +// ██ ██ ███████ ██ ██ ██████ ██ ██ ██ +// +// >>memory +static void _simgui_clear(void* ptr, size_t size) { + SOKOL_ASSERT(ptr && (size > 0)); + memset(ptr, 0, size); +} + +static void* _simgui_malloc(size_t size) { + SOKOL_ASSERT(size > 0); + void* ptr; + if (_simgui.desc.allocator.alloc_fn) { + ptr = _simgui.desc.allocator.alloc_fn(size, _simgui.desc.allocator.user_data); + } else { + ptr = malloc(size); + } + if (0 == ptr) { + _SIMGUI_PANIC(MALLOC_FAILED); + } + return ptr; +} + +static void* _simgui_malloc_clear(size_t size) { + void* ptr = _simgui_malloc(size); + _simgui_clear(ptr, size); + return ptr; +} + +static void _simgui_free(void* ptr) { + if (_simgui.desc.allocator.free_fn) { + _simgui.desc.allocator.free_fn(ptr, _simgui.desc.allocator.user_data); + } else { + free(ptr); + } +} + +// ██████ ██████ ██████ ██ +// ██ ██ ██ ██ ██ ██ ██ +// ██████ ██ ██ ██ ██ ██ +// ██ ██ ██ ██ ██ ██ +// ██ ██████ ██████ ███████ +// +// >>pool +static void _simgui_init_pool(_simgui_pool_t* pool, int num) { + SOKOL_ASSERT(pool && (num >= 1)); + // slot 0 is reserved for the 'invalid id', so bump the pool size by 1 + pool->size = num + 1; + pool->queue_top = 0; + // generation counters indexable by pool slot index, slot 0 is reserved + size_t gen_ctrs_size = sizeof(uint32_t) * (size_t)pool->size; + pool->gen_ctrs = (uint32_t*) _simgui_malloc_clear(gen_ctrs_size); + // it's not a bug to only reserve 'num' here + pool->free_queue = (int*) _simgui_malloc_clear(sizeof(int) * (size_t)num); + // never allocate the zero-th pool item since the invalid id is 0 + for (int i = pool->size-1; i >= 1; i--) { + pool->free_queue[pool->queue_top++] = i; + } +} + +static void _simgui_discard_pool(_simgui_pool_t* pool) { + SOKOL_ASSERT(pool); + SOKOL_ASSERT(pool->free_queue); + _simgui_free(pool->free_queue); + pool->free_queue = 0; + SOKOL_ASSERT(pool->gen_ctrs); + _simgui_free(pool->gen_ctrs); + pool->gen_ctrs = 0; + pool->size = 0; + pool->queue_top = 0; +} + +static int _simgui_pool_alloc_index(_simgui_pool_t* pool) { + SOKOL_ASSERT(pool); + SOKOL_ASSERT(pool->free_queue); + if (pool->queue_top > 0) { + int slot_index = pool->free_queue[--pool->queue_top]; + SOKOL_ASSERT((slot_index > 0) && (slot_index < pool->size)); + return slot_index; + } else { + // pool exhausted + return _SIMGUI_INVALID_SLOT_INDEX; + } +} + +static void _simgui_pool_free_index(_simgui_pool_t* pool, int slot_index) { + SOKOL_ASSERT((slot_index > _SIMGUI_INVALID_SLOT_INDEX) && (slot_index < pool->size)); + SOKOL_ASSERT(pool); + SOKOL_ASSERT(pool->free_queue); + SOKOL_ASSERT(pool->queue_top < pool->size); + #ifdef SOKOL_DEBUG + // debug check against double-free + for (int i = 0; i < pool->queue_top; i++) { + SOKOL_ASSERT(pool->free_queue[i] != slot_index); + } + #endif + pool->free_queue[pool->queue_top++] = slot_index; + SOKOL_ASSERT(pool->queue_top <= (pool->size-1)); +} + +/* initiailize a pool slot: + - bump the slot's generation counter + - create a resource id from the generation counter and slot index + - set the slot's id to this id + - set the slot's state to ALLOC + - return the handle id +*/ +static uint32_t _simgui_slot_init(_simgui_pool_t* pool, _simgui_slot_t* slot, int slot_index) { + /* FIXME: add handling for an overflowing generation counter, + for now, just overflow (another option is to disable + the slot) + */ + SOKOL_ASSERT(pool && pool->gen_ctrs); + SOKOL_ASSERT((slot_index > _SIMGUI_INVALID_SLOT_INDEX) && (slot_index < pool->size)); + SOKOL_ASSERT((slot->state == _SIMGUI_RESOURCESTATE_INITIAL) && (slot->id == SIMGUI_INVALID_ID)); + uint32_t ctr = ++pool->gen_ctrs[slot_index]; + slot->id = (ctr<<_SIMGUI_SLOT_SHIFT)|(slot_index & _SIMGUI_SLOT_MASK); + slot->state = _SIMGUI_RESOURCESTATE_ALLOC; + return slot->id; +} + +// extract slot index from id +static int _simgui_slot_index(uint32_t id) { + int slot_index = (int) (id & _SIMGUI_SLOT_MASK); + SOKOL_ASSERT(_SIMGUI_INVALID_SLOT_INDEX != slot_index); + return slot_index; +} + +static void _simgui_init_item_pool(_simgui_pool_t* pool, int pool_size, void** items_ptr, size_t item_size_bytes) { + // NOTE: the pools will have an additional item, since slot 0 is reserved + SOKOL_ASSERT(pool && (pool->size == 0)); + SOKOL_ASSERT((pool_size > 0) && (pool_size < _SIMGUI_MAX_POOL_SIZE)); + SOKOL_ASSERT(items_ptr && (*items_ptr == 0)); + SOKOL_ASSERT(item_size_bytes > 0); + _simgui_init_pool(pool, pool_size); + const size_t pool_size_bytes = item_size_bytes * (size_t)pool->size; + *items_ptr = _simgui_malloc_clear(pool_size_bytes); +} + +static void _simgui_discard_item_pool(_simgui_pool_t* pool, void** items_ptr) { + SOKOL_ASSERT(pool && (pool->size != 0)); + SOKOL_ASSERT(items_ptr && (*items_ptr != 0)); + _simgui_free(*items_ptr); *items_ptr = 0; + _simgui_discard_pool(pool); +} + +static void _simgui_setup_image_pool(int pool_size) { + _simgui_image_pool_t* p = &_simgui.image_pool; + _simgui_init_item_pool(&p->pool, pool_size, (void**)&p->items, sizeof(_simgui_image_t)); +} + +static void _simgui_discard_image_pool(void) { + _simgui_image_pool_t* p = &_simgui.image_pool; + _simgui_discard_item_pool(&p->pool, (void**)&p->items); +} + +static simgui_image_t _simgui_make_image_handle(uint32_t id) { + simgui_image_t handle = { id }; + return handle; +} + +static _simgui_image_t* _simgui_image_at(uint32_t id) { + SOKOL_ASSERT(SIMGUI_INVALID_ID != id); + const _simgui_image_pool_t* p = &_simgui.image_pool; + int slot_index = _simgui_slot_index(id); + SOKOL_ASSERT((slot_index > _SIMGUI_INVALID_SLOT_INDEX) && (slot_index < p->pool.size)); + return &p->items[slot_index]; +} + +static _simgui_image_t* _simgui_lookup_image(uint32_t id) { + if (SIMGUI_INVALID_ID != id) { + _simgui_image_t* img = _simgui_image_at(id); + if (img->slot.id == id) { + return img; + } + } + return 0; +} + +static simgui_image_t _simgui_alloc_image(void) { + _simgui_image_pool_t* p = &_simgui.image_pool; + int slot_index = _simgui_pool_alloc_index(&p->pool); + if (_SIMGUI_INVALID_SLOT_INDEX != slot_index) { + uint32_t id = _simgui_slot_init(&p->pool, &p->items[slot_index].slot, slot_index); + return _simgui_make_image_handle(id); + } else { + // pool exhausted + return _simgui_make_image_handle(SIMGUI_INVALID_ID); + } +} + +static _simgui_resource_state _simgui_init_image(_simgui_image_t* img, const simgui_image_desc_t* desc) { + SOKOL_ASSERT(img && (img->slot.state == _SIMGUI_RESOURCESTATE_ALLOC)); + SOKOL_ASSERT(desc); + SOKOL_ASSERT(_simgui.def_pip.id != SIMGUI_INVALID_ID); + SOKOL_ASSERT(_simgui.pip_unfilterable.id != SIMGUI_INVALID_ID); + img->image = desc->image; + img->sampler = desc->sampler; + if (sg_query_pixelformat(sg_query_image_desc(desc->image).pixel_format).filter) { + img->pip = _simgui.def_pip; + } else { + img->pip = _simgui.pip_unfilterable; + } + return _SIMGUI_RESOURCESTATE_VALID; +} + +static void _simgui_deinit_image(_simgui_image_t* img) { + SOKOL_ASSERT(img); + img->image.id = SIMGUI_INVALID_ID; + img->sampler.id = SIMGUI_INVALID_ID; + img->pip.id = SIMGUI_INVALID_ID; +} + +static void _simgui_destroy_image(simgui_image_t img_id) { + _simgui_image_t* img = _simgui_lookup_image(img_id.id); + if (img) { + _simgui_deinit_image(img); + _simgui_image_pool_t* p = &_simgui.image_pool; + _simgui_clear(img, sizeof(_simgui_image_t)); + _simgui_pool_free_index(&p->pool, _simgui_slot_index(img_id.id)); + } +} + +static void _simgui_destroy_all_images(void) { + _simgui_image_pool_t* p = &_simgui.image_pool; + for (int i = 0; i < p->pool.size; i++) { + _simgui_image_t* img = &p->items[i]; + _simgui_destroy_image(_simgui_make_image_handle(img->slot.id)); + } +} + +static simgui_image_desc_t _simgui_image_desc_defaults(const simgui_image_desc_t* desc) { + SOKOL_ASSERT(desc); + simgui_image_desc_t res = *desc; + res.image.id = _simgui_def(res.image.id, _simgui.def_img.id); + res.sampler.id = _simgui_def(res.sampler.id, _simgui.def_smp.id); + return res; +} + +static bool _simgui_is_osx(void) { + #if defined(SOKOL_DUMMY_BACKEND) + return false; + #elif defined(__EMSCRIPTEN__) + return simgui_js_is_osx(); + #elif defined(__APPLE__) + return true; + #else + return false; + #endif +} + +static simgui_desc_t _simgui_desc_defaults(const simgui_desc_t* desc) { + SOKOL_ASSERT((desc->allocator.alloc_fn && desc->allocator.free_fn) || (!desc->allocator.alloc_fn && !desc->allocator.free_fn)); + simgui_desc_t res = *desc; + res.max_vertices = _simgui_def(res.max_vertices, 65536); + res.image_pool_size = _simgui_def(res.image_pool_size, 256); + return res; +} + +// ██████ ██ ██ ██████ ██ ██ ██████ +// ██ ██ ██ ██ ██ ██ ██ ██ ██ +// ██████ ██ ██ ██████ ██ ██ ██ +// ██ ██ ██ ██ ██ ██ ██ ██ +// ██ ██████ ██████ ███████ ██ ██████ +// +// >>public +SOKOL_API_IMPL void simgui_setup(const simgui_desc_t* desc) { + SOKOL_ASSERT(desc); + _simgui_clear(&_simgui, sizeof(_simgui)); + _simgui.init_cookie = _SIMGUI_INIT_COOKIE; + _simgui.desc = _simgui_desc_defaults(desc); + _simgui.cur_dpi_scale = 1.0f; + #if !defined(SOKOL_IMGUI_NO_SOKOL_APP) + _simgui.is_osx = _simgui_is_osx(); + #endif + // can keep color_format, depth_format and sample_count as is, + // since sokol_gfx.h will do its own default-value handling + + // setup image pool + _simgui_setup_image_pool(_simgui.desc.image_pool_size); + + // allocate an intermediate vertex- and index-buffer + SOKOL_ASSERT(_simgui.desc.max_vertices > 0); + _simgui.vertices.size = (size_t)_simgui.desc.max_vertices * sizeof(ImDrawVert); + _simgui.vertices.ptr = _simgui_malloc(_simgui.vertices.size); + _simgui.indices.size = (size_t)_simgui.desc.max_vertices * 3 * sizeof(ImDrawIdx); + _simgui.indices.ptr = _simgui_malloc(_simgui.indices.size); + + // initialize Dear ImGui + #if defined(__cplusplus) + ImGui::CreateContext(); + ImGui::StyleColorsDark(); + ImGuiIO* io = &ImGui::GetIO(); + if (!_simgui.desc.no_default_font) { + io->Fonts->AddFontDefault(); + } + #else + igCreateContext(NULL); + igStyleColorsDark(igGetStyle()); + ImGuiIO* io = igGetIO(); + if (!_simgui.desc.no_default_font) { + ImFontAtlas_AddFontDefault(io->Fonts, NULL); + } + #endif + io->IniFilename = _simgui.desc.ini_filename; + io->ConfigMacOSXBehaviors = _simgui_is_osx(); + io->BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; + #if !defined(SOKOL_IMGUI_NO_SOKOL_APP) + if (!_simgui.desc.disable_set_mouse_cursor) { + io->BackendFlags |= ImGuiBackendFlags_HasMouseCursors; + } + io->SetClipboardTextFn = _simgui_set_clipboard; + io->GetClipboardTextFn = _simgui_get_clipboard; + #endif + io->ConfigWindowsResizeFromEdges = !_simgui.desc.disable_windows_resize_from_edges; + + // create sokol-gfx resources + sg_push_debug_group("sokol-imgui"); + + // shader object for using the embedded shader source (or bytecode) + sg_shader_desc shd_desc; + _simgui_clear(&shd_desc, sizeof(shd_desc)); + shd_desc.attrs[0].name = "position"; + shd_desc.attrs[1].name = "texcoord0"; + shd_desc.attrs[2].name = "color0"; + shd_desc.attrs[0].sem_name = "TEXCOORD"; + shd_desc.attrs[0].sem_index = 0; + shd_desc.attrs[1].sem_name = "TEXCOORD"; + shd_desc.attrs[1].sem_index = 1; + shd_desc.attrs[2].sem_name = "TEXCOORD"; + shd_desc.attrs[2].sem_index = 2; + sg_shader_uniform_block_desc* ub = &shd_desc.vs.uniform_blocks[0]; + ub->size = sizeof(_simgui_vs_params_t); + ub->uniforms[0].name = "vs_params"; + ub->uniforms[0].type = SG_UNIFORMTYPE_FLOAT4; + ub->uniforms[0].array_count = 1; + shd_desc.fs.images[0].used = true; + shd_desc.fs.images[0].image_type = SG_IMAGETYPE_2D; + shd_desc.fs.images[0].sample_type = SG_IMAGESAMPLETYPE_FLOAT; + shd_desc.fs.samplers[0].used = true; + shd_desc.fs.samplers[0].sampler_type = SG_SAMPLERTYPE_FILTERING; + shd_desc.fs.image_sampler_pairs[0].used = true; + shd_desc.fs.image_sampler_pairs[0].image_slot = 0; + shd_desc.fs.image_sampler_pairs[0].sampler_slot = 0; + shd_desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp"; + shd_desc.label = "sokol-imgui-shader"; + #if defined(SOKOL_GLCORE33) + shd_desc.vs.source = _simgui_vs_source_glsl330; + shd_desc.fs.source = _simgui_fs_source_glsl330; + #elif defined(SOKOL_GLES3) + shd_desc.vs.source = _simgui_vs_source_glsl300es; + shd_desc.fs.source = _simgui_fs_source_glsl300es; + #elif defined(SOKOL_METAL) + shd_desc.vs.entry = "main0"; + shd_desc.fs.entry = "main0"; + switch (sg_query_backend()) { + case SG_BACKEND_METAL_MACOS: + shd_desc.vs.bytecode = SG_RANGE(_simgui_vs_bytecode_metal_macos); + shd_desc.fs.bytecode = SG_RANGE(_simgui_fs_bytecode_metal_macos); + break; + case SG_BACKEND_METAL_IOS: + shd_desc.vs.bytecode = SG_RANGE(_simgui_vs_bytecode_metal_ios); + shd_desc.fs.bytecode = SG_RANGE(_simgui_fs_bytecode_metal_ios); + break; + default: + shd_desc.vs.source = _simgui_vs_source_metal_sim; + shd_desc.fs.source = _simgui_fs_source_metal_sim; + break; + } + #elif defined(SOKOL_D3D11) + shd_desc.vs.bytecode = SG_RANGE(_simgui_vs_bytecode_hlsl4); + shd_desc.fs.bytecode = SG_RANGE(_simgui_fs_bytecode_hlsl4); + #elif defined(SOKOL_WGPU) + shd_desc.vs.source = _simgui_vs_source_wgsl; + shd_desc.fs.source = _simgui_fs_source_wgsl; + #else + shd_desc.vs.source = _simgui_vs_source_dummy; + shd_desc.fs.source = _simgui_fs_source_dummy; + #endif + _simgui.def_shd = sg_make_shader(&shd_desc); + + // pipeline object for imgui rendering + sg_pipeline_desc pip_desc; + _simgui_clear(&pip_desc, sizeof(pip_desc)); + pip_desc.layout.buffers[0].stride = sizeof(ImDrawVert); + { + sg_vertex_attr_state* attr = &pip_desc.layout.attrs[0]; + attr->offset = offsetof(ImDrawVert, pos); + attr->format = SG_VERTEXFORMAT_FLOAT2; + } + { + sg_vertex_attr_state* attr = &pip_desc.layout.attrs[1]; + attr->offset = offsetof(ImDrawVert, uv); + attr->format = SG_VERTEXFORMAT_FLOAT2; + } + { + sg_vertex_attr_state* attr = &pip_desc.layout.attrs[2]; + attr->offset = offsetof(ImDrawVert, col); + attr->format = SG_VERTEXFORMAT_UBYTE4N; + } + pip_desc.shader = _simgui.def_shd; + pip_desc.index_type = SG_INDEXTYPE_UINT16; + pip_desc.sample_count = _simgui.desc.sample_count; + pip_desc.depth.pixel_format = _simgui.desc.depth_format; + pip_desc.colors[0].pixel_format = _simgui.desc.color_format; + pip_desc.colors[0].write_mask = _simgui.desc.write_alpha_channel ? SG_COLORMASK_RGBA : SG_COLORMASK_RGB; + pip_desc.colors[0].blend.enabled = true; + pip_desc.colors[0].blend.src_factor_rgb = SG_BLENDFACTOR_SRC_ALPHA; + pip_desc.colors[0].blend.dst_factor_rgb = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA; + if (_simgui.desc.write_alpha_channel) { + pip_desc.colors[0].blend.src_factor_alpha = SG_BLENDFACTOR_ONE; + pip_desc.colors[0].blend.dst_factor_alpha = SG_BLENDFACTOR_ONE; + } + pip_desc.label = "sokol-imgui-pipeline"; + _simgui.def_pip = sg_make_pipeline(&pip_desc); + + // create a unfilterable/nonfiltering variants of the shader and pipeline + shd_desc.fs.images[0].sample_type = SG_IMAGESAMPLETYPE_UNFILTERABLE_FLOAT; + shd_desc.fs.samplers[0].sampler_type = SG_SAMPLERTYPE_NONFILTERING; + shd_desc.label = "sokol-imgui-shader-unfilterable"; + _simgui.shd_unfilterable = sg_make_shader(&shd_desc); + pip_desc.shader = _simgui.shd_unfilterable; + pip_desc.label = "sokol-imgui-pipeline-unfilterable"; + _simgui.pip_unfilterable = sg_make_pipeline(&pip_desc); + + // NOTE: since we're in C++ mode here we can't use C99 designated init + sg_buffer_desc vb_desc; + _simgui_clear(&vb_desc, sizeof(vb_desc)); + vb_desc.usage = SG_USAGE_STREAM; + vb_desc.size = _simgui.vertices.size; + vb_desc.label = "sokol-imgui-vertices"; + _simgui.vbuf = sg_make_buffer(&vb_desc); + + sg_buffer_desc ib_desc; + _simgui_clear(&ib_desc, sizeof(ib_desc)); + ib_desc.type = SG_BUFFERTYPE_INDEXBUFFER; + ib_desc.usage = SG_USAGE_STREAM; + ib_desc.size = _simgui.indices.size; + ib_desc.label = "sokol-imgui-indices"; + _simgui.ibuf = sg_make_buffer(&ib_desc); + + // a default font sampler + sg_sampler_desc font_smp_desc; + _simgui_clear(&font_smp_desc, sizeof(font_smp_desc)); + font_smp_desc.wrap_u = SG_WRAP_CLAMP_TO_EDGE; + font_smp_desc.wrap_v = SG_WRAP_CLAMP_TO_EDGE; + font_smp_desc.min_filter = SG_FILTER_LINEAR; + font_smp_desc.mag_filter = SG_FILTER_LINEAR; + font_smp_desc.mipmap_filter = SG_FILTER_NONE; + font_smp_desc.label = "sokol-imgui-font-sampler"; + _simgui.font_smp = sg_make_sampler(&font_smp_desc); + + // a default user-image sampler + sg_sampler_desc def_sampler_desc; + _simgui_clear(&def_sampler_desc, sizeof(def_sampler_desc)); + def_sampler_desc.min_filter = SG_FILTER_NEAREST; + def_sampler_desc.mag_filter = SG_FILTER_NEAREST; + def_sampler_desc.wrap_u = SG_WRAP_CLAMP_TO_EDGE; + def_sampler_desc.wrap_v = SG_WRAP_CLAMP_TO_EDGE; + def_sampler_desc.label = "sokol-imgui-default-sampler"; + _simgui.def_smp = sg_make_sampler(&def_sampler_desc); + + // a default user image + static uint32_t def_pixels[64]; + memset(def_pixels, 0xFF, sizeof(def_pixels)); + sg_image_desc def_image_desc; + _simgui_clear(&def_image_desc, sizeof(def_image_desc)); + def_image_desc.width = 8; + def_image_desc.height = 8; + def_image_desc.pixel_format = SG_PIXELFORMAT_RGBA8; + def_image_desc.data.subimage[0][0].ptr = def_pixels; + def_image_desc.data.subimage[0][0].size = sizeof(def_pixels); + def_image_desc.label = "sokol-imgui-default-image"; + _simgui.def_img = sg_make_image(&def_image_desc); + + // default font texture + if (!_simgui.desc.no_default_font) { + unsigned char* font_pixels; + int font_width, font_height; + #if defined(__cplusplus) + io->Fonts->GetTexDataAsRGBA32(&font_pixels, &font_width, &font_height); + #else + int bytes_per_pixel; + ImFontAtlas_GetTexDataAsRGBA32(io->Fonts, &font_pixels, &font_width, &font_height, &bytes_per_pixel); + #endif + sg_image_desc font_img_desc; + _simgui_clear(&font_img_desc, sizeof(font_img_desc)); + font_img_desc.width = font_width; + font_img_desc.height = font_height; + font_img_desc.pixel_format = SG_PIXELFORMAT_RGBA8; + font_img_desc.data.subimage[0][0].ptr = font_pixels; + font_img_desc.data.subimage[0][0].size = (size_t)(font_width * font_height) * sizeof(uint32_t); + font_img_desc.label = "sokol-imgui-font-image"; + _simgui.font_img = sg_make_image(&font_img_desc); + + simgui_image_desc_t img_desc; + _simgui_clear(&img_desc, sizeof(img_desc)); + img_desc.image = _simgui.font_img; + img_desc.sampler = _simgui.font_smp; + _simgui.default_font = simgui_make_image(&img_desc); + io->Fonts->TexID = simgui_imtextureid(_simgui.default_font); + } + + sg_pop_debug_group(); +} + +SOKOL_API_IMPL void simgui_shutdown(void) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGui::DestroyContext(); + #else + igDestroyContext(0); + #endif + // NOTE: it's valid to call the destroy funcs with SG_INVALID_ID + sg_destroy_pipeline(_simgui.pip_unfilterable); + sg_destroy_shader(_simgui.shd_unfilterable); + sg_destroy_pipeline(_simgui.def_pip); + sg_destroy_shader(_simgui.def_shd); + sg_destroy_sampler(_simgui.font_smp); + sg_destroy_image(_simgui.font_img); + sg_destroy_sampler(_simgui.def_smp); + sg_destroy_image(_simgui.def_img); + sg_destroy_buffer(_simgui.ibuf); + sg_destroy_buffer(_simgui.vbuf); + sg_pop_debug_group(); + sg_push_debug_group("sokol-imgui"); + _simgui_destroy_all_images(); + _simgui_discard_image_pool(); + SOKOL_ASSERT(_simgui.vertices.ptr); + _simgui_free((void*)_simgui.vertices.ptr); + SOKOL_ASSERT(_simgui.indices.ptr); + _simgui_free((void*)_simgui.indices.ptr); + _simgui.init_cookie = 0; +} + +SOKOL_API_IMPL simgui_image_t simgui_make_image(const simgui_image_desc_t* desc) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + SOKOL_ASSERT(desc); + const simgui_image_desc_t desc_def = _simgui_image_desc_defaults(desc); + simgui_image_t img_id = _simgui_alloc_image(); + _simgui_image_t* img = _simgui_lookup_image(img_id.id); + if (img) { + img->slot.state = _simgui_init_image(img, &desc_def); + SOKOL_ASSERT((img->slot.state == _SIMGUI_RESOURCESTATE_VALID) || (img->slot.state == _SIMGUI_RESOURCESTATE_FAILED)); + } else { + _SIMGUI_ERROR(IMAGE_POOL_EXHAUSTED); + } + return img_id; +} + +SOKOL_API_IMPL void simgui_destroy_image(simgui_image_t img_id) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + _simgui_destroy_image(img_id); +} + +SOKOL_API_IMPL simgui_image_desc_t simgui_query_image_desc(simgui_image_t img_id) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + _simgui_image_t* img = _simgui_lookup_image(img_id.id); + simgui_image_desc_t desc; + _simgui_clear(&desc, sizeof(desc)); + if (img) { + desc.image = img->image; + desc.sampler = img->sampler; + } + return desc; +} + +SOKOL_API_IMPL void* simgui_imtextureid(simgui_image_t img) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + return (void*)(uintptr_t)img.id; +} + +SOKOL_API_IMPL simgui_image_t simgui_image_from_imtextureid(void* imtextureid) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + simgui_image_t img = { (uint32_t)(uintptr_t) imtextureid }; + return img; +} + +SOKOL_API_IMPL void simgui_new_frame(const simgui_frame_desc_t* desc) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + SOKOL_ASSERT(desc); + SOKOL_ASSERT(desc->width > 0); + SOKOL_ASSERT(desc->height > 0); + _simgui.cur_dpi_scale = _simgui_def(desc->dpi_scale, 1.0f); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #else + ImGuiIO* io = igGetIO(); + #endif + io->DisplaySize.x = ((float)desc->width) / _simgui.cur_dpi_scale; + io->DisplaySize.y = ((float)desc->height) / _simgui.cur_dpi_scale; + io->DeltaTime = (float)desc->delta_time; + #if !defined(SOKOL_IMGUI_NO_SOKOL_APP) + if (io->WantTextInput && !sapp_keyboard_shown()) { + sapp_show_keyboard(true); + } + if (!io->WantTextInput && sapp_keyboard_shown()) { + sapp_show_keyboard(false); + } + if (!_simgui.desc.disable_set_mouse_cursor) { + #if defined(__cplusplus) + ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); + #else + ImGuiMouseCursor imgui_cursor = igGetMouseCursor(); + #endif + sapp_mouse_cursor cursor = sapp_get_mouse_cursor(); + switch (imgui_cursor) { + case ImGuiMouseCursor_Arrow: cursor = SAPP_MOUSECURSOR_ARROW; break; + case ImGuiMouseCursor_TextInput: cursor = SAPP_MOUSECURSOR_IBEAM; break; + case ImGuiMouseCursor_ResizeAll: cursor = SAPP_MOUSECURSOR_RESIZE_ALL; break; + case ImGuiMouseCursor_ResizeNS: cursor = SAPP_MOUSECURSOR_RESIZE_NS; break; + case ImGuiMouseCursor_ResizeEW: cursor = SAPP_MOUSECURSOR_RESIZE_EW; break; + case ImGuiMouseCursor_ResizeNESW: cursor = SAPP_MOUSECURSOR_RESIZE_NESW; break; + case ImGuiMouseCursor_ResizeNWSE: cursor = SAPP_MOUSECURSOR_RESIZE_NWSE; break; + case ImGuiMouseCursor_Hand: cursor = SAPP_MOUSECURSOR_POINTING_HAND; break; + case ImGuiMouseCursor_NotAllowed: cursor = SAPP_MOUSECURSOR_NOT_ALLOWED; break; + default: break; + } + sapp_set_mouse_cursor(cursor); + } + #endif + #if defined(__cplusplus) + ImGui::NewFrame(); + #else + igNewFrame(); + #endif +} + +static const _simgui_image_t* _simgui_bind_image_sampler(sg_bindings* bindings, ImTextureID tex_id) { + const _simgui_image_t* img = _simgui_lookup_image((uint32_t)(uintptr_t)tex_id); + if (img) { + bindings->fs.images[0] = img->image; + bindings->fs.samplers[0] = img->sampler; + } else { + bindings->fs.images[0] = _simgui.def_img; + bindings->fs.samplers[0] = _simgui.def_smp; + } + return img; +} + +static ImDrawList* _simgui_imdrawlist_at(ImDrawData* draw_data, int cl_index) { + #if defined(__cplusplus) + return draw_data->CmdLists[cl_index]; + #else + return draw_data->CmdLists.Data[cl_index]; + #endif +} + +SOKOL_API_IMPL void simgui_render(void) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGui::Render(); + ImDrawData* draw_data = ImGui::GetDrawData(); + ImGuiIO* io = &ImGui::GetIO(); + #else + igRender(); + ImDrawData* draw_data = igGetDrawData(); + ImGuiIO* io = igGetIO(); + #endif + if (0 == draw_data) { + return; + } + if (draw_data->CmdListsCount == 0) { + return; + } + /* copy vertices and indices into an intermediate buffer so that + they can be updated with a single sg_update_buffer() call each + (sg_append_buffer() has performance problems on some GL platforms), + also keep track of valid number of command lists in case of a + buffer overflow + */ + size_t all_vtx_size = 0; + size_t all_idx_size = 0; + int cmd_list_count = 0; + for (int cl_index = 0; cl_index < draw_data->CmdListsCount; cl_index++, cmd_list_count++) { + ImDrawList* cl = _simgui_imdrawlist_at(draw_data, cl_index); + const size_t vtx_size = (size_t)cl->VtxBuffer.Size * sizeof(ImDrawVert); + const size_t idx_size = (size_t)cl->IdxBuffer.Size * sizeof(ImDrawIdx); + + // check for buffer overflow + if (((all_vtx_size + vtx_size) > _simgui.vertices.size) || + ((all_idx_size + idx_size) > _simgui.indices.size)) + { + break; + } + + // copy vertices and indices into common buffers + if (vtx_size > 0) { + const ImDrawVert* src_vtx_ptr = cl->VtxBuffer.Data; + void* dst_vtx_ptr = (void*) (((uint8_t*)_simgui.vertices.ptr) + all_vtx_size); + memcpy(dst_vtx_ptr, src_vtx_ptr, vtx_size); + } + if (idx_size > 0) { + const ImDrawIdx* src_idx_ptr = cl->IdxBuffer.Data; + void* dst_idx_ptr = (void*) (((uint8_t*)_simgui.indices.ptr) + all_idx_size); + memcpy(dst_idx_ptr, src_idx_ptr, idx_size); + } + all_vtx_size += vtx_size; + all_idx_size += idx_size; + } + if (0 == cmd_list_count) { + return; + } + + // update the sokol-gfx vertex- and index-buffer + sg_push_debug_group("sokol-imgui"); + if (all_vtx_size > 0) { + sg_range vtx_data = _simgui.vertices; + vtx_data.size = all_vtx_size; + sg_update_buffer(_simgui.vbuf, &vtx_data); + } + if (all_idx_size > 0) { + sg_range idx_data = _simgui.indices; + idx_data.size = all_idx_size; + sg_update_buffer(_simgui.ibuf, &idx_data); + } + + // render the ImGui command list + const float dpi_scale = _simgui.cur_dpi_scale; + const int fb_width = (int) (io->DisplaySize.x * dpi_scale); + const int fb_height = (int) (io->DisplaySize.y * dpi_scale); + sg_apply_viewport(0, 0, fb_width, fb_height, true); + sg_apply_scissor_rect(0, 0, fb_width, fb_height, true); + + sg_apply_pipeline(_simgui.def_pip); + _simgui_vs_params_t vs_params; + _simgui_clear((void*)&vs_params, sizeof(vs_params)); + vs_params.disp_size.x = io->DisplaySize.x; + vs_params.disp_size.y = io->DisplaySize.y; + sg_apply_uniforms(SG_SHADERSTAGE_VS, 0, SG_RANGE_REF(vs_params)); + sg_bindings bind; + _simgui_clear((void*)&bind, sizeof(bind)); + bind.vertex_buffers[0] = _simgui.vbuf; + bind.index_buffer = _simgui.ibuf; + ImTextureID tex_id = io->Fonts->TexID; + _simgui_bind_image_sampler(&bind, tex_id); + int vb_offset = 0; + int ib_offset = 0; + for (int cl_index = 0; cl_index < cmd_list_count; cl_index++) { + ImDrawList* cl = _simgui_imdrawlist_at(draw_data, cl_index); + + bind.vertex_buffer_offsets[0] = vb_offset; + bind.index_buffer_offset = ib_offset; + sg_apply_bindings(&bind); + + #if defined(__cplusplus) + const int num_cmds = cl->CmdBuffer.size(); + #else + const int num_cmds = cl->CmdBuffer.Size; + #endif + uint32_t vtx_offset = 0; + for (int cmd_index = 0; cmd_index < num_cmds; cmd_index++) { + ImDrawCmd* pcmd = &cl->CmdBuffer.Data[cmd_index]; + if (pcmd->UserCallback) { + pcmd->UserCallback(cl, pcmd); + // need to re-apply all state after calling a user callback + sg_apply_viewport(0, 0, fb_width, fb_height, true); + sg_apply_pipeline(_simgui.def_pip); + sg_apply_uniforms(SG_SHADERSTAGE_VS, 0, SG_RANGE_REF(vs_params)); + sg_apply_bindings(&bind); + } else { + if ((tex_id != pcmd->TextureId) || (vtx_offset != pcmd->VtxOffset)) { + tex_id = pcmd->TextureId; + vtx_offset = pcmd->VtxOffset; + const _simgui_image_t* img = _simgui_bind_image_sampler(&bind, tex_id); + if (img) { + sg_apply_pipeline(img->pip); + } else { + sg_apply_pipeline(_simgui.def_pip); + } + sg_apply_uniforms(SG_SHADERSTAGE_VS, 0, SG_RANGE_REF(vs_params)); + bind.vertex_buffer_offsets[0] = vb_offset + (int)(pcmd->VtxOffset * sizeof(ImDrawVert)); + sg_apply_bindings(&bind); + } + const int scissor_x = (int) (pcmd->ClipRect.x * dpi_scale); + const int scissor_y = (int) (pcmd->ClipRect.y * dpi_scale); + const int scissor_w = (int) ((pcmd->ClipRect.z - pcmd->ClipRect.x) * dpi_scale); + const int scissor_h = (int) ((pcmd->ClipRect.w - pcmd->ClipRect.y) * dpi_scale); + sg_apply_scissor_rect(scissor_x, scissor_y, scissor_w, scissor_h, true); + sg_draw((int)pcmd->IdxOffset, (int)pcmd->ElemCount, 1); + } + } + #if defined(__cplusplus) + const size_t vtx_size = (size_t)cl->VtxBuffer.size() * sizeof(ImDrawVert); + const size_t idx_size = (size_t)cl->IdxBuffer.size() * sizeof(ImDrawIdx); + #else + const size_t vtx_size = (size_t)cl->VtxBuffer.Size * sizeof(ImDrawVert); + const size_t idx_size = (size_t)cl->IdxBuffer.Size * sizeof(ImDrawIdx); + #endif + vb_offset += (int)vtx_size; + ib_offset += (int)idx_size; + } + sg_apply_viewport(0, 0, fb_width, fb_height, true); + sg_apply_scissor_rect(0, 0, fb_width, fb_height, true); + sg_pop_debug_group(); +} + +SOKOL_API_IMPL void simgui_add_focus_event(bool focus) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + io->AddFocusEvent(focus); + #else + ImGuiIO* io = igGetIO(); + ImGuiIO_AddFocusEvent(io, focus); + #endif +} + +SOKOL_API_IMPL void simgui_add_mouse_pos_event(float x, float y) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + io->AddMouseSourceEvent(ImGuiMouseSource_Mouse); + #endif + io->AddMousePosEvent(x, y); + #else + ImGuiIO* io = igGetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_Mouse); + #endif + ImGuiIO_AddMousePosEvent(io, x, y); + #endif +} + +SOKOL_API_IMPL void simgui_add_touch_pos_event(float x, float y) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + io->AddMouseSourceEvent(ImGuiMouseSource_TouchScreen); + #endif + io->AddMousePosEvent(x, y); + #else + ImGuiIO* io = igGetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_TouchScreen); + #endif + ImGuiIO_AddMousePosEvent(io, x, y); + #endif +} + +SOKOL_API_IMPL void simgui_add_mouse_button_event(int mouse_button, bool down) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + io->AddMouseSourceEvent(ImGuiMouseSource_Mouse); + #endif + io->AddMouseButtonEvent(mouse_button, down); + #else + ImGuiIO* io = igGetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_Mouse); + #endif + ImGuiIO_AddMouseButtonEvent(io, mouse_button, down); + #endif +} + +SOKOL_API_IMPL void simgui_add_touch_button_event(int mouse_button, bool down) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + io->AddMouseSourceEvent(ImGuiMouseSource_TouchScreen); + #endif + io->AddMouseButtonEvent(mouse_button, down); + #else + ImGuiIO* io = igGetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_TouchScreen); + #endif + ImGuiIO_AddMouseButtonEvent(io, mouse_button, down); + #endif +} + +SOKOL_API_IMPL void simgui_add_mouse_wheel_event(float wheel_x, float wheel_y) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + io->AddMouseSourceEvent(ImGuiMouseSource_Mouse); + #endif + io->AddMouseWheelEvent(wheel_x, wheel_y); + #else + ImGuiIO* io = igGetIO(); + #if (IMGUI_VERSION_NUM >= 18950) + ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_Mouse); + #endif + ImGuiIO_AddMouseWheelEvent(io, wheel_x, wheel_y); + #endif +} + +SOKOL_API_IMPL void simgui_add_key_event(int (*map_keycode)(int), int keycode, bool down) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + const ImGuiKey imgui_key = (ImGuiKey)map_keycode(keycode); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + io->AddKeyEvent(imgui_key, down); + io->SetKeyEventNativeData(imgui_key, keycode, 0, -1); + #else + ImGuiIO* io = igGetIO(); + ImGuiIO_AddKeyEvent(io, imgui_key, down); + ImGuiIO_SetKeyEventNativeData(io, imgui_key, keycode, 0, -1); + #endif +} + +SOKOL_API_IMPL void simgui_add_input_character(uint32_t c) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + io->AddInputCharacter(c); + #else + ImGuiIO* io = igGetIO(); + ImGuiIO_AddInputCharacter(io, c); + #endif +} + +SOKOL_API_IMPL void simgui_add_input_characters_utf8(const char* c) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + io->AddInputCharactersUTF8(c); + #else + ImGuiIO* io = igGetIO(); + ImGuiIO_AddInputCharactersUTF8(io, c); + #endif +} + +#if !defined(SOKOL_IMGUI_NO_SOKOL_APP) +_SOKOL_PRIVATE bool _simgui_is_ctrl(uint32_t modifiers) { + if (_simgui.is_osx) { + return 0 != (modifiers & SAPP_MODIFIER_SUPER); + } else { + return 0 != (modifiers & SAPP_MODIFIER_CTRL); + } +} + +_SOKOL_PRIVATE ImGuiKey _simgui_map_keycode(sapp_keycode key) { + switch (key) { + case SAPP_KEYCODE_SPACE: return ImGuiKey_Space; + case SAPP_KEYCODE_APOSTROPHE: return ImGuiKey_Apostrophe; + case SAPP_KEYCODE_COMMA: return ImGuiKey_Comma; + case SAPP_KEYCODE_MINUS: return ImGuiKey_Minus; + case SAPP_KEYCODE_PERIOD: return ImGuiKey_Apostrophe; + case SAPP_KEYCODE_SLASH: return ImGuiKey_Slash; + case SAPP_KEYCODE_0: return ImGuiKey_0; + case SAPP_KEYCODE_1: return ImGuiKey_1; + case SAPP_KEYCODE_2: return ImGuiKey_2; + case SAPP_KEYCODE_3: return ImGuiKey_3; + case SAPP_KEYCODE_4: return ImGuiKey_4; + case SAPP_KEYCODE_5: return ImGuiKey_5; + case SAPP_KEYCODE_6: return ImGuiKey_6; + case SAPP_KEYCODE_7: return ImGuiKey_7; + case SAPP_KEYCODE_8: return ImGuiKey_8; + case SAPP_KEYCODE_9: return ImGuiKey_9; + case SAPP_KEYCODE_SEMICOLON: return ImGuiKey_Semicolon; + case SAPP_KEYCODE_EQUAL: return ImGuiKey_Equal; + case SAPP_KEYCODE_A: return ImGuiKey_A; + case SAPP_KEYCODE_B: return ImGuiKey_B; + case SAPP_KEYCODE_C: return ImGuiKey_C; + case SAPP_KEYCODE_D: return ImGuiKey_D; + case SAPP_KEYCODE_E: return ImGuiKey_E; + case SAPP_KEYCODE_F: return ImGuiKey_F; + case SAPP_KEYCODE_G: return ImGuiKey_G; + case SAPP_KEYCODE_H: return ImGuiKey_H; + case SAPP_KEYCODE_I: return ImGuiKey_I; + case SAPP_KEYCODE_J: return ImGuiKey_J; + case SAPP_KEYCODE_K: return ImGuiKey_K; + case SAPP_KEYCODE_L: return ImGuiKey_L; + case SAPP_KEYCODE_M: return ImGuiKey_M; + case SAPP_KEYCODE_N: return ImGuiKey_N; + case SAPP_KEYCODE_O: return ImGuiKey_O; + case SAPP_KEYCODE_P: return ImGuiKey_P; + case SAPP_KEYCODE_Q: return ImGuiKey_Q; + case SAPP_KEYCODE_R: return ImGuiKey_R; + case SAPP_KEYCODE_S: return ImGuiKey_S; + case SAPP_KEYCODE_T: return ImGuiKey_T; + case SAPP_KEYCODE_U: return ImGuiKey_U; + case SAPP_KEYCODE_V: return ImGuiKey_V; + case SAPP_KEYCODE_W: return ImGuiKey_W; + case SAPP_KEYCODE_X: return ImGuiKey_X; + case SAPP_KEYCODE_Y: return ImGuiKey_Y; + case SAPP_KEYCODE_Z: return ImGuiKey_Z; + case SAPP_KEYCODE_LEFT_BRACKET: return ImGuiKey_LeftBracket; + case SAPP_KEYCODE_BACKSLASH: return ImGuiKey_Backslash; + case SAPP_KEYCODE_RIGHT_BRACKET:return ImGuiKey_RightBracket; + case SAPP_KEYCODE_GRAVE_ACCENT: return ImGuiKey_GraveAccent; + case SAPP_KEYCODE_ESCAPE: return ImGuiKey_Escape; + case SAPP_KEYCODE_ENTER: return ImGuiKey_Enter; + case SAPP_KEYCODE_TAB: return ImGuiKey_Tab; + case SAPP_KEYCODE_BACKSPACE: return ImGuiKey_Backspace; + case SAPP_KEYCODE_INSERT: return ImGuiKey_Insert; + case SAPP_KEYCODE_DELETE: return ImGuiKey_Delete; + case SAPP_KEYCODE_RIGHT: return ImGuiKey_RightArrow; + case SAPP_KEYCODE_LEFT: return ImGuiKey_LeftArrow; + case SAPP_KEYCODE_DOWN: return ImGuiKey_DownArrow; + case SAPP_KEYCODE_UP: return ImGuiKey_UpArrow; + case SAPP_KEYCODE_PAGE_UP: return ImGuiKey_PageUp; + case SAPP_KEYCODE_PAGE_DOWN: return ImGuiKey_PageDown; + case SAPP_KEYCODE_HOME: return ImGuiKey_Home; + case SAPP_KEYCODE_END: return ImGuiKey_End; + case SAPP_KEYCODE_CAPS_LOCK: return ImGuiKey_CapsLock; + case SAPP_KEYCODE_SCROLL_LOCK: return ImGuiKey_ScrollLock; + case SAPP_KEYCODE_NUM_LOCK: return ImGuiKey_NumLock; + case SAPP_KEYCODE_PRINT_SCREEN: return ImGuiKey_PrintScreen; + case SAPP_KEYCODE_PAUSE: return ImGuiKey_Pause; + case SAPP_KEYCODE_F1: return ImGuiKey_F1; + case SAPP_KEYCODE_F2: return ImGuiKey_F2; + case SAPP_KEYCODE_F3: return ImGuiKey_F3; + case SAPP_KEYCODE_F4: return ImGuiKey_F4; + case SAPP_KEYCODE_F5: return ImGuiKey_F5; + case SAPP_KEYCODE_F6: return ImGuiKey_F6; + case SAPP_KEYCODE_F7: return ImGuiKey_F7; + case SAPP_KEYCODE_F8: return ImGuiKey_F8; + case SAPP_KEYCODE_F9: return ImGuiKey_F9; + case SAPP_KEYCODE_F10: return ImGuiKey_F10; + case SAPP_KEYCODE_F11: return ImGuiKey_F11; + case SAPP_KEYCODE_F12: return ImGuiKey_F12; + case SAPP_KEYCODE_KP_0: return ImGuiKey_Keypad0; + case SAPP_KEYCODE_KP_1: return ImGuiKey_Keypad1; + case SAPP_KEYCODE_KP_2: return ImGuiKey_Keypad2; + case SAPP_KEYCODE_KP_3: return ImGuiKey_Keypad3; + case SAPP_KEYCODE_KP_4: return ImGuiKey_Keypad4; + case SAPP_KEYCODE_KP_5: return ImGuiKey_Keypad5; + case SAPP_KEYCODE_KP_6: return ImGuiKey_Keypad6; + case SAPP_KEYCODE_KP_7: return ImGuiKey_Keypad7; + case SAPP_KEYCODE_KP_8: return ImGuiKey_Keypad8; + case SAPP_KEYCODE_KP_9: return ImGuiKey_Keypad9; + case SAPP_KEYCODE_KP_DECIMAL: return ImGuiKey_KeypadDecimal; + case SAPP_KEYCODE_KP_DIVIDE: return ImGuiKey_KeypadDivide; + case SAPP_KEYCODE_KP_MULTIPLY: return ImGuiKey_KeypadMultiply; + case SAPP_KEYCODE_KP_SUBTRACT: return ImGuiKey_KeypadSubtract; + case SAPP_KEYCODE_KP_ADD: return ImGuiKey_KeypadAdd; + case SAPP_KEYCODE_KP_ENTER: return ImGuiKey_KeypadEnter; + case SAPP_KEYCODE_KP_EQUAL: return ImGuiKey_KeypadEqual; + case SAPP_KEYCODE_LEFT_SHIFT: return ImGuiKey_LeftShift; + case SAPP_KEYCODE_LEFT_CONTROL: return ImGuiKey_LeftCtrl; + case SAPP_KEYCODE_LEFT_ALT: return ImGuiKey_LeftAlt; + case SAPP_KEYCODE_LEFT_SUPER: return ImGuiKey_LeftSuper; + case SAPP_KEYCODE_RIGHT_SHIFT: return ImGuiKey_RightShift; + case SAPP_KEYCODE_RIGHT_CONTROL:return ImGuiKey_RightCtrl; + case SAPP_KEYCODE_RIGHT_ALT: return ImGuiKey_RightAlt; + case SAPP_KEYCODE_RIGHT_SUPER: return ImGuiKey_RightSuper; + case SAPP_KEYCODE_MENU: return ImGuiKey_Menu; + default: return ImGuiKey_None; + } +} + +_SOKOL_PRIVATE void _simgui_add_sapp_key_event(ImGuiIO* io, sapp_keycode sapp_key, bool down) { + const ImGuiKey imgui_key = _simgui_map_keycode(sapp_key); + #if defined(__cplusplus) + io->AddKeyEvent(imgui_key, down); + io->SetKeyEventNativeData(imgui_key, (int)sapp_key, 0, -1); + #else + ImGuiIO_AddKeyEvent(io, imgui_key, down); + ImGuiIO_SetKeyEventNativeData(io, imgui_key, (int)sapp_key, 0, -1); + #endif +} + +_SOKOL_PRIVATE void _simgui_add_imgui_key_event(ImGuiIO* io, ImGuiKey imgui_key, bool down) { + #if defined(__cplusplus) + io->AddKeyEvent(imgui_key, down); + #else + ImGuiIO_AddKeyEvent(io, imgui_key, down); + #endif +} + +_SOKOL_PRIVATE void _simgui_update_modifiers(ImGuiIO* io, uint32_t mods) { + _simgui_add_imgui_key_event(io, ImGuiMod_Ctrl, (mods & SAPP_MODIFIER_CTRL) != 0); + _simgui_add_imgui_key_event(io, ImGuiMod_Shift, (mods & SAPP_MODIFIER_SHIFT) != 0); + _simgui_add_imgui_key_event(io, ImGuiMod_Alt, (mods & SAPP_MODIFIER_ALT) != 0); + _simgui_add_imgui_key_event(io, ImGuiMod_Super, (mods & SAPP_MODIFIER_SUPER) != 0); +} + +// returns Ctrl or Super, depending on platform +_SOKOL_PRIVATE ImGuiKey _simgui_copypaste_modifier(void) { + return _simgui.is_osx ? ImGuiMod_Super : ImGuiMod_Ctrl; +} + +SOKOL_API_IMPL int simgui_map_keycode(sapp_keycode keycode) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + return (int)_simgui_map_keycode(keycode); +} + +SOKOL_API_IMPL bool simgui_handle_event(const sapp_event* ev) { + SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + const float dpi_scale = _simgui.cur_dpi_scale; + #if defined(__cplusplus) + ImGuiIO* io = &ImGui::GetIO(); + #else + ImGuiIO* io = igGetIO(); + #endif + switch (ev->type) { + case SAPP_EVENTTYPE_FOCUSED: + simgui_add_focus_event(true); + break; + case SAPP_EVENTTYPE_UNFOCUSED: + simgui_add_focus_event(false); + break; + case SAPP_EVENTTYPE_MOUSE_DOWN: + simgui_add_mouse_pos_event(ev->mouse_x / dpi_scale, ev->mouse_y / dpi_scale); + simgui_add_mouse_button_event((int)ev->mouse_button, true); + _simgui_update_modifiers(io, ev->modifiers); + break; + case SAPP_EVENTTYPE_MOUSE_UP: + simgui_add_mouse_pos_event(ev->mouse_x / dpi_scale, ev->mouse_y / dpi_scale); + simgui_add_mouse_button_event((int)ev->mouse_button, false); + _simgui_update_modifiers(io, ev->modifiers); + break; + case SAPP_EVENTTYPE_MOUSE_MOVE: + simgui_add_mouse_pos_event(ev->mouse_x / dpi_scale, ev->mouse_y / dpi_scale); + break; + case SAPP_EVENTTYPE_MOUSE_ENTER: + case SAPP_EVENTTYPE_MOUSE_LEAVE: + // FIXME: since the sokol_app.h emscripten backend doesn't support + // mouse capture, mouse buttons must be released when the mouse leaves the + // browser window, so that they don't "stick" when released outside the window. + // A cleaner solution would be a new sokol_app.h function to query + // "platform behaviour flags". + #if defined(__EMSCRIPTEN__) + for (int i = 0; i < SAPP_MAX_MOUSEBUTTONS; i++) { + simgui_add_mouse_button_event(i, false); + } + #endif + break; + case SAPP_EVENTTYPE_MOUSE_SCROLL: + simgui_add_mouse_wheel_event(ev->scroll_x, ev->scroll_y); + break; + case SAPP_EVENTTYPE_TOUCHES_BEGAN: + simgui_add_touch_pos_event(ev->touches[0].pos_x / dpi_scale, ev->touches[0].pos_y / dpi_scale); + simgui_add_touch_button_event(0, true); + break; + case SAPP_EVENTTYPE_TOUCHES_MOVED: + simgui_add_touch_pos_event(ev->touches[0].pos_x / dpi_scale, ev->touches[0].pos_y / dpi_scale); + break; + case SAPP_EVENTTYPE_TOUCHES_ENDED: + simgui_add_touch_pos_event(ev->touches[0].pos_x / dpi_scale, ev->touches[0].pos_y / dpi_scale); + simgui_add_touch_button_event(0, false); + break; + case SAPP_EVENTTYPE_TOUCHES_CANCELLED: + simgui_add_touch_button_event(0, false); + break; + case SAPP_EVENTTYPE_KEY_DOWN: + _simgui_update_modifiers(io, ev->modifiers); + // intercept Ctrl-V, this is handled via EVENTTYPE_CLIPBOARD_PASTED + if (!_simgui.desc.disable_paste_override) { + if (_simgui_is_ctrl(ev->modifiers) && (ev->key_code == SAPP_KEYCODE_V)) { + break; + } + } + // on web platform, don't forward Ctrl-X, Ctrl-V to the browser + if (_simgui_is_ctrl(ev->modifiers) && (ev->key_code == SAPP_KEYCODE_X)) { + sapp_consume_event(); + } + if (_simgui_is_ctrl(ev->modifiers) && (ev->key_code == SAPP_KEYCODE_C)) { + sapp_consume_event(); + } + // it's ok to add ImGuiKey_None key events + _simgui_add_sapp_key_event(io, ev->key_code, true); + break; + case SAPP_EVENTTYPE_KEY_UP: + _simgui_update_modifiers(io, ev->modifiers); + // intercept Ctrl-V, this is handled via EVENTTYPE_CLIPBOARD_PASTED + if (_simgui_is_ctrl(ev->modifiers) && (ev->key_code == SAPP_KEYCODE_V)) { + break; + } + // on web platform, don't forward Ctrl-X, Ctrl-V to the browser + if (_simgui_is_ctrl(ev->modifiers) && (ev->key_code == SAPP_KEYCODE_X)) { + sapp_consume_event(); + } + if (_simgui_is_ctrl(ev->modifiers) && (ev->key_code == SAPP_KEYCODE_C)) { + sapp_consume_event(); + } + // it's ok to add ImGuiKey_None key events + _simgui_add_sapp_key_event(io, ev->key_code, false); + break; + case SAPP_EVENTTYPE_CHAR: + /* on some platforms, special keys may be reported as + characters, which may confuse some ImGui widgets, + drop those, also don't forward characters if some + modifiers have been pressed + */ + _simgui_update_modifiers(io, ev->modifiers); + if ((ev->char_code >= 32) && + (ev->char_code != 127) && + (0 == (ev->modifiers & (SAPP_MODIFIER_ALT|SAPP_MODIFIER_CTRL|SAPP_MODIFIER_SUPER)))) + { + simgui_add_input_character(ev->char_code); + } + break; + case SAPP_EVENTTYPE_CLIPBOARD_PASTED: + // simulate a Ctrl-V key down/up + if (!_simgui.desc.disable_paste_override) { + _simgui_add_imgui_key_event(io, _simgui_copypaste_modifier(), true); + _simgui_add_imgui_key_event(io, ImGuiKey_V, true); + _simgui_add_imgui_key_event(io, ImGuiKey_V, false); + _simgui_add_imgui_key_event(io, _simgui_copypaste_modifier(), false); + } + break; + default: + break; + } + return io->WantCaptureKeyboard || io->WantCaptureMouse; +} +#endif // SOKOL_IMGUI_NO_SOKOL_APP + +#endif // SOKOL_IMPL diff --git a/src/sokol/imgui.d b/src/sokol/imgui.d new file mode 100644 index 0000000..36c0e6b --- /dev/null +++ b/src/sokol/imgui.d @@ -0,0 +1,4943 @@ +//! Manual D Bindings (sokol-imgui.h) - need cimgui.h + +module sokol.imgui; + +import core.stdc.stdint; +import core.stdc.stdio; +import core.stdc.stdarg; +import sapp = sokol.app; +import sg = sokol.gfx; + +extern (C): +nothrow: +@nogc: + +struct ImGuiInputTextDeactivateData; +struct ImGuiTableColumnsSettings; + +alias ImGuiCol = int; +alias ImGuiCond = int; +alias ImGuiDataType = int; +alias ImGuiDir = int; +alias ImGuiMouseButton = int; +alias ImGuiMouseCursor = int; +alias ImGuiSortDirection = int; +alias ImGuiStyleVar = int; +alias ImGuiTableBgTarget = int; +alias ImDrawFlags = int; +alias ImDrawListFlags = int; +alias ImFontAtlasFlags = int; +alias ImGuiBackendFlags = int; +alias ImGuiButtonFlags = int; +alias ImGuiColorEditFlags = int; +alias ImGuiConfigFlags = int; +alias ImGuiComboFlags = int; +alias ImGuiDragDropFlags = int; +alias ImGuiFocusedFlags = int; +alias ImGuiHoveredFlags = int; +alias ImGuiInputTextFlags = int; +alias ImGuiKeyChord = int; +alias ImGuiPopupFlags = int; +alias ImGuiSelectableFlags = int; +alias ImGuiSliderFlags = int; +alias ImGuiTabBarFlags = int; +alias ImGuiTabItemFlags = int; +alias ImGuiTableFlags = int; +alias ImGuiTableColumnFlags = int; +alias ImGuiTableRowFlags = int; +alias ImGuiTreeNodeFlags = int; +alias ImGuiViewportFlags = int; +alias ImGuiWindowFlags = int; +alias ImTextureID = void*; +alias ImDrawIdx = ushort; +alias ImGuiID = uint; +alias ImS8 = byte; +alias ImU8 = ubyte; +alias ImS16 = short; +alias ImU16 = ushort; +alias ImS32 = int; +alias ImU32 = uint; +alias ImS64 = long; +alias ImU64 = ulong; +alias ImWchar16 = ushort; +alias ImWchar32 = uint; +alias ImWchar = ushort; +alias ImGuiInputTextCallback = int function(ImGuiInputTextCallbackData* data); +alias ImGuiSizeCallback = void function(ImGuiSizeCallbackData* data); +alias ImGuiMemAllocFunc = void* function(size_t sz, void* user_data); +alias ImGuiMemFreeFunc = void function(void* ptr, void* user_data); + +struct ImVec2 +{ + float x; + float y; +} + +struct ImVec4 +{ + float x; + float y; + float z; + float w; +} + +enum ImGuiWindowFlags_ +{ + ImGuiWindowFlags_None = 0, + ImGuiWindowFlags_NoTitleBar = 1 << 0, + ImGuiWindowFlags_NoResize = 1 << 1, + ImGuiWindowFlags_NoMove = 1 << 2, + ImGuiWindowFlags_NoScrollbar = 1 << 3, + ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, + ImGuiWindowFlags_NoCollapse = 1 << 5, + ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, + ImGuiWindowFlags_NoBackground = 1 << 7, + ImGuiWindowFlags_NoSavedSettings = 1 << 8, + ImGuiWindowFlags_NoMouseInputs = 1 << 9, + ImGuiWindowFlags_MenuBar = 1 << 10, + ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, + ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, + ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, + ImGuiWindowFlags_AlwaysVerticalScrollbar = 1 << 14, + ImGuiWindowFlags_AlwaysHorizontalScrollbar = 1 << 15, + ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, + ImGuiWindowFlags_NoNavInputs = 1 << 18, + ImGuiWindowFlags_NoNavFocus = 1 << 19, + ImGuiWindowFlags_UnsavedDocument = 1 << 20, + ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, + ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar + | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse, + ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs + | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, + ImGuiWindowFlags_NavFlattened = 1 << 23, + ImGuiWindowFlags_ChildWindow = 1 << 24, + ImGuiWindowFlags_Tooltip = 1 << 25, + ImGuiWindowFlags_Popup = 1 << 26, + ImGuiWindowFlags_Modal = 1 << 27, + ImGuiWindowFlags_ChildMenu = 1 << 28 +} + +enum ImGuiInputTextFlags_ +{ + ImGuiInputTextFlags_None = 0, + ImGuiInputTextFlags_CharsDecimal = 1 << 0, + ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, + ImGuiInputTextFlags_CharsUppercase = 1 << 2, + ImGuiInputTextFlags_CharsNoBlank = 1 << 3, + ImGuiInputTextFlags_AutoSelectAll = 1 << 4, + ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, + ImGuiInputTextFlags_CallbackCompletion = 1 << 6, + ImGuiInputTextFlags_CallbackHistory = 1 << 7, + ImGuiInputTextFlags_CallbackAlways = 1 << 8, + ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, + ImGuiInputTextFlags_AllowTabInput = 1 << 10, + ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, + ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, + ImGuiInputTextFlags_AlwaysOverwrite = 1 << 13, + ImGuiInputTextFlags_ReadOnly = 1 << 14, + ImGuiInputTextFlags_Password = 1 << 15, + ImGuiInputTextFlags_NoUndoRedo = 1 << 16, + ImGuiInputTextFlags_CharsScientific = 1 << 17, + ImGuiInputTextFlags_CallbackResize = 1 << 18, + ImGuiInputTextFlags_CallbackEdit = 1 << 19, + ImGuiInputTextFlags_EscapeClearsAll = 1 << 20 +} + +enum ImGuiTreeNodeFlags_ +{ + ImGuiTreeNodeFlags_None = 0, + ImGuiTreeNodeFlags_Selected = 1 << 0, + ImGuiTreeNodeFlags_Framed = 1 << 1, + ImGuiTreeNodeFlags_AllowOverlap = 1 << 2, + ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, + ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, + ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, + ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, + ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, + ImGuiTreeNodeFlags_Leaf = 1 << 8, + ImGuiTreeNodeFlags_Bullet = 1 << 9, + ImGuiTreeNodeFlags_FramePadding = 1 << 10, + ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11, + ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12, + ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, + ImGuiTreeNodeFlags_CollapsingHeader + = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen + | ImGuiTreeNodeFlags_NoAutoOpenOnLog +} + +enum ImGuiPopupFlags_ +{ + ImGuiPopupFlags_None = 0, + ImGuiPopupFlags_MouseButtonLeft = 0, + ImGuiPopupFlags_MouseButtonRight = 1, + ImGuiPopupFlags_MouseButtonMiddle = 2, + ImGuiPopupFlags_MouseButtonMask_ = 0x1F, + ImGuiPopupFlags_MouseButtonDefault_ = 1, + ImGuiPopupFlags_NoOpenOverExistingPopup = 1 << 5, + ImGuiPopupFlags_NoOpenOverItems = 1 << 6, + ImGuiPopupFlags_AnyPopupId = 1 << 7, + ImGuiPopupFlags_AnyPopupLevel = 1 << 8, + ImGuiPopupFlags_AnyPopup = ImGuiPopupFlags_AnyPopupId | ImGuiPopupFlags_AnyPopupLevel +} + +enum ImGuiSelectableFlags_ +{ + ImGuiSelectableFlags_None = 0, + ImGuiSelectableFlags_DontClosePopups = 1 << 0, + ImGuiSelectableFlags_SpanAllColumns = 1 << 1, + ImGuiSelectableFlags_AllowDoubleClick = 1 << 2, + ImGuiSelectableFlags_Disabled = 1 << 3, + ImGuiSelectableFlags_AllowOverlap = 1 << 4 +} + +enum ImGuiComboFlags_ +{ + ImGuiComboFlags_None = 0, + ImGuiComboFlags_PopupAlignLeft = 1 << 0, + ImGuiComboFlags_HeightSmall = 1 << 1, + ImGuiComboFlags_HeightRegular = 1 << 2, + ImGuiComboFlags_HeightLarge = 1 << 3, + ImGuiComboFlags_HeightLargest = 1 << 4, + ImGuiComboFlags_NoArrowButton = 1 << 5, + ImGuiComboFlags_NoPreview = 1 << 6, + ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall + | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge + | ImGuiComboFlags_HeightLargest +} + +enum ImGuiTabBarFlags_ +{ + ImGuiTabBarFlags_None = 0, + ImGuiTabBarFlags_Reorderable = 1 << 0, + ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1, + ImGuiTabBarFlags_TabListPopupButton = 1 << 2, + ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3, + ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4, + ImGuiTabBarFlags_NoTooltip = 1 << 5, + ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6, + ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7, + ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown + | ImGuiTabBarFlags_FittingPolicyScroll, + ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown +} + +enum ImGuiTabItemFlags_ +{ + ImGuiTabItemFlags_None = 0, + ImGuiTabItemFlags_UnsavedDocument = 1 << 0, + ImGuiTabItemFlags_SetSelected = 1 << 1, + ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2, + ImGuiTabItemFlags_NoPushId = 1 << 3, + ImGuiTabItemFlags_NoTooltip = 1 << 4, + ImGuiTabItemFlags_NoReorder = 1 << 5, + ImGuiTabItemFlags_Leading = 1 << 6, + ImGuiTabItemFlags_Trailing = 1 << 7 +} + +enum ImGuiTableFlags_ +{ + ImGuiTableFlags_None = 0, + ImGuiTableFlags_Resizable = 1 << 0, + ImGuiTableFlags_Reorderable = 1 << 1, + ImGuiTableFlags_Hideable = 1 << 2, + ImGuiTableFlags_Sortable = 1 << 3, + ImGuiTableFlags_NoSavedSettings = 1 << 4, + ImGuiTableFlags_ContextMenuInBody = 1 << 5, + ImGuiTableFlags_RowBg = 1 << 6, + ImGuiTableFlags_BordersInnerH = 1 << 7, + ImGuiTableFlags_BordersOuterH = 1 << 8, + ImGuiTableFlags_BordersInnerV = 1 << 9, + ImGuiTableFlags_BordersOuterV = 1 << 10, + ImGuiTableFlags_BordersH = ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH, + ImGuiTableFlags_BordersV = ImGuiTableFlags_BordersInnerV + | ImGuiTableFlags_BordersOuterV, ImGuiTableFlags_BordersInner + = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH, + ImGuiTableFlags_BordersOuter = ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH, + ImGuiTableFlags_Borders = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter, + ImGuiTableFlags_NoBordersInBody = 1 << 11, + ImGuiTableFlags_NoBordersInBodyUntilResize = 1 << 12, + ImGuiTableFlags_SizingFixedFit = 1 << 13, + ImGuiTableFlags_SizingFixedSame = 2 << 13, + ImGuiTableFlags_SizingStretchProp = 3 << 13, + ImGuiTableFlags_SizingStretchSame = 4 << 13, + ImGuiTableFlags_NoHostExtendX = 1 << 16, + ImGuiTableFlags_NoHostExtendY = 1 << 17, + ImGuiTableFlags_NoKeepColumnsVisible = 1 << 18, + ImGuiTableFlags_PreciseWidths = 1 << 19, + ImGuiTableFlags_NoClip = 1 << 20, + ImGuiTableFlags_PadOuterX = 1 << 21, + ImGuiTableFlags_NoPadOuterX = 1 << 22, + ImGuiTableFlags_NoPadInnerX = 1 << 23, + ImGuiTableFlags_ScrollX = 1 << 24, + ImGuiTableFlags_ScrollY = 1 << 25, + ImGuiTableFlags_SortMulti = 1 << 26, + ImGuiTableFlags_SortTristate = 1 << 27, + ImGuiTableFlags_SizingMask_ = ImGuiTableFlags_SizingFixedFit + | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp + | ImGuiTableFlags_SizingStretchSame +} + +enum ImGuiTableColumnFlags_ +{ + ImGuiTableColumnFlags_None = 0, + ImGuiTableColumnFlags_Disabled = 1 << 0, + ImGuiTableColumnFlags_DefaultHide = 1 << 1, + ImGuiTableColumnFlags_DefaultSort = 1 << 2, + ImGuiTableColumnFlags_WidthStretch = 1 << 3, + ImGuiTableColumnFlags_WidthFixed = 1 << 4, + ImGuiTableColumnFlags_NoResize = 1 << 5, + ImGuiTableColumnFlags_NoReorder = 1 << 6, + ImGuiTableColumnFlags_NoHide = 1 << 7, + ImGuiTableColumnFlags_NoClip = 1 << 8, + ImGuiTableColumnFlags_NoSort = 1 << 9, + ImGuiTableColumnFlags_NoSortAscending = 1 << 10, + ImGuiTableColumnFlags_NoSortDescending = 1 << 11, + ImGuiTableColumnFlags_NoHeaderLabel = 1 << 12, + ImGuiTableColumnFlags_NoHeaderWidth = 1 << 13, + ImGuiTableColumnFlags_PreferSortAscending = 1 << 14, + ImGuiTableColumnFlags_PreferSortDescending = 1 << 15, + ImGuiTableColumnFlags_IndentEnable = 1 << 16, + ImGuiTableColumnFlags_IndentDisable = 1 << 17, + ImGuiTableColumnFlags_IsEnabled = 1 << 24, + ImGuiTableColumnFlags_IsVisible = 1 << 25, + ImGuiTableColumnFlags_IsSorted = 1 << 26, + ImGuiTableColumnFlags_IsHovered = 1 << 27, + ImGuiTableColumnFlags_WidthMask_ + = ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthFixed, + ImGuiTableColumnFlags_IndentMask_ = ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable, + ImGuiTableColumnFlags_StatusMask_ = ImGuiTableColumnFlags_IsEnabled + | ImGuiTableColumnFlags_IsVisible | ImGuiTableColumnFlags_IsSorted + | ImGuiTableColumnFlags_IsHovered, ImGuiTableColumnFlags_NoDirectResize_ = 1 << 30 +} + +enum ImGuiTableRowFlags_ +{ + ImGuiTableRowFlags_None = 0, + ImGuiTableRowFlags_Headers = 1 << 0 +} + +enum ImGuiTableBgTarget_ +{ + ImGuiTableBgTarget_None = 0, + ImGuiTableBgTarget_RowBg0 = 1, + ImGuiTableBgTarget_RowBg1 = 2, + ImGuiTableBgTarget_CellBg = 3 +} + +enum ImGuiFocusedFlags_ +{ + ImGuiFocusedFlags_None = 0, + ImGuiFocusedFlags_ChildWindows = 1 << 0, + ImGuiFocusedFlags_RootWindow = 1 << 1, + ImGuiFocusedFlags_AnyWindow = 1 << 2, + ImGuiFocusedFlags_NoPopupHierarchy = 1 << 3, + ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow + | ImGuiFocusedFlags_ChildWindows +} + +enum ImGuiHoveredFlags_ +{ + ImGuiHoveredFlags_None = 0, + ImGuiHoveredFlags_ChildWindows = 1 << 0, + ImGuiHoveredFlags_RootWindow = 1 << 1, + ImGuiHoveredFlags_AnyWindow = 1 << 2, + ImGuiHoveredFlags_NoPopupHierarchy = 1 << 3, + ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 5, + ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 7, + ImGuiHoveredFlags_AllowWhenOverlappedByItem = 1 << 8, + ImGuiHoveredFlags_AllowWhenOverlappedByWindow = 1 << 9, + ImGuiHoveredFlags_AllowWhenDisabled = 1 << 10, + ImGuiHoveredFlags_NoNavOverride = 1 << 11, + ImGuiHoveredFlags_AllowWhenOverlapped + = ImGuiHoveredFlags_AllowWhenOverlappedByItem | ImGuiHoveredFlags_AllowWhenOverlappedByWindow, + ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup + | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped, + ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows, + ImGuiHoveredFlags_ForTooltip = 1 << 12, + ImGuiHoveredFlags_Stationary = 1 << 13, + ImGuiHoveredFlags_DelayNone = 1 << 14, + ImGuiHoveredFlags_DelayShort = 1 << 15, + ImGuiHoveredFlags_DelayNormal = 1 << 16, + ImGuiHoveredFlags_NoSharedDelay = 1 << 17 +} + +enum ImGuiDragDropFlags_ +{ + ImGuiDragDropFlags_None = 0, + ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, + ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, + ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, + ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, + ImGuiDragDropFlags_SourceExtern = 1 << 4, + ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5, + ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, + ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, + ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12, + ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery + | ImGuiDragDropFlags_AcceptNoDrawDefaultRect +} + +enum ImGuiDataType_ +{ + ImGuiDataType_S8 = 0, + ImGuiDataType_U8 = 1, + ImGuiDataType_S16 = 2, + ImGuiDataType_U16 = 3, + ImGuiDataType_S32 = 4, + ImGuiDataType_U32 = 5, + ImGuiDataType_S64 = 6, + ImGuiDataType_U64 = 7, + ImGuiDataType_Float = 8, + ImGuiDataType_Double = 9, + ImGuiDataType_COUNT = 10 +} + +enum ImGuiDir_ +{ + ImGuiDir_None = -1, + ImGuiDir_Left = 0, + ImGuiDir_Right = 1, + ImGuiDir_Up = 2, + ImGuiDir_Down = 3, + ImGuiDir_COUNT = 4 +} + +enum ImGuiSortDirection_ +{ + ImGuiSortDirection_None = 0, + ImGuiSortDirection_Ascending = 1, + ImGuiSortDirection_Descending = 2 +} + +enum ImGuiKey +{ + ImGuiKey_None = 0, + ImGuiKey_Tab = 512, + ImGuiKey_LeftArrow = 513, + ImGuiKey_RightArrow = 514, + ImGuiKey_UpArrow = 515, + ImGuiKey_DownArrow = 516, + ImGuiKey_PageUp = 517, + ImGuiKey_PageDown = 518, + ImGuiKey_Home = 519, + ImGuiKey_End = 520, + ImGuiKey_Insert = 521, + ImGuiKey_Delete = 522, + ImGuiKey_Backspace = 523, + ImGuiKey_Space = 524, + ImGuiKey_Enter = 525, + ImGuiKey_Escape = 526, + ImGuiKey_LeftCtrl = 527, + ImGuiKey_LeftShift = 528, + ImGuiKey_LeftAlt = 529, + ImGuiKey_LeftSuper = 530, + ImGuiKey_RightCtrl = 531, + ImGuiKey_RightShift = 532, + ImGuiKey_RightAlt = 533, + ImGuiKey_RightSuper = 534, + ImGuiKey_Menu = 535, + ImGuiKey_0 = 536, + ImGuiKey_1 = 537, + ImGuiKey_2 = 538, + ImGuiKey_3 = 539, + ImGuiKey_4 = 540, + ImGuiKey_5 = 541, + ImGuiKey_6 = 542, + ImGuiKey_7 = 543, + ImGuiKey_8 = 544, + ImGuiKey_9 = 545, + ImGuiKey_A = 546, + ImGuiKey_B = 547, + ImGuiKey_C = 548, + ImGuiKey_D = 549, + ImGuiKey_E = 550, + ImGuiKey_F = 551, + ImGuiKey_G = 552, + ImGuiKey_H = 553, + ImGuiKey_I = 554, + ImGuiKey_J = 555, + ImGuiKey_K = 556, + ImGuiKey_L = 557, + ImGuiKey_M = 558, + ImGuiKey_N = 559, + ImGuiKey_O = 560, + ImGuiKey_P = 561, + ImGuiKey_Q = 562, + ImGuiKey_R = 563, + ImGuiKey_S = 564, + ImGuiKey_T = 565, + ImGuiKey_U = 566, + ImGuiKey_V = 567, + ImGuiKey_W = 568, + ImGuiKey_X = 569, + ImGuiKey_Y = 570, + ImGuiKey_Z = 571, + ImGuiKey_F1 = 572, + ImGuiKey_F2 = 573, + ImGuiKey_F3 = 574, + ImGuiKey_F4 = 575, + ImGuiKey_F5 = 576, + ImGuiKey_F6 = 577, + ImGuiKey_F7 = 578, + ImGuiKey_F8 = 579, + ImGuiKey_F9 = 580, + ImGuiKey_F10 = 581, + ImGuiKey_F11 = 582, + ImGuiKey_F12 = 583, + ImGuiKey_Apostrophe = 584, + ImGuiKey_Comma = 585, + ImGuiKey_Minus = 586, + ImGuiKey_Period = 587, + ImGuiKey_Slash = 588, + ImGuiKey_Semicolon = 589, + ImGuiKey_Equal = 590, + ImGuiKey_LeftBracket = 591, + ImGuiKey_Backslash = 592, + ImGuiKey_RightBracket = 593, + ImGuiKey_GraveAccent = 594, + ImGuiKey_CapsLock = 595, + ImGuiKey_ScrollLock = 596, + ImGuiKey_NumLock = 597, + ImGuiKey_PrintScreen = 598, + ImGuiKey_Pause = 599, + ImGuiKey_Keypad0 = 600, + ImGuiKey_Keypad1 = 601, + ImGuiKey_Keypad2 = 602, + ImGuiKey_Keypad3 = 603, + ImGuiKey_Keypad4 = 604, + ImGuiKey_Keypad5 = 605, + ImGuiKey_Keypad6 = 606, + ImGuiKey_Keypad7 = 607, + ImGuiKey_Keypad8 = 608, + ImGuiKey_Keypad9 = 609, + ImGuiKey_KeypadDecimal = 610, + ImGuiKey_KeypadDivide = 611, + ImGuiKey_KeypadMultiply = 612, + ImGuiKey_KeypadSubtract = 613, + ImGuiKey_KeypadAdd = 614, + ImGuiKey_KeypadEnter = 615, + ImGuiKey_KeypadEqual = 616, + ImGuiKey_GamepadStart = 617, + ImGuiKey_GamepadBack = 618, + ImGuiKey_GamepadFaceLeft = 619, + ImGuiKey_GamepadFaceRight = 620, + ImGuiKey_GamepadFaceUp = 621, + ImGuiKey_GamepadFaceDown = 622, + ImGuiKey_GamepadDpadLeft = 623, + ImGuiKey_GamepadDpadRight = 624, + ImGuiKey_GamepadDpadUp = 625, + ImGuiKey_GamepadDpadDown = 626, + ImGuiKey_GamepadL1 = 627, + ImGuiKey_GamepadR1 = 628, + ImGuiKey_GamepadL2 = 629, + ImGuiKey_GamepadR2 = 630, + ImGuiKey_GamepadL3 = 631, + ImGuiKey_GamepadR3 = 632, + ImGuiKey_GamepadLStickLeft = 633, + ImGuiKey_GamepadLStickRight = 634, + ImGuiKey_GamepadLStickUp = 635, + ImGuiKey_GamepadLStickDown = 636, + ImGuiKey_GamepadRStickLeft = 637, + ImGuiKey_GamepadRStickRight = 638, + ImGuiKey_GamepadRStickUp = 639, + ImGuiKey_GamepadRStickDown = 640, + ImGuiKey_MouseLeft = 641, + ImGuiKey_MouseRight = 642, + ImGuiKey_MouseMiddle = 643, + ImGuiKey_MouseX1 = 644, + ImGuiKey_MouseX2 = 645, + ImGuiKey_MouseWheelX = 646, + ImGuiKey_MouseWheelY = 647, + ImGuiKey_ReservedForModCtrl = 648, + ImGuiKey_ReservedForModShift = 649, + ImGuiKey_ReservedForModAlt = 650, + ImGuiKey_ReservedForModSuper = 651, + ImGuiKey_COUNT = 652, + ImGuiMod_None = 0, + ImGuiMod_Ctrl = 1 << 12, + ImGuiMod_Shift = 1 << 13, + ImGuiMod_Alt = 1 << 14, + ImGuiMod_Super = 1 << 15, + ImGuiMod_Shortcut = 1 << 11, + ImGuiMod_Mask_ = 0xF800, + ImGuiKey_NamedKey_BEGIN = 512, + ImGuiKey_NamedKey_END = ImGuiKey_COUNT, + ImGuiKey_NamedKey_COUNT = ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN, + ImGuiKey_KeysData_SIZE = ImGuiKey_COUNT, + ImGuiKey_KeysData_OFFSET = 0 +} + +enum ImGuiNavInput +{ + ImGuiNavInput_Activate = 0, + ImGuiNavInput_Cancel = 1, + ImGuiNavInput_Input = 2, + ImGuiNavInput_Menu = 3, + ImGuiNavInput_DpadLeft = 4, + ImGuiNavInput_DpadRight = 5, + ImGuiNavInput_DpadUp = 6, + ImGuiNavInput_DpadDown = 7, + ImGuiNavInput_LStickLeft = 8, + ImGuiNavInput_LStickRight = 9, + ImGuiNavInput_LStickUp = 10, + ImGuiNavInput_LStickDown = 11, + ImGuiNavInput_FocusPrev = 12, + ImGuiNavInput_FocusNext = 13, + ImGuiNavInput_TweakSlow = 14, + ImGuiNavInput_TweakFast = 15, + ImGuiNavInput_COUNT = 16 +} + +enum ImGuiConfigFlags_ +{ + ImGuiConfigFlags_None = 0, + ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, + ImGuiConfigFlags_NavEnableGamepad = 1 << 1, + ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, + ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, + ImGuiConfigFlags_NoMouse = 1 << 4, + ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, + ImGuiConfigFlags_IsSRGB = 1 << 20, + ImGuiConfigFlags_IsTouchScreen = 1 << 21 +} + +enum ImGuiBackendFlags_ +{ + ImGuiBackendFlags_None = 0, + ImGuiBackendFlags_HasGamepad = 1 << 0, + ImGuiBackendFlags_HasMouseCursors = 1 << 1, + ImGuiBackendFlags_HasSetMousePos = 1 << 2, + ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3 +} + +enum ImGuiCol_ +{ + ImGuiCol_Text = 0, + ImGuiCol_TextDisabled = 1, + ImGuiCol_WindowBg = 2, + ImGuiCol_ChildBg = 3, + ImGuiCol_PopupBg = 4, + ImGuiCol_Border = 5, + ImGuiCol_BorderShadow = 6, + ImGuiCol_FrameBg = 7, + ImGuiCol_FrameBgHovered = 8, + ImGuiCol_FrameBgActive = 9, + ImGuiCol_TitleBg = 10, + ImGuiCol_TitleBgActive = 11, + ImGuiCol_TitleBgCollapsed = 12, + ImGuiCol_MenuBarBg = 13, + ImGuiCol_ScrollbarBg = 14, + ImGuiCol_ScrollbarGrab = 15, + ImGuiCol_ScrollbarGrabHovered = 16, + ImGuiCol_ScrollbarGrabActive = 17, + ImGuiCol_CheckMark = 18, + ImGuiCol_SliderGrab = 19, + ImGuiCol_SliderGrabActive = 20, + ImGuiCol_Button = 21, + ImGuiCol_ButtonHovered = 22, + ImGuiCol_ButtonActive = 23, + ImGuiCol_Header = 24, + ImGuiCol_HeaderHovered = 25, + ImGuiCol_HeaderActive = 26, + ImGuiCol_Separator = 27, + ImGuiCol_SeparatorHovered = 28, + ImGuiCol_SeparatorActive = 29, + ImGuiCol_ResizeGrip = 30, + ImGuiCol_ResizeGripHovered = 31, + ImGuiCol_ResizeGripActive = 32, + ImGuiCol_Tab = 33, + ImGuiCol_TabHovered = 34, + ImGuiCol_TabActive = 35, + ImGuiCol_TabUnfocused = 36, + ImGuiCol_TabUnfocusedActive = 37, + ImGuiCol_PlotLines = 38, + ImGuiCol_PlotLinesHovered = 39, + ImGuiCol_PlotHistogram = 40, + ImGuiCol_PlotHistogramHovered = 41, + ImGuiCol_TableHeaderBg = 42, + ImGuiCol_TableBorderStrong = 43, + ImGuiCol_TableBorderLight = 44, + ImGuiCol_TableRowBg = 45, + ImGuiCol_TableRowBgAlt = 46, + ImGuiCol_TextSelectedBg = 47, + ImGuiCol_DragDropTarget = 48, + ImGuiCol_NavHighlight = 49, + ImGuiCol_NavWindowingHighlight = 50, + ImGuiCol_NavWindowingDimBg = 51, + ImGuiCol_ModalWindowDimBg = 52, + ImGuiCol_COUNT = 53 +} + +enum ImGuiStyleVar_ +{ + ImGuiStyleVar_Alpha = 0, + ImGuiStyleVar_DisabledAlpha = 1, + ImGuiStyleVar_WindowPadding = 2, + ImGuiStyleVar_WindowRounding = 3, + ImGuiStyleVar_WindowBorderSize = 4, + ImGuiStyleVar_WindowMinSize = 5, + ImGuiStyleVar_WindowTitleAlign = 6, + ImGuiStyleVar_ChildRounding = 7, + ImGuiStyleVar_ChildBorderSize = 8, + ImGuiStyleVar_PopupRounding = 9, + ImGuiStyleVar_PopupBorderSize = 10, + ImGuiStyleVar_FramePadding = 11, + ImGuiStyleVar_FrameRounding = 12, + ImGuiStyleVar_FrameBorderSize = 13, + ImGuiStyleVar_ItemSpacing = 14, + ImGuiStyleVar_ItemInnerSpacing = 15, + ImGuiStyleVar_IndentSpacing = 16, + ImGuiStyleVar_CellPadding = 17, + ImGuiStyleVar_ScrollbarSize = 18, + ImGuiStyleVar_ScrollbarRounding = 19, + ImGuiStyleVar_GrabMinSize = 20, + ImGuiStyleVar_GrabRounding = 21, + ImGuiStyleVar_TabRounding = 22, + ImGuiStyleVar_ButtonTextAlign = 23, + ImGuiStyleVar_SelectableTextAlign = 24, + ImGuiStyleVar_SeparatorTextBorderSize = 25, + ImGuiStyleVar_SeparatorTextAlign = 26, + ImGuiStyleVar_SeparatorTextPadding = 27, + ImGuiStyleVar_COUNT = 28 +} + +enum ImGuiButtonFlags_ +{ + ImGuiButtonFlags_None = 0, + ImGuiButtonFlags_MouseButtonLeft = 1 << 0, + ImGuiButtonFlags_MouseButtonRight = 1 << 1, + ImGuiButtonFlags_MouseButtonMiddle = 1 << 2, + ImGuiButtonFlags_MouseButtonMask_ = ImGuiButtonFlags_MouseButtonLeft + | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle, + ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft +} + +enum ImGuiColorEditFlags_ +{ + ImGuiColorEditFlags_None = 0, + ImGuiColorEditFlags_NoAlpha = 1 << 1, + ImGuiColorEditFlags_NoPicker = 1 << 2, + ImGuiColorEditFlags_NoOptions = 1 << 3, + ImGuiColorEditFlags_NoSmallPreview = 1 << 4, + ImGuiColorEditFlags_NoInputs = 1 << 5, + ImGuiColorEditFlags_NoTooltip = 1 << 6, + ImGuiColorEditFlags_NoLabel = 1 << 7, + ImGuiColorEditFlags_NoSidePreview = 1 << 8, + ImGuiColorEditFlags_NoDragDrop = 1 << 9, + ImGuiColorEditFlags_NoBorder = 1 << 10, + ImGuiColorEditFlags_AlphaBar = 1 << 16, + ImGuiColorEditFlags_AlphaPreview = 1 << 17, + ImGuiColorEditFlags_AlphaPreviewHalf = 1 << 18, + ImGuiColorEditFlags_HDR = 1 << 19, + ImGuiColorEditFlags_DisplayRGB = 1 << 20, + ImGuiColorEditFlags_DisplayHSV = 1 << 21, + ImGuiColorEditFlags_DisplayHex = 1 << 22, + ImGuiColorEditFlags_Uint8 = 1 << 23, + ImGuiColorEditFlags_Float = 1 << 24, + ImGuiColorEditFlags_PickerHueBar = 1 << 25, + ImGuiColorEditFlags_PickerHueWheel = 1 << 26, + ImGuiColorEditFlags_InputRGB = 1 << 27, + ImGuiColorEditFlags_InputHSV = 1 << 28, + ImGuiColorEditFlags_DefaultOptions_ + = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayRGB + | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_PickerHueBar, + ImGuiColorEditFlags_DisplayMask_ = ImGuiColorEditFlags_DisplayRGB + | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_DisplayHex, + ImGuiColorEditFlags_DataTypeMask_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_Float, + ImGuiColorEditFlags_PickerMask_ + = ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_PickerHueBar, + ImGuiColorEditFlags_InputMask_ = ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV +} + +enum ImGuiSliderFlags_ +{ + ImGuiSliderFlags_None = 0, + ImGuiSliderFlags_AlwaysClamp = 1 << 4, + ImGuiSliderFlags_Logarithmic = 1 << 5, + ImGuiSliderFlags_NoRoundToFormat = 1 << 6, + ImGuiSliderFlags_NoInput = 1 << 7, + ImGuiSliderFlags_InvalidMask_ = 0x7000000F +} + +enum ImGuiMouseButton_ +{ + ImGuiMouseButton_Left = 0, + ImGuiMouseButton_Right = 1, + ImGuiMouseButton_Middle = 2, + ImGuiMouseButton_COUNT = 5 +} + +enum ImGuiMouseCursor_ +{ + ImGuiMouseCursor_None = -1, + ImGuiMouseCursor_Arrow = 0, + ImGuiMouseCursor_TextInput = 1, + ImGuiMouseCursor_ResizeAll = 2, + ImGuiMouseCursor_ResizeNS = 3, + ImGuiMouseCursor_ResizeEW = 4, + ImGuiMouseCursor_ResizeNESW = 5, + ImGuiMouseCursor_ResizeNWSE = 6, + ImGuiMouseCursor_Hand = 7, + ImGuiMouseCursor_NotAllowed = 8, + ImGuiMouseCursor_COUNT = 9 +} + +enum ImGuiMouseSource +{ + ImGuiMouseSource_Mouse = 0, + ImGuiMouseSource_TouchScreen = 1, + ImGuiMouseSource_Pen = 2, + ImGuiMouseSource_COUNT = 3 +} + +enum ImGuiCond_ +{ + ImGuiCond_None = 0, + ImGuiCond_Always = 1 << 0, + ImGuiCond_Once = 1 << 1, + ImGuiCond_FirstUseEver = 1 << 2, + ImGuiCond_Appearing = 1 << 3 +} + +struct ImGuiStyle +{ + float Alpha; + float DisabledAlpha; + ImVec2 WindowPadding; + float WindowRounding; + float WindowBorderSize; + ImVec2 WindowMinSize; + ImVec2 WindowTitleAlign; + ImGuiDir WindowMenuButtonPosition; + float ChildRounding; + float ChildBorderSize; + float PopupRounding; + float PopupBorderSize; + ImVec2 FramePadding; + float FrameRounding; + float FrameBorderSize; + ImVec2 ItemSpacing; + ImVec2 ItemInnerSpacing; + ImVec2 CellPadding; + ImVec2 TouchExtraPadding; + float IndentSpacing; + float ColumnsMinSpacing; + float ScrollbarSize; + float ScrollbarRounding; + float GrabMinSize; + float GrabRounding; + float LogSliderDeadzone; + float TabRounding; + float TabBorderSize; + float TabMinWidthForCloseButton; + ImGuiDir ColorButtonPosition; + ImVec2 ButtonTextAlign; + ImVec2 SelectableTextAlign; + float SeparatorTextBorderSize; + ImVec2 SeparatorTextAlign; + ImVec2 SeparatorTextPadding; + ImVec2 DisplayWindowPadding; + ImVec2 DisplaySafeAreaPadding; + float MouseCursorScale; + bool AntiAliasedLines; + bool AntiAliasedLinesUseTex; + bool AntiAliasedFill; + float CurveTessellationTol; + float CircleTessellationMaxError; + ImVec4[ImGuiCol_.ImGuiCol_COUNT] Colors; + float HoverStationaryDelay; + float HoverDelayShort; + float HoverDelayNormal; + ImGuiHoveredFlags HoverFlagsForTooltipMouse; + ImGuiHoveredFlags HoverFlagsForTooltipNav; +} + +struct ImGuiKeyData +{ + bool Down; + float DownDuration; + float DownDurationPrev; + float AnalogValue; +} + +struct ImVector_ImWchar +{ + int Size; + int Capacity; + ImWchar* Data; +} + +struct ImGuiIO +{ + ImGuiConfigFlags ConfigFlags; + ImGuiBackendFlags BackendFlags; + ImVec2 DisplaySize; + float DeltaTime; + float IniSavingRate; + const(char)* IniFilename; + const(char)* LogFilename; + void* UserData; + ImFontAtlas* Fonts; + float FontGlobalScale; + bool FontAllowUserScaling; + ImFont* FontDefault; + ImVec2 DisplayFramebufferScale; + bool MouseDrawCursor; + bool ConfigMacOSXBehaviors; + bool ConfigInputTrickleEventQueue; + bool ConfigInputTextCursorBlink; + bool ConfigInputTextEnterKeepActive; + bool ConfigDragClickToInputText; + bool ConfigWindowsResizeFromEdges; + bool ConfigWindowsMoveFromTitleBarOnly; + float ConfigMemoryCompactTimer; + float MouseDoubleClickTime; + float MouseDoubleClickMaxDist; + float MouseDragThreshold; + float KeyRepeatDelay; + float KeyRepeatRate; + bool ConfigDebugBeginReturnValueOnce; + bool ConfigDebugBeginReturnValueLoop; + bool ConfigDebugIgnoreFocusLoss; + bool ConfigDebugIniSettings; + const(char)* BackendPlatformName; + const(char)* BackendRendererName; + void* BackendPlatformUserData; + void* BackendRendererUserData; + void* BackendLanguageUserData; + const(char)* function(void* user_data) GetClipboardTextFn; + void function(void* user_data, const(char)* text) SetClipboardTextFn; + void* ClipboardUserData; + void function(ImGuiViewport* viewport, ImGuiPlatformImeData* data) SetPlatformImeDataFn; + void* _UnusedPadding; + ImWchar PlatformLocaleDecimalPoint; + bool WantCaptureMouse; + bool WantCaptureKeyboard; + bool WantTextInput; + bool WantSetMousePos; + bool WantSaveIniSettings; + bool NavActive; + bool NavVisible; + float Framerate; + int MetricsRenderVertices; + int MetricsRenderIndices; + int MetricsRenderWindows; + int MetricsActiveWindows; + int MetricsActiveAllocations; + ImVec2 MouseDelta; + int[ImGuiKey.ImGuiKey_COUNT] KeyMap; + bool[ImGuiKey.ImGuiKey_COUNT] KeysDown; + float[ImGuiNavInput.ImGuiNavInput_COUNT] NavInputs; + ImGuiContext* Ctx; + ImVec2 MousePos; + bool[5] MouseDown; + float MouseWheel; + float MouseWheelH; + ImGuiMouseSource MouseSource; + bool KeyCtrl; + bool KeyShift; + bool KeyAlt; + bool KeySuper; + ImGuiKeyChord KeyMods; + ImGuiKeyData[ImGuiKey.ImGuiKey_KeysData_SIZE] KeysData; + bool WantCaptureMouseUnlessPopupClose; + ImVec2 MousePosPrev; + ImVec2[5] MouseClickedPos; + double[5] MouseClickedTime; + bool[5] MouseClicked; + bool[5] MouseDoubleClicked; + ImU16[5] MouseClickedCount; + ImU16[5] MouseClickedLastCount; + bool[5] MouseReleased; + bool[5] MouseDownOwned; + bool[5] MouseDownOwnedUnlessPopupClose; + bool MouseWheelRequestAxisSwap; + float[5] MouseDownDuration; + float[5] MouseDownDurationPrev; + float[5] MouseDragMaxDistanceSqr; + float PenPressure; + bool AppFocusLost; + bool AppAcceptingEvents; + ImS8 BackendUsingLegacyKeyArrays; + bool BackendUsingLegacyNavInputArray; + ImWchar16 InputQueueSurrogate; + ImVector_ImWchar InputQueueCharacters; +} + +struct ImGuiInputTextCallbackData +{ + ImGuiContext* Ctx; + ImGuiInputTextFlags EventFlag; + ImGuiInputTextFlags Flags; + void* UserData; + ImWchar EventChar; + ImGuiKey EventKey; + char* Buf; + int BufTextLen; + int BufSize; + bool BufDirty; + int CursorPos; + int SelectionStart; + int SelectionEnd; +} + +struct ImGuiSizeCallbackData +{ + void* UserData; + ImVec2 Pos; + ImVec2 CurrentSize; + ImVec2 DesiredSize; +} + +struct ImGuiPayload +{ + void* Data; + int DataSize; + ImGuiID SourceId; + ImGuiID SourceParentId; + int DataFrameCount; + char[33] DataType; + bool Preview; + bool Delivery; +} + +struct ImGuiTableColumnSortSpecs +{ + import std.bitmanip : bitfields; + + ImGuiID ColumnUserID; + ImS16 ColumnIndex; + ImS16 SortOrder; + mixin(bitfields!(ImGuiSortDirection, "SortDirection", 8)); +} + +struct ImGuiTableSortSpecs +{ + const(ImGuiTableColumnSortSpecs)* Specs; + int SpecsCount; + bool SpecsDirty; +} + +struct ImGuiOnceUponAFrame +{ + int RefFrame; +} + +struct ImGuiTextRange +{ + const(char)* b; + const(char)* e; +} + +struct ImVector_ImGuiTextRange +{ + int Size; + int Capacity; + ImGuiTextRange* Data; +} + +struct ImGuiTextFilter +{ + char[256] InputBuf; + ImVector_ImGuiTextRange Filters; + int CountGrep; +} + +struct ImVector_char +{ + int Size; + int Capacity; + char* Data; +} + +struct ImGuiTextBuffer +{ + ImVector_char Buf; +} + +struct ImGuiStoragePair +{ + ImGuiID key; +} + +struct ImVector_ImGuiStoragePair +{ + int Size; + int Capacity; + ImGuiStoragePair* Data; +} + +struct ImGuiStorage +{ + ImVector_ImGuiStoragePair Data; +} + +struct ImGuiListClipper +{ + ImGuiContext* Ctx; + int DisplayStart; + int DisplayEnd; + int ItemsCount; + float ItemsHeight; + float StartPosY; + void* TempData; +} + +struct ImColor +{ + ImVec4 Value; +} + +alias ImDrawCallback = void function(const(ImDrawList)* parent_list, const(ImDrawCmd)* cmd); + +struct ImDrawCmd +{ + ImVec4 ClipRect; + ImTextureID TextureId; + uint VtxOffset; + uint IdxOffset; + uint ElemCount; + ImDrawCallback UserCallback; + void* UserCallbackData; +} + +struct ImDrawVert +{ + ImVec2 pos; + ImVec2 uv; + ImU32 col; +} + +struct ImDrawCmdHeader +{ + ImVec4 ClipRect; + ImTextureID TextureId; + uint VtxOffset; +} + +struct ImVector_ImDrawCmd +{ + int Size; + int Capacity; + ImDrawCmd* Data; +} + +struct ImVector_ImDrawIdx +{ + int Size; + int Capacity; + ImDrawIdx* Data; +} + +struct ImDrawChannel +{ + ImVector_ImDrawCmd _CmdBuffer; + ImVector_ImDrawIdx _IdxBuffer; +} + +struct ImVector_ImDrawChannel +{ + int Size; + int Capacity; + ImDrawChannel* Data; +} + +struct ImDrawListSplitter +{ + int _Current; + int _Count; + ImVector_ImDrawChannel _Channels; +} + +enum ImDrawFlags_ +{ + ImDrawFlags_None = 0, + ImDrawFlags_Closed = 1 << 0, + ImDrawFlags_RoundCornersTopLeft = 1 << 4, + ImDrawFlags_RoundCornersTopRight = 1 << 5, + ImDrawFlags_RoundCornersBottomLeft = 1 << 6, + ImDrawFlags_RoundCornersBottomRight = 1 << 7, + ImDrawFlags_RoundCornersNone = 1 << 8, + ImDrawFlags_RoundCornersTop = ImDrawFlags_RoundCornersTopLeft + | ImDrawFlags_RoundCornersTopRight, ImDrawFlags_RoundCornersBottom + = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight, + ImDrawFlags_RoundCornersLeft = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersTopLeft, + ImDrawFlags_RoundCornersRight = ImDrawFlags_RoundCornersBottomRight | ImDrawFlags_RoundCornersTopRight, + ImDrawFlags_RoundCornersAll = ImDrawFlags_RoundCornersTopLeft + | ImDrawFlags_RoundCornersTopRight | ImDrawFlags_RoundCornersBottomLeft + | ImDrawFlags_RoundCornersBottomRight, + ImDrawFlags_RoundCornersDefault_ = ImDrawFlags_RoundCornersAll, + ImDrawFlags_RoundCornersMask_ = ImDrawFlags_RoundCornersAll | ImDrawFlags_RoundCornersNone +} + +enum ImDrawListFlags_ +{ + ImDrawListFlags_None = 0, + ImDrawListFlags_AntiAliasedLines = 1 << 0, + ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1, + ImDrawListFlags_AntiAliasedFill = 1 << 2, + ImDrawListFlags_AllowVtxOffset = 1 << 3 +} + +struct ImVector_ImDrawVert +{ + int Size; + int Capacity; + ImDrawVert* Data; +} + +struct ImVector_ImVec4 +{ + int Size; + int Capacity; + ImVec4* Data; +} + +struct ImVector_ImTextureID +{ + int Size; + int Capacity; + ImTextureID* Data; +} + +struct ImVector_ImVec2 +{ + int Size; + int Capacity; + ImVec2* Data; +} + +struct ImDrawList +{ + ImVector_ImDrawCmd CmdBuffer; + ImVector_ImDrawIdx IdxBuffer; + ImVector_ImDrawVert VtxBuffer; + ImDrawListFlags Flags; + uint _VtxCurrentIdx; + ImDrawListSharedData* _Data; + const(char)* _OwnerName; + ImDrawVert* _VtxWritePtr; + ImDrawIdx* _IdxWritePtr; + ImVector_ImVec4 _ClipRectStack; + ImVector_ImTextureID _TextureIdStack; + ImVector_ImVec2 _Path; + ImDrawCmdHeader _CmdHeader; + ImDrawListSplitter _Splitter; + float _FringeScale; +} + +struct ImVector_ImDrawListPtr +{ + int Size; + int Capacity; + ImDrawList** Data; +} + +struct ImDrawData +{ + bool Valid; + int CmdListsCount; + int TotalIdxCount; + int TotalVtxCount; + ImVector_ImDrawListPtr CmdLists; + ImVec2 DisplayPos; + ImVec2 DisplaySize; + ImVec2 FramebufferScale; + ImGuiViewport* OwnerViewport; +} + +struct ImFontConfig +{ + void* FontData; + int FontDataSize; + bool FontDataOwnedByAtlas; + int FontNo; + float SizePixels; + int OversampleH; + int OversampleV; + bool PixelSnapH; + ImVec2 GlyphExtraSpacing; + ImVec2 GlyphOffset; + const(ImWchar)* GlyphRanges; + float GlyphMinAdvanceX; + float GlyphMaxAdvanceX; + bool MergeMode; + uint FontBuilderFlags; + float RasterizerMultiply; + ImWchar EllipsisChar; + char[40] Name; + ImFont* DstFont; +} + +struct ImFontGlyph +{ + import std.bitmanip : bitfields; + + mixin(bitfields!(uint, "Colored", 1, uint, "Visible", 1, uint, "Codepoint", 30)); + + float AdvanceX; + float X0; + float Y0; + float X1; + float Y1; + float U0; + float V0; + float U1; + float V1; +} + +struct ImVector_ImU32 +{ + int Size; + int Capacity; + ImU32* Data; +} + +struct ImFontGlyphRangesBuilder +{ + ImVector_ImU32 UsedChars; +} + +struct ImFontAtlasCustomRect +{ + ushort Width; + ushort Height; + ushort X; + ushort Y; + uint GlyphID; + float GlyphAdvanceX; + ImVec2 GlyphOffset; + ImFont* Font; +} + +enum ImFontAtlasFlags_ +{ + ImFontAtlasFlags_None = 0, + ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, + ImFontAtlasFlags_NoMouseCursors = 1 << 1, + ImFontAtlasFlags_NoBakedLines = 1 << 2 +} + +struct ImVector_ImFontPtr +{ + int Size; + int Capacity; + ImFont** Data; +} + +struct ImVector_ImFontAtlasCustomRect +{ + int Size; + int Capacity; + ImFontAtlasCustomRect* Data; +} + +struct ImVector_ImFontConfig +{ + int Size; + int Capacity; + ImFontConfig* Data; +} + +struct ImFontAtlas +{ + ImFontAtlasFlags Flags; + ImTextureID TexID; + int TexDesiredWidth; + int TexGlyphPadding; + bool Locked; + void* UserData; + bool TexReady; + bool TexPixelsUseColors; + ubyte* TexPixelsAlpha8; + uint* TexPixelsRGBA32; + int TexWidth; + int TexHeight; + ImVec2 TexUvScale; + ImVec2 TexUvWhitePixel; + ImVector_ImFontPtr Fonts; + ImVector_ImFontAtlasCustomRect CustomRects; + ImVector_ImFontConfig ConfigData; + ImVec4[64] TexUvLines; + const(ImFontBuilderIO)* FontBuilderIO; + uint FontBuilderFlags; + int PackIdMouseCursors; + int PackIdLines; +} + +struct ImVector_float +{ + int Size; + int Capacity; + float* Data; +} + +struct ImVector_ImFontGlyph +{ + int Size; + int Capacity; + ImFontGlyph* Data; +} + +struct ImFont +{ + ImVector_float IndexAdvanceX; + float FallbackAdvanceX; + float FontSize; + ImVector_ImWchar IndexLookup; + ImVector_ImFontGlyph Glyphs; + const(ImFontGlyph)* FallbackGlyph; + ImFontAtlas* ContainerAtlas; + const(ImFontConfig)* ConfigData; + short ConfigDataCount; + ImWchar FallbackChar; + ImWchar EllipsisChar; + short EllipsisCharCount; + float EllipsisWidth; + float EllipsisCharStep; + bool DirtyLookupTables; + float Scale; + float Ascent; + float Descent; + int MetricsTotalSurface; + ImU8[2] Used4kPagesMap; +} + +enum ImGuiViewportFlags_ +{ + ImGuiViewportFlags_None = 0, + ImGuiViewportFlags_IsPlatformWindow = 1 << 0, + ImGuiViewportFlags_IsPlatformMonitor = 1 << 1, + ImGuiViewportFlags_OwnedByApp = 1 << 2 +} + +struct ImGuiViewport +{ + ImGuiViewportFlags Flags; + ImVec2 Pos; + ImVec2 Size; + ImVec2 WorkPos; + ImVec2 WorkSize; + void* PlatformHandleRaw; +} + +struct ImGuiPlatformImeData +{ + bool WantVisible; + ImVec2 InputPos; + float InputLineHeight; +} + +alias ImGuiLayoutType = int; +alias ImGuiActivateFlags = int; +alias ImGuiDebugLogFlags = int; +alias ImGuiFocusRequestFlags = int; +alias ImGuiInputFlags = int; +alias ImGuiItemFlags = int; +alias ImGuiItemStatusFlags = int; +alias ImGuiOldColumnFlags = int; +alias ImGuiNavHighlightFlags = int; +alias ImGuiNavMoveFlags = int; +alias ImGuiNextItemDataFlags = int; +alias ImGuiNextWindowDataFlags = int; +alias ImGuiScrollFlags = int; +alias ImGuiSeparatorFlags = int; +alias ImGuiTextFlags = int; +alias ImGuiTooltipFlags = int; +alias ImGuiErrorLogCallback = void function(void* user_data, const(char)* fmt, ...); +extern __gshared ImGuiContext* GImGui; + +struct StbUndoRecord +{ + int where; + int insert_length; + int delete_length; + int char_storage; +} + +struct StbUndoState +{ + StbUndoRecord[99] undo_rec; + ImWchar[999] undo_char; + short undo_point; + short redo_point; + int undo_char_point; + int redo_char_point; +} + +struct STB_TexteditState +{ + int cursor; + int select_start; + int select_end; + ubyte insert_mode; + int row_count_per_page; + ubyte cursor_at_end_of_line; + ubyte initialized; + ubyte has_preferred_x; + ubyte single_line; + ubyte padding1; + ubyte padding2; + ubyte padding3; + float preferred_x; + StbUndoState undostate; +} + +struct StbTexteditRow +{ + float x0; + float x1; + float baseline_y_delta; + float ymin; + float ymax; + int num_chars; +} + +alias ImFileHandle = _IO_FILE*; + +struct ImVec1 +{ + float x; +} + +struct ImVec2ih +{ + short x; + short y; +} + +struct ImRect +{ + ImVec2 Min; + ImVec2 Max; +} + +alias ImBitArrayPtr = uint*; + +struct ImBitVector +{ + ImVector_ImU32 Storage; +} + +alias ImPoolIdx = int; + +struct ImVector_int +{ + int Size; + int Capacity; + int* Data; +} + +struct ImGuiTextIndex +{ + ImVector_int LineOffsets; + int EndOffset; +} + +struct ImDrawListSharedData +{ + ImVec2 TexUvWhitePixel; + ImFont* Font; + float FontSize; + float CurveTessellationTol; + float CircleSegmentMaxError; + ImVec4 ClipRectFullscreen; + ImDrawListFlags InitialFlags; + ImVector_ImVec2 TempBuffer; + ImVec2[48] ArcFastVtx; + float ArcFastRadiusCutoff; + ImU8[64] CircleSegmentCounts; + const(ImVec4)* TexUvLines; +} + +struct ImDrawDataBuilder +{ + ImVector_ImDrawListPtr*[2] Layers; + ImVector_ImDrawListPtr LayerData1; +} + +enum ImGuiItemFlags_ +{ + ImGuiItemFlags_None = 0, + ImGuiItemFlags_NoTabStop = 1 << 0, + ImGuiItemFlags_ButtonRepeat = 1 << 1, + ImGuiItemFlags_Disabled = 1 << 2, + ImGuiItemFlags_NoNav = 1 << 3, + ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, + ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, + ImGuiItemFlags_MixedValue = 1 << 6, + ImGuiItemFlags_ReadOnly = 1 << 7, + ImGuiItemFlags_NoWindowHoverableCheck = 1 << 8, + ImGuiItemFlags_AllowOverlap = 1 << 9, + ImGuiItemFlags_Inputable = 1 << 10 +} + +enum ImGuiItemStatusFlags_ +{ + ImGuiItemStatusFlags_None = 0, + ImGuiItemStatusFlags_HoveredRect = 1 << 0, + ImGuiItemStatusFlags_HasDisplayRect = 1 << 1, + ImGuiItemStatusFlags_Edited = 1 << 2, + ImGuiItemStatusFlags_ToggledSelection = 1 << 3, + ImGuiItemStatusFlags_ToggledOpen = 1 << 4, + ImGuiItemStatusFlags_HasDeactivated = 1 << 5, + ImGuiItemStatusFlags_Deactivated = 1 << 6, + ImGuiItemStatusFlags_HoveredWindow = 1 << 7, + ImGuiItemStatusFlags_FocusedByTabbing = 1 << 8, + ImGuiItemStatusFlags_Visible = 1 << 9 +} + +// enum ImGuiHoveredFlagsPrivate_ +// { +// ImGuiHoveredFlags_DelayMask_ = ImGuiHoveredFlags_.ImGuiHoveredFlags_DelayNone +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_DelayShort | ImGuiHoveredFlags_ +// .ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_.ImGuiHoveredFlags_NoSharedDelay, +// ImGuiHoveredFlags_AllowedMaskForIsWindowHovered +// = ImGuiHoveredFlags_.ImGuiHoveredFlags_ChildWindows +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_RootWindow +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_.ImGuiHoveredFlags_NoPopupHierarchy | ImGuiHoveredFlags_ +// .ImGuiHoveredFlags_AllowWhenBlockedByPopup +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_AllowWhenBlockedByActiveItem +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_ForTooltip +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_Stationary, +// ImGuiHoveredFlags_AllowedMaskForIsItemHovered +// = ImGuiHoveredFlags_.ImGuiHoveredFlags_AllowWhenBlockedByPopup +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_AllowWhenBlockedByActiveItem +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_AllowWhenOverlapped +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_AllowWhenDisabled +// | ImGuiHoveredFlags_.ImGuiHoveredFlags_NoNavOverride | ImGuiHoveredFlags_ +// .ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_ +// .ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayMask_ +// } + +enum ImGuiInputTextFlagsPrivate_ +{ + ImGuiInputTextFlags_Multiline = 1 << 26, + ImGuiInputTextFlags_NoMarkEdited = 1 << 27, + ImGuiInputTextFlags_MergedItem = 1 << 28 +} + +enum ImGuiButtonFlagsPrivate_ +{ + ImGuiButtonFlags_PressedOnClick = 1 << 4, + ImGuiButtonFlags_PressedOnClickRelease = 1 << 5, + ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 6, + ImGuiButtonFlags_PressedOnRelease = 1 << 7, + ImGuiButtonFlags_PressedOnDoubleClick = 1 << 8, + ImGuiButtonFlags_PressedOnDragDropHold = 1 << 9, + ImGuiButtonFlags_Repeat = 1 << 10, + ImGuiButtonFlags_FlattenChildren = 1 << 11, + ImGuiButtonFlags_AllowOverlap = 1 << 12, + ImGuiButtonFlags_DontClosePopups = 1 << 13, + ImGuiButtonFlags_AlignTextBaseLine = 1 << 15, + ImGuiButtonFlags_NoKeyModifiers = 1 << 16, + ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, + ImGuiButtonFlags_NoNavFocus = 1 << 18, + ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, + ImGuiButtonFlags_NoSetKeyOwner = 1 << 20, + ImGuiButtonFlags_NoTestKeyOwner = 1 << 21, + ImGuiButtonFlags_PressedOnMask_ + = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease + | ImGuiButtonFlags_PressedOnClickReleaseAnywhere + | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick + | ImGuiButtonFlags_PressedOnDragDropHold, + ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease +} + +enum ImGuiComboFlagsPrivate_ +{ + ImGuiComboFlags_CustomPreview = 1 << 20 +} + +enum ImGuiSliderFlagsPrivate_ +{ + ImGuiSliderFlags_Vertical = 1 << 20, + ImGuiSliderFlags_ReadOnly = 1 << 21 +} + +enum ImGuiSelectableFlagsPrivate_ +{ + ImGuiSelectableFlags_NoHoldingActiveID = 1 << 20, + ImGuiSelectableFlags_SelectOnNav = 1 << 21, + ImGuiSelectableFlags_SelectOnClick = 1 << 22, + ImGuiSelectableFlags_SelectOnRelease = 1 << 23, + ImGuiSelectableFlags_SpanAvailWidth = 1 << 24, + ImGuiSelectableFlags_SetNavIdOnHover = 1 << 25, + ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 26, + ImGuiSelectableFlags_NoSetKeyOwner = 1 << 27 +} + +enum ImGuiTreeNodeFlagsPrivate_ +{ + ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20, + ImGuiTreeNodeFlags_UpsideDownArrow = 1 << 21 +} + +enum ImGuiSeparatorFlags_ +{ + ImGuiSeparatorFlags_None = 0, + ImGuiSeparatorFlags_Horizontal = 1 << 0, + ImGuiSeparatorFlags_Vertical = 1 << 1, + ImGuiSeparatorFlags_SpanAllColumns = 1 << 2 +} + +enum ImGuiFocusRequestFlags_ +{ + ImGuiFocusRequestFlags_None = 0, + ImGuiFocusRequestFlags_RestoreFocusedChild = 1 << 0, + ImGuiFocusRequestFlags_UnlessBelowModal = 1 << 1 +} + +enum ImGuiTextFlags_ +{ + ImGuiTextFlags_None = 0, + ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0 +} + +enum ImGuiTooltipFlags_ +{ + ImGuiTooltipFlags_None = 0, + ImGuiTooltipFlags_OverridePrevious = 1 << 1 +} + +enum ImGuiLayoutType_ +{ + ImGuiLayoutType_Horizontal = 0, + ImGuiLayoutType_Vertical = 1 +} + +enum ImGuiLogType +{ + ImGuiLogType_None = 0, + ImGuiLogType_TTY = 1, + ImGuiLogType_File = 2, + ImGuiLogType_Buffer = 3, + ImGuiLogType_Clipboard = 4 +} + +enum ImGuiAxis +{ + ImGuiAxis_None = -1, + ImGuiAxis_X = 0, + ImGuiAxis_Y = 1 +} + +enum ImGuiPlotType +{ + ImGuiPlotType_Lines = 0, + ImGuiPlotType_Histogram = 1 +} + +enum ImGuiPopupPositionPolicy +{ + ImGuiPopupPositionPolicy_Default = 0, + ImGuiPopupPositionPolicy_ComboBox = 1, + ImGuiPopupPositionPolicy_Tooltip = 2 +} + +struct ImGuiDataVarInfo +{ + ImGuiDataType Type; + ImU32 Count; + ImU32 Offset; +} + +struct ImGuiDataTypeTempStorage +{ + ImU8[8] Data; +} + +struct ImGuiDataTypeInfo +{ + size_t Size; + const(char)* Name; + const(char)* PrintFmt; + const(char)* ScanFmt; +} + +enum ImGuiDataTypePrivate_ +{ + ImGuiDataType_String = ImGuiDataType_.ImGuiDataType_COUNT + 1, + ImGuiDataType_Pointer = 12, + ImGuiDataType_ID = 13 +} + +struct ImGuiColorMod +{ + ImGuiCol Col; + ImVec4 BackupValue; +} + +struct ImGuiStyleMod +{ + ImGuiStyleVar VarIdx; +} + +struct ImGuiComboPreviewData +{ + ImRect PreviewRect; + ImVec2 BackupCursorPos; + ImVec2 BackupCursorMaxPos; + ImVec2 BackupCursorPosPrevLine; + float BackupPrevLineTextBaseOffset; + ImGuiLayoutType BackupLayout; +} + +struct ImGuiGroupData +{ + ImGuiID WindowID; + ImVec2 BackupCursorPos; + ImVec2 BackupCursorMaxPos; + ImVec1 BackupIndent; + ImVec1 BackupGroupOffset; + ImVec2 BackupCurrLineSize; + float BackupCurrLineTextBaseOffset; + ImGuiID BackupActiveIdIsAlive; + bool BackupActiveIdPreviousFrameIsAlive; + bool BackupHoveredIdIsAlive; + bool EmitItem; +} + +struct ImGuiMenuColumns +{ + ImU32 TotalWidth; + ImU32 NextTotalWidth; + ImU16 Spacing; + ImU16 OffsetIcon; + ImU16 OffsetLabel; + ImU16 OffsetShortcut; + ImU16 OffsetMark; + ImU16[4] Widths; +} + +struct ImGuiInputTextDeactivatedState +{ + ImGuiID ID; + ImVector_char TextA; +} + +struct ImGuiInputTextState +{ + ImGuiContext* Ctx; + ImGuiID ID; + int CurLenW; + int CurLenA; + ImVector_ImWchar TextW; + ImVector_char TextA; + ImVector_char InitialTextA; + bool TextAIsValid; + int BufCapacityA; + float ScrollX; + STB_TexteditState Stb; + float CursorAnim; + bool CursorFollow; + bool SelectedAllMouseLock; + bool Edited; + ImGuiInputTextFlags Flags; +} + +struct ImGuiPopupData +{ + ImGuiID PopupId; + ImGuiWindow* Window; + ImGuiWindow* BackupNavWindow; + int ParentNavLayer; + int OpenFrameCount; + ImGuiID OpenParentId; + ImVec2 OpenPopupPos; + ImVec2 OpenMousePos; +} + +enum ImGuiNextWindowDataFlags_ +{ + ImGuiNextWindowDataFlags_None = 0, + ImGuiNextWindowDataFlags_HasPos = 1 << 0, + ImGuiNextWindowDataFlags_HasSize = 1 << 1, + ImGuiNextWindowDataFlags_HasContentSize = 1 << 2, + ImGuiNextWindowDataFlags_HasCollapsed = 1 << 3, + ImGuiNextWindowDataFlags_HasSizeConstraint = 1 << 4, + ImGuiNextWindowDataFlags_HasFocus = 1 << 5, + ImGuiNextWindowDataFlags_HasBgAlpha = 1 << 6, + ImGuiNextWindowDataFlags_HasScroll = 1 << 7 +} + +struct ImGuiNextWindowData +{ + ImGuiNextWindowDataFlags Flags; + ImGuiCond PosCond; + ImGuiCond SizeCond; + ImGuiCond CollapsedCond; + ImVec2 PosVal; + ImVec2 PosPivotVal; + ImVec2 SizeVal; + ImVec2 ContentSizeVal; + ImVec2 ScrollVal; + bool CollapsedVal; + ImRect SizeConstraintRect; + ImGuiSizeCallback SizeCallback; + void* SizeCallbackUserData; + float BgAlphaVal; + ImVec2 MenuBarOffsetMinVal; +} + +enum ImGuiNextItemDataFlags_ +{ + ImGuiNextItemDataFlags_None = 0, + ImGuiNextItemDataFlags_HasWidth = 1 << 0, + ImGuiNextItemDataFlags_HasOpen = 1 << 1 +} + +struct ImGuiNextItemData +{ + ImGuiNextItemDataFlags Flags; + ImGuiItemFlags ItemFlags; + float Width; + ImGuiID FocusScopeId; + ImGuiCond OpenCond; + bool OpenVal; +} + +struct ImGuiLastItemData +{ + ImGuiID ID; + ImGuiItemFlags InFlags; + ImGuiItemStatusFlags StatusFlags; + ImRect Rect; + ImRect NavRect; + ImRect DisplayRect; +} + +struct ImGuiNavTreeNodeData +{ + ImGuiID ID; + ImGuiItemFlags InFlags; + ImRect NavRect; +} + +struct ImGuiStackSizes +{ + short SizeOfIDStack; + short SizeOfColorStack; + short SizeOfStyleVarStack; + short SizeOfFontStack; + short SizeOfFocusScopeStack; + short SizeOfGroupStack; + short SizeOfItemFlagsStack; + short SizeOfBeginPopupStack; + short SizeOfDisabledStack; +} + +struct ImGuiWindowStackData +{ + ImGuiWindow* Window; + ImGuiLastItemData ParentLastItemDataBackup; + ImGuiStackSizes StackSizesOnBegin; +} + +struct ImGuiShrinkWidthItem +{ + int Index; + float Width; + float InitialWidth; +} + +struct ImGuiPtrOrIndex +{ + void* Ptr; + int Index; +} + +struct ImBitArray_ImGuiKey_NamedKey_COUNT__lessImGuiKey_NamedKey_BEGIN +{ + ImU32[5] Storage; +} + +alias ImBitArrayForNamedKeys = ImBitArray_ImGuiKey_NamedKey_COUNT__lessImGuiKey_NamedKey_BEGIN; + +enum ImGuiInputEventType +{ + ImGuiInputEventType_None = 0, + ImGuiInputEventType_MousePos = 1, + ImGuiInputEventType_MouseWheel = 2, + ImGuiInputEventType_MouseButton = 3, + ImGuiInputEventType_Key = 4, + ImGuiInputEventType_Text = 5, + ImGuiInputEventType_Focus = 6, + ImGuiInputEventType_COUNT = 7 +} + +enum ImGuiInputSource +{ + ImGuiInputSource_None = 0, + ImGuiInputSource_Mouse = 1, + ImGuiInputSource_Keyboard = 2, + ImGuiInputSource_Gamepad = 3, + ImGuiInputSource_Clipboard = 4, + ImGuiInputSource_COUNT = 5 +} + +struct ImGuiInputEventMousePos +{ + float PosX; + float PosY; + ImGuiMouseSource MouseSource; +} + +struct ImGuiInputEventMouseWheel +{ + float WheelX; + float WheelY; + ImGuiMouseSource MouseSource; +} + +struct ImGuiInputEventMouseButton +{ + int Button; + bool Down; + ImGuiMouseSource MouseSource; +} + +struct ImGuiInputEventKey +{ + ImGuiKey Key; + bool Down; + float AnalogValue; +} + +struct ImGuiInputEventText +{ + uint Char; +} + +struct ImGuiInputEventAppFocused +{ + bool Focused; +} + +struct ImGuiInputEvent +{ + ImGuiInputEventType Type; + ImGuiInputSource Source; + ImU32 EventId; + + bool AddedByTestEngine; +} + +alias ImGuiKeyRoutingIndex = short; + +struct ImGuiKeyRoutingData +{ + ImGuiKeyRoutingIndex NextEntryIndex; + ImU16 Mods; + ImU8 RoutingNextScore; + ImGuiID RoutingCurr; + ImGuiID RoutingNext; +} + +struct ImVector_ImGuiKeyRoutingData +{ + int Size; + int Capacity; + ImGuiKeyRoutingData* Data; +} + +struct ImGuiKeyRoutingTable +{ + ImGuiKeyRoutingIndex[ImGuiKey.ImGuiKey_NamedKey_COUNT] Index; + ImVector_ImGuiKeyRoutingData Entries; + ImVector_ImGuiKeyRoutingData EntriesNext; +} + +struct ImGuiKeyOwnerData +{ + ImGuiID OwnerCurr; + ImGuiID OwnerNext; + bool LockThisFrame; + bool LockUntilRelease; +} + +enum ImGuiInputFlags_ +{ + ImGuiInputFlags_None = 0, + ImGuiInputFlags_Repeat = 1 << 0, + ImGuiInputFlags_RepeatRateDefault = 1 << 1, + ImGuiInputFlags_RepeatRateNavMove = 1 << 2, + ImGuiInputFlags_RepeatRateNavTweak = 1 << 3, + ImGuiInputFlags_RepeatRateMask_ = ImGuiInputFlags_RepeatRateDefault + | ImGuiInputFlags_RepeatRateNavMove | ImGuiInputFlags_RepeatRateNavTweak, + ImGuiInputFlags_CondHovered = 1 << 4, + ImGuiInputFlags_CondActive = 1 << 5, + ImGuiInputFlags_CondDefault_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive, + ImGuiInputFlags_CondMask_ = ImGuiInputFlags_CondHovered | ImGuiInputFlags_CondActive, + ImGuiInputFlags_LockThisFrame = 1 << 6, + ImGuiInputFlags_LockUntilRelease = 1 << 7, + ImGuiInputFlags_RouteFocused = 1 << 8, + ImGuiInputFlags_RouteGlobalLow = 1 << 9, + ImGuiInputFlags_RouteGlobal = 1 << 10, + ImGuiInputFlags_RouteGlobalHigh = 1 << 11, + ImGuiInputFlags_RouteMask_ = ImGuiInputFlags_RouteFocused + | ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteGlobalLow | ImGuiInputFlags_RouteGlobalHigh, + ImGuiInputFlags_RouteAlways = 1 << 12, + ImGuiInputFlags_RouteUnlessBgFocused = 1 << 13, + ImGuiInputFlags_RouteExtraMask_ + = ImGuiInputFlags_RouteAlways | ImGuiInputFlags_RouteUnlessBgFocused, + ImGuiInputFlags_SupportedByIsKeyPressed = ImGuiInputFlags_Repeat | ImGuiInputFlags_RepeatRateMask_, + ImGuiInputFlags_SupportedByShortcut = ImGuiInputFlags_Repeat + | ImGuiInputFlags_RepeatRateMask_ | ImGuiInputFlags_RouteMask_ | ImGuiInputFlags_RouteExtraMask_, + ImGuiInputFlags_SupportedBySetKeyOwner = ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease, + ImGuiInputFlags_SupportedBySetItemKeyOwner = ImGuiInputFlags_SupportedBySetKeyOwner + | ImGuiInputFlags_CondMask_ +} + +struct ImGuiListClipperRange +{ + int Min; + int Max; + bool PosToIndexConvert; + ImS8 PosToIndexOffsetMin; + ImS8 PosToIndexOffsetMax; +} + +struct ImVector_ImGuiListClipperRange +{ + int Size; + int Capacity; + ImGuiListClipperRange* Data; +} + +struct ImGuiListClipperData +{ + ImGuiListClipper* ListClipper; + float LossynessOffset; + int StepNo; + int ItemsFrozen; + ImVector_ImGuiListClipperRange Ranges; +} + +enum ImGuiActivateFlags_ +{ + ImGuiActivateFlags_None = 0, + ImGuiActivateFlags_PreferInput = 1 << 0, + ImGuiActivateFlags_PreferTweak = 1 << 1, + ImGuiActivateFlags_TryToPreserveState = 1 << 2 +} + +enum ImGuiScrollFlags_ +{ + ImGuiScrollFlags_None = 0, + ImGuiScrollFlags_KeepVisibleEdgeX = 1 << 0, + ImGuiScrollFlags_KeepVisibleEdgeY = 1 << 1, + ImGuiScrollFlags_KeepVisibleCenterX = 1 << 2, + ImGuiScrollFlags_KeepVisibleCenterY = 1 << 3, + ImGuiScrollFlags_AlwaysCenterX = 1 << 4, + ImGuiScrollFlags_AlwaysCenterY = 1 << 5, + ImGuiScrollFlags_NoScrollParent = 1 << 6, + ImGuiScrollFlags_MaskX_ = ImGuiScrollFlags_KeepVisibleEdgeX + | ImGuiScrollFlags_KeepVisibleCenterX | ImGuiScrollFlags_AlwaysCenterX, + ImGuiScrollFlags_MaskY_ = ImGuiScrollFlags_KeepVisibleEdgeY + | ImGuiScrollFlags_KeepVisibleCenterY | ImGuiScrollFlags_AlwaysCenterY +} + +enum ImGuiNavHighlightFlags_ +{ + ImGuiNavHighlightFlags_None = 0, + ImGuiNavHighlightFlags_TypeDefault = 1 << 0, + ImGuiNavHighlightFlags_TypeThin = 1 << 1, + ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, + ImGuiNavHighlightFlags_NoRounding = 1 << 3 +} + +enum ImGuiNavMoveFlags_ +{ + ImGuiNavMoveFlags_None = 0, + ImGuiNavMoveFlags_LoopX = 1 << 0, + ImGuiNavMoveFlags_LoopY = 1 << 1, + ImGuiNavMoveFlags_WrapX = 1 << 2, + ImGuiNavMoveFlags_WrapY = 1 << 3, + ImGuiNavMoveFlags_WrapMask_ = ImGuiNavMoveFlags_LoopX + | ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_WrapY, + ImGuiNavMoveFlags_AllowCurrentNavId = 1 << 4, + ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, + ImGuiNavMoveFlags_ScrollToEdgeY = 1 << 6, + ImGuiNavMoveFlags_Forwarded = 1 << 7, + ImGuiNavMoveFlags_DebugNoResult = 1 << 8, + ImGuiNavMoveFlags_FocusApi = 1 << 9, + ImGuiNavMoveFlags_IsTabbing = 1 << 10, + ImGuiNavMoveFlags_IsPageMove = 1 << 11, + ImGuiNavMoveFlags_Activate = 1 << 12, + ImGuiNavMoveFlags_NoSelect = 1 << 13, + ImGuiNavMoveFlags_NoSetNavHighlight = 1 << 14 +} + +enum ImGuiNavLayer +{ + ImGuiNavLayer_Main = 0, + ImGuiNavLayer_Menu = 1, + ImGuiNavLayer_COUNT = 2 +} + +struct ImGuiNavItemData +{ + ImGuiWindow* Window; + ImGuiID ID; + ImGuiID FocusScopeId; + ImRect RectRel; + ImGuiItemFlags InFlags; + float DistBox; + float DistCenter; + float DistAxial; +} + +enum ImGuiOldColumnFlags_ +{ + ImGuiOldColumnFlags_None = 0, + ImGuiOldColumnFlags_NoBorder = 1 << 0, + ImGuiOldColumnFlags_NoResize = 1 << 1, + ImGuiOldColumnFlags_NoPreserveWidths = 1 << 2, + ImGuiOldColumnFlags_NoForceWithinWindow = 1 << 3, + ImGuiOldColumnFlags_GrowParentContentsSize = 1 << 4 +} + +struct ImGuiOldColumnData +{ + float OffsetNorm; + float OffsetNormBeforeResize; + ImGuiOldColumnFlags Flags; + ImRect ClipRect; +} + +struct ImVector_ImGuiOldColumnData +{ + int Size; + int Capacity; + ImGuiOldColumnData* Data; +} + +struct ImGuiOldColumns +{ + ImGuiID ID; + ImGuiOldColumnFlags Flags; + bool IsFirstFrame; + bool IsBeingResized; + int Current; + int Count; + float OffMinX; + float OffMaxX; + float LineMinY; + float LineMaxY; + float HostCursorPosY; + float HostCursorMaxPosX; + ImRect HostInitialClipRect; + ImRect HostBackupClipRect; + ImRect HostBackupParentWorkRect; + ImVector_ImGuiOldColumnData Columns; + ImDrawListSplitter Splitter; +} + +struct ImGuiViewportP +{ + ImGuiViewport _ImGuiViewport; + int[2] BgFgDrawListsLastFrame; + ImDrawList*[2] BgFgDrawLists; + ImDrawData DrawDataP; + ImDrawDataBuilder DrawDataBuilder; + ImVec2 WorkOffsetMin; + ImVec2 WorkOffsetMax; + ImVec2 BuildWorkOffsetMin; + ImVec2 BuildWorkOffsetMax; +} + +struct ImGuiWindowSettings +{ + ImGuiID ID; + ImVec2ih Pos; + ImVec2ih Size; + bool Collapsed; + bool WantApply; + bool WantDelete; +} + +struct ImGuiSettingsHandler +{ + const(char)* TypeName; + ImGuiID TypeHash; + void function(ImGuiContext* ctx, ImGuiSettingsHandler* handler) ClearAllFn; + void function(ImGuiContext* ctx, ImGuiSettingsHandler* handler) ReadInitFn; + void* function(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const(char)* name) ReadOpenFn; + void function(ImGuiContext* ctx, ImGuiSettingsHandler* handler, + void* entry, const(char)* line) ReadLineFn; + void function(ImGuiContext* ctx, ImGuiSettingsHandler* handler) ApplyAllFn; + void function(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf) WriteAllFn; + void* UserData; +} + +enum ImGuiLocKey +{ + ImGuiLocKey_VersionStr = 0, + ImGuiLocKey_TableSizeOne = 1, + ImGuiLocKey_TableSizeAllFit = 2, + ImGuiLocKey_TableSizeAllDefault = 3, + ImGuiLocKey_TableResetOrder = 4, + ImGuiLocKey_WindowingMainMenuBar = 5, + ImGuiLocKey_WindowingPopup = 6, + ImGuiLocKey_WindowingUntitled = 7, + ImGuiLocKey_COUNT = 8 +} + +struct ImGuiLocEntry +{ + ImGuiLocKey Key; + const(char)* Text; +} + +enum ImGuiDebugLogFlags_ +{ + ImGuiDebugLogFlags_None = 0, + ImGuiDebugLogFlags_EventActiveId = 1 << 0, + ImGuiDebugLogFlags_EventFocus = 1 << 1, + ImGuiDebugLogFlags_EventPopup = 1 << 2, + ImGuiDebugLogFlags_EventNav = 1 << 3, + ImGuiDebugLogFlags_EventClipper = 1 << 4, + ImGuiDebugLogFlags_EventSelection = 1 << 5, + ImGuiDebugLogFlags_EventIO = 1 << 6, + ImGuiDebugLogFlags_EventMask_ = ImGuiDebugLogFlags_EventActiveId + | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav + | ImGuiDebugLogFlags_EventClipper | ImGuiDebugLogFlags_EventSelection + | ImGuiDebugLogFlags_EventIO, ImGuiDebugLogFlags_OutputToTTY = 1 << 10 +} + +struct ImGuiMetricsConfig +{ + bool ShowDebugLog; + bool ShowStackTool; + bool ShowWindowsRects; + bool ShowWindowsBeginOrder; + bool ShowTablesRects; + bool ShowDrawCmdMesh; + bool ShowDrawCmdBoundingBoxes; + bool ShowAtlasTintedWithTextColor; + int ShowWindowsRectsType; + int ShowTablesRectsType; +} + +struct ImGuiStackLevelInfo +{ + import std.bitmanip : bitfields; + + ImGuiID ID; + ImS8 QueryFrameCount; + bool QuerySuccess; + mixin(bitfields!(ImGuiDataType, "DataType", 8)); + + char[57] Desc; +} + +struct ImVector_ImGuiStackLevelInfo +{ + int Size; + int Capacity; + ImGuiStackLevelInfo* Data; +} + +struct ImGuiStackTool +{ + int LastActiveFrame; + int StackLevel; + ImGuiID QueryId; + ImVector_ImGuiStackLevelInfo Results; + bool CopyToClipboardOnCtrlC; + float CopyToClipboardLastTime; +} + +alias ImGuiContextHookCallback = void function(ImGuiContext* ctx, ImGuiContextHook* hook); + +enum ImGuiContextHookType +{ + ImGuiContextHookType_NewFramePre = 0, + ImGuiContextHookType_NewFramePost = 1, + ImGuiContextHookType_EndFramePre = 2, + ImGuiContextHookType_EndFramePost = 3, + ImGuiContextHookType_RenderPre = 4, + ImGuiContextHookType_RenderPost = 5, + ImGuiContextHookType_Shutdown = 6, + ImGuiContextHookType_PendingRemoval_ = 7 +} + +struct ImGuiContextHook +{ + ImGuiID HookId; + ImGuiContextHookType Type; + ImGuiID Owner; + ImGuiContextHookCallback Callback; + void* UserData; +} + +struct ImVector_ImGuiInputEvent +{ + int Size; + int Capacity; + ImGuiInputEvent* Data; +} + +struct ImVector_ImGuiWindowPtr +{ + int Size; + int Capacity; + ImGuiWindow** Data; +} + +struct ImVector_ImGuiWindowStackData +{ + int Size; + int Capacity; + ImGuiWindowStackData* Data; +} + +struct ImVector_ImGuiColorMod +{ + int Size; + int Capacity; + ImGuiColorMod* Data; +} + +struct ImVector_ImGuiStyleMod +{ + int Size; + int Capacity; + ImGuiStyleMod* Data; +} + +struct ImVector_ImGuiID +{ + int Size; + int Capacity; + ImGuiID* Data; +} + +struct ImVector_ImGuiItemFlags +{ + int Size; + int Capacity; + ImGuiItemFlags* Data; +} + +struct ImVector_ImGuiGroupData +{ + int Size; + int Capacity; + ImGuiGroupData* Data; +} + +struct ImVector_ImGuiPopupData +{ + int Size; + int Capacity; + ImGuiPopupData* Data; +} + +struct ImVector_ImGuiNavTreeNodeData +{ + int Size; + int Capacity; + ImGuiNavTreeNodeData* Data; +} + +struct ImVector_ImGuiViewportPPtr +{ + int Size; + int Capacity; + ImGuiViewportP** Data; +} + +struct ImVector_unsigned_char +{ + int Size; + int Capacity; + ubyte* Data; +} + +struct ImVector_ImGuiListClipperData +{ + int Size; + int Capacity; + ImGuiListClipperData* Data; +} + +struct ImVector_ImGuiTableTempData +{ + int Size; + int Capacity; + ImGuiTableTempData* Data; +} + +struct ImVector_ImGuiTable +{ + int Size; + int Capacity; + ImGuiTable* Data; +} + +struct ImPool_ImGuiTable +{ + ImVector_ImGuiTable Buf; + ImGuiStorage Map; + ImPoolIdx FreeIdx; + ImPoolIdx AliveCount; +} + +struct ImVector_ImGuiTabBar +{ + int Size; + int Capacity; + ImGuiTabBar* Data; +} + +struct ImPool_ImGuiTabBar +{ + ImVector_ImGuiTabBar Buf; + ImGuiStorage Map; + ImPoolIdx FreeIdx; + ImPoolIdx AliveCount; +} + +struct ImVector_ImGuiPtrOrIndex +{ + int Size; + int Capacity; + ImGuiPtrOrIndex* Data; +} + +struct ImVector_ImGuiShrinkWidthItem +{ + int Size; + int Capacity; + ImGuiShrinkWidthItem* Data; +} + +struct ImVector_ImGuiSettingsHandler +{ + int Size; + int Capacity; + ImGuiSettingsHandler* Data; +} + +struct ImChunkStream_ImGuiWindowSettings +{ + ImVector_char Buf; +} + +struct ImChunkStream_ImGuiTableSettings +{ + ImVector_char Buf; +} + +struct ImVector_ImGuiContextHook +{ + int Size; + int Capacity; + ImGuiContextHook* Data; +} + +struct ImGuiContext +{ + bool Initialized; + bool FontAtlasOwnedByContext; + ImGuiIO IO; + ImGuiStyle Style; + ImFont* Font; + float FontSize; + float FontBaseSize; + ImDrawListSharedData DrawListSharedData; + double Time; + int FrameCount; + int FrameCountEnded; + int FrameCountRendered; + bool WithinFrameScope; + bool WithinFrameScopeWithImplicitWindow; + bool WithinEndChild; + bool GcCompactAll; + bool TestEngineHookItems; + void* TestEngine; + ImVector_ImGuiInputEvent InputEventsQueue; + ImVector_ImGuiInputEvent InputEventsTrail; + ImGuiMouseSource InputEventsNextMouseSource; + ImU32 InputEventsNextEventId; + ImVector_ImGuiWindowPtr Windows; + ImVector_ImGuiWindowPtr WindowsFocusOrder; + ImVector_ImGuiWindowPtr WindowsTempSortBuffer; + ImVector_ImGuiWindowStackData CurrentWindowStack; + ImGuiStorage WindowsById; + int WindowsActiveCount; + ImVec2 WindowsHoverPadding; + ImGuiWindow* CurrentWindow; + ImGuiWindow* HoveredWindow; + ImGuiWindow* HoveredWindowUnderMovingWindow; + ImGuiWindow* MovingWindow; + ImGuiWindow* WheelingWindow; + ImVec2 WheelingWindowRefMousePos; + int WheelingWindowStartFrame; + float WheelingWindowReleaseTimer; + ImVec2 WheelingWindowWheelRemainder; + ImVec2 WheelingAxisAvg; + ImGuiID DebugHookIdInfo; + ImGuiID HoveredId; + ImGuiID HoveredIdPreviousFrame; + bool HoveredIdAllowOverlap; + bool HoveredIdDisabled; + float HoveredIdTimer; + float HoveredIdNotActiveTimer; + ImGuiID ActiveId; + ImGuiID ActiveIdIsAlive; + float ActiveIdTimer; + bool ActiveIdIsJustActivated; + bool ActiveIdAllowOverlap; + bool ActiveIdNoClearOnFocusLoss; + bool ActiveIdHasBeenPressedBefore; + bool ActiveIdHasBeenEditedBefore; + bool ActiveIdHasBeenEditedThisFrame; + ImVec2 ActiveIdClickOffset; + ImGuiWindow* ActiveIdWindow; + ImGuiInputSource ActiveIdSource; + int ActiveIdMouseButton; + ImGuiID ActiveIdPreviousFrame; + bool ActiveIdPreviousFrameIsAlive; + bool ActiveIdPreviousFrameHasBeenEditedBefore; + ImGuiWindow* ActiveIdPreviousFrameWindow; + ImGuiID LastActiveId; + float LastActiveIdTimer; + ImGuiKeyOwnerData[ImGuiKey.ImGuiKey_NamedKey_COUNT] KeysOwnerData; + ImGuiKeyRoutingTable KeysRoutingTable; + ImU32 ActiveIdUsingNavDirMask; + bool ActiveIdUsingAllKeyboardKeys; + ImU32 ActiveIdUsingNavInputMask; + ImGuiID CurrentFocusScopeId; + ImGuiItemFlags CurrentItemFlags; + ImGuiID DebugLocateId; + ImGuiNextItemData NextItemData; + ImGuiLastItemData LastItemData; + ImGuiNextWindowData NextWindowData; + ImVector_ImGuiColorMod ColorStack; + ImVector_ImGuiStyleMod StyleVarStack; + ImVector_ImFontPtr FontStack; + ImVector_ImGuiID FocusScopeStack; + ImVector_ImGuiItemFlags ItemFlagsStack; + ImVector_ImGuiGroupData GroupStack; + ImVector_ImGuiPopupData OpenPopupStack; + ImVector_ImGuiPopupData BeginPopupStack; + ImVector_ImGuiNavTreeNodeData NavTreeNodeStack; + int BeginMenuCount; + ImVector_ImGuiViewportPPtr Viewports; + ImGuiWindow* NavWindow; + ImGuiID NavId; + ImGuiID NavFocusScopeId; + ImGuiID NavActivateId; + ImGuiID NavActivateDownId; + ImGuiID NavActivatePressedId; + ImGuiActivateFlags NavActivateFlags; + ImGuiID NavJustMovedToId; + ImGuiID NavJustMovedToFocusScopeId; + ImGuiKeyChord NavJustMovedToKeyMods; + ImGuiID NavNextActivateId; + ImGuiActivateFlags NavNextActivateFlags; + ImGuiInputSource NavInputSource; + ImGuiNavLayer NavLayer; + bool NavIdIsAlive; + bool NavMousePosDirty; + bool NavDisableHighlight; + bool NavDisableMouseHover; + bool NavAnyRequest; + bool NavInitRequest; + bool NavInitRequestFromMove; + ImGuiNavItemData NavInitResult; + bool NavMoveSubmitted; + bool NavMoveScoringItems; + bool NavMoveForwardToNextFrame; + ImGuiNavMoveFlags NavMoveFlags; + ImGuiScrollFlags NavMoveScrollFlags; + ImGuiKeyChord NavMoveKeyMods; + ImGuiDir NavMoveDir; + ImGuiDir NavMoveDirForDebug; + ImGuiDir NavMoveClipDir; + ImRect NavScoringRect; + ImRect NavScoringNoClipRect; + int NavScoringDebugCount; + int NavTabbingDir; + int NavTabbingCounter; + ImGuiNavItemData NavMoveResultLocal; + ImGuiNavItemData NavMoveResultLocalVisible; + ImGuiNavItemData NavMoveResultOther; + ImGuiNavItemData NavTabbingResultFirst; + ImGuiKeyChord ConfigNavWindowingKeyNext; + ImGuiKeyChord ConfigNavWindowingKeyPrev; + ImGuiWindow* NavWindowingTarget; + ImGuiWindow* NavWindowingTargetAnim; + ImGuiWindow* NavWindowingListWindow; + float NavWindowingTimer; + float NavWindowingHighlightAlpha; + bool NavWindowingToggleLayer; + ImVec2 NavWindowingAccumDeltaPos; + ImVec2 NavWindowingAccumDeltaSize; + float DimBgRatio; + bool DragDropActive; + bool DragDropWithinSource; + bool DragDropWithinTarget; + ImGuiDragDropFlags DragDropSourceFlags; + int DragDropSourceFrameCount; + int DragDropMouseButton; + ImGuiPayload DragDropPayload; + ImRect DragDropTargetRect; + ImGuiID DragDropTargetId; + ImGuiDragDropFlags DragDropAcceptFlags; + float DragDropAcceptIdCurrRectSurface; + ImGuiID DragDropAcceptIdCurr; + ImGuiID DragDropAcceptIdPrev; + int DragDropAcceptFrameCount; + ImGuiID DragDropHoldJustPressedId; + ImVector_unsigned_char DragDropPayloadBufHeap; + ubyte[16] DragDropPayloadBufLocal; + int ClipperTempDataStacked; + ImVector_ImGuiListClipperData ClipperTempData; + ImGuiTable* CurrentTable; + int TablesTempDataStacked; + ImVector_ImGuiTableTempData TablesTempData; + ImPool_ImGuiTable Tables; + ImVector_float TablesLastTimeActive; + ImVector_ImDrawChannel DrawChannelsTempMergeBuffer; + ImGuiTabBar* CurrentTabBar; + ImPool_ImGuiTabBar TabBars; + ImVector_ImGuiPtrOrIndex CurrentTabBarStack; + ImVector_ImGuiShrinkWidthItem ShrinkWidthBuffer; + ImGuiID HoverItemDelayId; + ImGuiID HoverItemDelayIdPreviousFrame; + float HoverItemDelayTimer; + float HoverItemDelayClearTimer; + ImGuiID HoverItemUnlockedStationaryId; + ImGuiID HoverWindowUnlockedStationaryId; + ImGuiMouseCursor MouseCursor; + float MouseStationaryTimer; + ImVec2 MouseLastValidPos; + ImGuiInputTextState InputTextState; + ImGuiInputTextDeactivatedState InputTextDeactivatedState; + ImFont InputTextPasswordFont; + ImGuiID TempInputId; + ImGuiColorEditFlags ColorEditOptions; + ImGuiID ColorEditCurrentID; + ImGuiID ColorEditSavedID; + float ColorEditSavedHue; + float ColorEditSavedSat; + ImU32 ColorEditSavedColor; + ImVec4 ColorPickerRef; + ImGuiComboPreviewData ComboPreviewData; + float SliderGrabClickOffset; + float SliderCurrentAccum; + bool SliderCurrentAccumDirty; + bool DragCurrentAccumDirty; + float DragCurrentAccum; + float DragSpeedDefaultRatio; + float ScrollbarClickDeltaToGrabCenter; + float DisabledAlphaBackup; + short DisabledStackSize; + short LockMarkEdited; + short TooltipOverrideCount; + ImVector_char ClipboardHandlerData; + ImVector_ImGuiID MenusIdSubmittedThisFrame; + ImGuiPlatformImeData PlatformImeData; + ImGuiPlatformImeData PlatformImeDataPrev; + bool SettingsLoaded; + float SettingsDirtyTimer; + ImGuiTextBuffer SettingsIniData; + ImVector_ImGuiSettingsHandler SettingsHandlers; + ImChunkStream_ImGuiWindowSettings SettingsWindows; + ImChunkStream_ImGuiTableSettings SettingsTables; + ImVector_ImGuiContextHook Hooks; + ImGuiID HookIdNext; + const(char)*[ImGuiLocKey.ImGuiLocKey_COUNT] LocalizationTable; + bool LogEnabled; + ImGuiLogType LogType; + ImFileHandle LogFile; + ImGuiTextBuffer LogBuffer; + const(char)* LogNextPrefix; + const(char)* LogNextSuffix; + float LogLinePosY; + bool LogLineFirstItem; + int LogDepthRef; + int LogDepthToExpand; + int LogDepthToExpandDefault; + ImGuiDebugLogFlags DebugLogFlags; + ImGuiTextBuffer DebugLogBuf; + ImGuiTextIndex DebugLogIndex; + ImU8 DebugLogClipperAutoDisableFrames; + ImU8 DebugLocateFrames; + ImS8 DebugBeginReturnValueCullDepth; + bool DebugItemPickerActive; + ImU8 DebugItemPickerMouseButton; + ImGuiID DebugItemPickerBreakId; + ImGuiMetricsConfig DebugMetricsConfig; + ImGuiStackTool DebugStackTool; + float[60] FramerateSecPerFrame; + int FramerateSecPerFrameIdx; + int FramerateSecPerFrameCount; + float FramerateSecPerFrameAccum; + int WantCaptureMouseNextFrame; + int WantCaptureKeyboardNextFrame; + int WantTextInputNextFrame; + ImVector_char TempBuffer; +} + +struct ImGuiWindowTempData +{ + ImVec2 CursorPos; + ImVec2 CursorPosPrevLine; + ImVec2 CursorStartPos; + ImVec2 CursorMaxPos; + ImVec2 IdealMaxPos; + ImVec2 CurrLineSize; + ImVec2 PrevLineSize; + float CurrLineTextBaseOffset; + float PrevLineTextBaseOffset; + bool IsSameLine; + bool IsSetPos; + ImVec1 Indent; + ImVec1 ColumnsOffset; + ImVec1 GroupOffset; + ImVec2 CursorStartPosLossyness; + ImGuiNavLayer NavLayerCurrent; + short NavLayersActiveMask; + short NavLayersActiveMaskNext; + bool NavIsScrollPushableX; + bool NavHideHighlightOneFrame; + bool NavWindowHasScrollY; + bool MenuBarAppending; + ImVec2 MenuBarOffset; + ImGuiMenuColumns MenuColumns; + int TreeDepth; + ImU32 TreeJumpToParentOnPopMask; + ImVector_ImGuiWindowPtr ChildWindows; + ImGuiStorage* StateStorage; + ImGuiOldColumns* CurrentColumns; + int CurrentTableIdx; + ImGuiLayoutType LayoutType; + ImGuiLayoutType ParentLayoutType; + float ItemWidth; + float TextWrapPos; + ImVector_float ItemWidthStack; + ImVector_float TextWrapPosStack; +} + +struct ImVector_ImGuiOldColumns +{ + int Size; + int Capacity; + ImGuiOldColumns* Data; +} + +struct ImGuiWindow +{ + import std.bitmanip : bitfields; + + ImGuiContext* Ctx; + char* Name; + ImGuiID ID; + ImGuiWindowFlags Flags; + ImGuiViewportP* Viewport; + ImVec2 Pos; + ImVec2 Size; + ImVec2 SizeFull; + ImVec2 ContentSize; + ImVec2 ContentSizeIdeal; + ImVec2 ContentSizeExplicit; + ImVec2 WindowPadding; + float WindowRounding; + float WindowBorderSize; + float DecoOuterSizeX1; + float DecoOuterSizeY1; + float DecoOuterSizeX2; + float DecoOuterSizeY2; + float DecoInnerSizeX1; + float DecoInnerSizeY1; + int NameBufLen; + ImGuiID MoveId; + ImGuiID ChildId; + ImVec2 Scroll; + ImVec2 ScrollMax; + ImVec2 ScrollTarget; + ImVec2 ScrollTargetCenterRatio; + ImVec2 ScrollTargetEdgeSnapDist; + ImVec2 ScrollbarSizes; + bool ScrollbarX; + bool ScrollbarY; + bool Active; + bool WasActive; + bool WriteAccessed; + bool Collapsed; + bool WantCollapseToggle; + bool SkipItems; + bool Appearing; + bool Hidden; + bool IsFallbackWindow; + bool IsExplicitChild; + bool HasCloseButton; + byte ResizeBorderHeld; + short BeginCount; + short BeginCountPreviousFrame; + short BeginOrderWithinParent; + short BeginOrderWithinContext; + short FocusOrder; + ImGuiID PopupId; + ImS8 AutoFitFramesX; + ImS8 AutoFitFramesY; + ImS8 AutoFitChildAxises; + bool AutoFitOnlyGrows; + ImGuiDir AutoPosLastDirection; + ImS8 HiddenFramesCanSkipItems; + ImS8 HiddenFramesCannotSkipItems; + ImS8 HiddenFramesForRenderOnly; + ImS8 DisableInputsFrames; + + mixin(bitfields!(ImGuiCond, "SetWindowPosAllowFlags", 8, ImGuiCond, + "SetWindowSizeAllowFlags", 8, ImGuiCond, + "SetWindowCollapsedAllowFlags", 8, uint, "", 8)); + + ImVec2 SetWindowPosVal; + ImVec2 SetWindowPosPivot; + ImVector_ImGuiID IDStack; + ImGuiWindowTempData DC; + ImRect OuterRectClipped; + ImRect InnerRect; + ImRect InnerClipRect; + ImRect WorkRect; + ImRect ParentWorkRect; + ImRect ClipRect; + ImRect ContentRegionRect; + ImVec2ih HitTestHoleSize; + ImVec2ih HitTestHoleOffset; + int LastFrameActive; + float LastTimeActive; + float ItemWidthDefault; + ImGuiStorage StateStorage; + ImVector_ImGuiOldColumns ColumnsStorage; + float FontWindowScale; + int SettingsOffset; + ImDrawList* DrawList; + ImDrawList DrawListInst; + ImGuiWindow* ParentWindow; + ImGuiWindow* ParentWindowInBeginStack; + ImGuiWindow* RootWindow; + ImGuiWindow* RootWindowPopupTree; + ImGuiWindow* RootWindowForTitleBarHighlight; + ImGuiWindow* RootWindowForNav; + ImGuiWindow* NavLastChildNavWindow; + ImGuiID[ImGuiNavLayer.ImGuiNavLayer_COUNT] NavLastIds; + ImRect[ImGuiNavLayer.ImGuiNavLayer_COUNT] NavRectRel; + ImVec2[ImGuiNavLayer.ImGuiNavLayer_COUNT] NavPreferredScoringPosRel; + ImGuiID NavRootFocusScopeId; + int MemoryDrawListIdxCapacity; + int MemoryDrawListVtxCapacity; + bool MemoryCompacted; +} + +enum ImGuiTabBarFlagsPrivate_ +{ + ImGuiTabBarFlags_DockNode = 1 << 20, + ImGuiTabBarFlags_IsFocused = 1 << 21, + ImGuiTabBarFlags_SaveSettings = 1 << 22 +} + +// enum ImGuiTabItemFlagsPrivate_ +// { +// ImGuiTabItemFlags_SectionMask_ = ImGuiTabItemFlags_.ImGuiTabItemFlags_Leading +// | ImGuiTabItemFlags_.ImGuiTabItemFlags_Trailing, +// ImGuiTabItemFlags_NoCloseButton = 1 << 20, +// ImGuiTabItemFlags_Button = 1 << 21 +// } + +struct ImGuiTabItem +{ + ImGuiID ID; + ImGuiTabItemFlags Flags; + int LastFrameVisible; + int LastFrameSelected; + float Offset; + float Width; + float ContentWidth; + float RequestedWidth; + ImS32 NameOffset; + ImS16 BeginOrder; + ImS16 IndexDuringLayout; + bool WantClose; +} + +struct ImVector_ImGuiTabItem +{ + int Size; + int Capacity; + ImGuiTabItem* Data; +} + +struct ImGuiTabBar +{ + ImVector_ImGuiTabItem Tabs; + ImGuiTabBarFlags Flags; + ImGuiID ID; + ImGuiID SelectedTabId; + ImGuiID NextSelectedTabId; + ImGuiID VisibleTabId; + int CurrFrameVisible; + int PrevFrameVisible; + ImRect BarRect; + float CurrTabsContentsHeight; + float PrevTabsContentsHeight; + float WidthAllTabs; + float WidthAllTabsIdeal; + float ScrollingAnim; + float ScrollingTarget; + float ScrollingTargetDistToVisibility; + float ScrollingSpeed; + float ScrollingRectMinX; + float ScrollingRectMaxX; + ImGuiID ReorderRequestTabId; + ImS16 ReorderRequestOffset; + ImS8 BeginCount; + bool WantLayout; + bool VisibleTabWasSubmitted; + bool TabsAddedNew; + ImS16 TabsActiveCount; + ImS16 LastTabItemIdx; + float ItemSpacingY; + ImVec2 FramePadding; + ImVec2 BackupCursorPos; + ImGuiTextBuffer TabsNames; +} + +alias ImGuiTableColumnIdx = short; +alias ImGuiTableDrawChannelIdx = ushort; + +struct ImGuiTableColumn +{ + import std.bitmanip : bitfields; + + ImGuiTableColumnFlags Flags; + float WidthGiven; + float MinX; + float MaxX; + float WidthRequest; + float WidthAuto; + float StretchWeight; + float InitStretchWeightOrWidth; + ImRect ClipRect; + ImGuiID UserID; + float WorkMinX; + float WorkMaxX; + float ItemWidth; + float ContentMaxXFrozen; + float ContentMaxXUnfrozen; + float ContentMaxXHeadersUsed; + float ContentMaxXHeadersIdeal; + ImS16 NameOffset; + ImGuiTableColumnIdx DisplayOrder; + ImGuiTableColumnIdx IndexWithinEnabledSet; + ImGuiTableColumnIdx PrevEnabledColumn; + ImGuiTableColumnIdx NextEnabledColumn; + ImGuiTableColumnIdx SortOrder; + ImGuiTableDrawChannelIdx DrawChannelCurrent; + ImGuiTableDrawChannelIdx DrawChannelFrozen; + ImGuiTableDrawChannelIdx DrawChannelUnfrozen; + bool IsEnabled; + bool IsUserEnabled; + bool IsUserEnabledNextFrame; + bool IsVisibleX; + bool IsVisibleY; + bool IsRequestOutput; + bool IsSkipItems; + bool IsPreserveWidthAuto; + ImS8 NavLayerCurrent; + ImU8 AutoFitQueue; + ImU8 CannotSkipItemsQueue; + + mixin(bitfields!(ImU8, "SortDirection", 2, ImU8, + "SortDirectionsAvailCount", 2, ImU8, "SortDirectionsAvailMask", 4)); + + ImU8 SortDirectionsAvailList; +} + +struct ImGuiTableCellData +{ + ImU32 BgColor; + ImGuiTableColumnIdx Column; +} + +struct ImGuiTableInstanceData +{ + ImGuiID TableInstanceID; + float LastOuterHeight; + float LastFirstRowHeight; + float LastFrozenHeight; + int HoveredRowLast; + int HoveredRowNext; +} + +struct ImSpan_ImGuiTableColumn +{ + ImGuiTableColumn* Data; + ImGuiTableColumn* DataEnd; +} + +struct ImSpan_ImGuiTableColumnIdx +{ + ImGuiTableColumnIdx* Data; + ImGuiTableColumnIdx* DataEnd; +} + +struct ImSpan_ImGuiTableCellData +{ + ImGuiTableCellData* Data; + ImGuiTableCellData* DataEnd; +} + +struct ImVector_ImGuiTableInstanceData +{ + int Size; + int Capacity; + ImGuiTableInstanceData* Data; +} + +struct ImVector_ImGuiTableColumnSortSpecs +{ + int Size; + int Capacity; + ImGuiTableColumnSortSpecs* Data; +} + +struct ImGuiTable +{ + import std.bitmanip : bitfields; + + ImGuiID ID; + ImGuiTableFlags Flags; + void* RawData; + ImGuiTableTempData* TempData; + ImSpan_ImGuiTableColumn Columns; + ImSpan_ImGuiTableColumnIdx DisplayOrderToIndex; + ImSpan_ImGuiTableCellData RowCellData; + ImBitArrayPtr EnabledMaskByDisplayOrder; + ImBitArrayPtr EnabledMaskByIndex; + ImBitArrayPtr VisibleMaskByIndex; + ImGuiTableFlags SettingsLoadedFlags; + int SettingsOffset; + int LastFrameActive; + int ColumnsCount; + int CurrentRow; + int CurrentColumn; + ImS16 InstanceCurrent; + ImS16 InstanceInteracted; + float RowPosY1; + float RowPosY2; + float RowMinHeight; + float RowCellPaddingY; + float RowTextBaseline; + float RowIndentOffsetX; + + mixin(bitfields!(ImGuiTableRowFlags, "RowFlags", 16, ImGuiTableRowFlags, "LastRowFlags", 16)); + + int RowBgColorCounter; + ImU32[2] RowBgColor; + ImU32 BorderColorStrong; + ImU32 BorderColorLight; + float BorderX1; + float BorderX2; + float HostIndentX; + float MinColumnWidth; + float OuterPaddingX; + float CellPaddingX; + float CellSpacingX1; + float CellSpacingX2; + float InnerWidth; + float ColumnsGivenWidth; + float ColumnsAutoFitWidth; + float ColumnsStretchSumWeights; + float ResizedColumnNextWidth; + float ResizeLockMinContentsX2; + float RefScale; + ImRect OuterRect; + ImRect InnerRect; + ImRect WorkRect; + ImRect InnerClipRect; + ImRect BgClipRect; + ImRect Bg0ClipRectForDrawCmd; + ImRect Bg2ClipRectForDrawCmd; + ImRect HostClipRect; + ImRect HostBackupInnerClipRect; + ImGuiWindow* OuterWindow; + ImGuiWindow* InnerWindow; + ImGuiTextBuffer ColumnsNames; + ImDrawListSplitter* DrawSplitter; + ImGuiTableInstanceData InstanceDataFirst; + ImVector_ImGuiTableInstanceData InstanceDataExtra; + ImGuiTableColumnSortSpecs SortSpecsSingle; + ImVector_ImGuiTableColumnSortSpecs SortSpecsMulti; + ImGuiTableSortSpecs SortSpecs; + ImGuiTableColumnIdx SortSpecsCount; + ImGuiTableColumnIdx ColumnsEnabledCount; + ImGuiTableColumnIdx ColumnsEnabledFixedCount; + ImGuiTableColumnIdx DeclColumnsCount; + ImGuiTableColumnIdx HoveredColumnBody; + ImGuiTableColumnIdx HoveredColumnBorder; + ImGuiTableColumnIdx AutoFitSingleColumn; + ImGuiTableColumnIdx ResizedColumn; + ImGuiTableColumnIdx LastResizedColumn; + ImGuiTableColumnIdx HeldHeaderColumn; + ImGuiTableColumnIdx ReorderColumn; + ImGuiTableColumnIdx ReorderColumnDir; + ImGuiTableColumnIdx LeftMostEnabledColumn; + ImGuiTableColumnIdx RightMostEnabledColumn; + ImGuiTableColumnIdx LeftMostStretchedColumn; + ImGuiTableColumnIdx RightMostStretchedColumn; + ImGuiTableColumnIdx ContextPopupColumn; + ImGuiTableColumnIdx FreezeRowsRequest; + ImGuiTableColumnIdx FreezeRowsCount; + ImGuiTableColumnIdx FreezeColumnsRequest; + ImGuiTableColumnIdx FreezeColumnsCount; + ImGuiTableColumnIdx RowCellDataCurrent; + ImGuiTableDrawChannelIdx DummyDrawChannel; + ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent; + ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen; + bool IsLayoutLocked; + bool IsInsideRow; + bool IsInitializing; + bool IsSortSpecsDirty; + bool IsUsingHeaders; + bool IsContextPopupOpen; + bool IsSettingsRequestLoad; + bool IsSettingsDirty; + bool IsDefaultDisplayOrder; + bool IsResetAllRequest; + bool IsResetDisplayOrderRequest; + bool IsUnfrozenRows; + bool IsDefaultSizingPolicy; + bool HasScrollbarYCurr; + bool HasScrollbarYPrev; + bool MemoryCompacted; + bool HostSkipItems; +} + +struct ImGuiTableTempData +{ + int TableIndex; + float LastTimeActive; + ImVec2 UserOuterSize; + ImDrawListSplitter DrawSplitter; + ImRect HostBackupWorkRect; + ImRect HostBackupParentWorkRect; + ImVec2 HostBackupPrevLineSize; + ImVec2 HostBackupCurrLineSize; + ImVec2 HostBackupCursorMaxPos; + ImVec1 HostBackupColumnsOffset; + float HostBackupItemWidth; + int HostBackupItemWidthStackSize; +} + +struct ImGuiTableColumnSettings +{ + import std.bitmanip : bitfields; + + float WidthOrWeight; + ImGuiID UserID; + ImGuiTableColumnIdx Index; + ImGuiTableColumnIdx DisplayOrder; + ImGuiTableColumnIdx SortOrder; + + mixin(bitfields!(ImU8, "SortDirection", 2, ImU8, "IsEnabled", 1, ImU8, + "IsStretch", 1, uint, "", 4)); +} + +struct ImGuiTableSettings +{ + ImGuiID ID; + ImGuiTableFlags SaveFlags; + float RefScale; + ImGuiTableColumnIdx ColumnsCount; + ImGuiTableColumnIdx ColumnsCountMax; + bool WantApply; +} + +struct ImFontBuilderIO +{ + bool function(ImFontAtlas* atlas) FontBuilder_Build; +} + +ImVec2* ImVec2_ImVec2_Nil(); +void ImVec2_destroy(ImVec2* self); +ImVec2* ImVec2_ImVec2_Float(float _x, float _y); +ImVec4* ImVec4_ImVec4_Nil(); +void ImVec4_destroy(ImVec4* self); +ImVec4* ImVec4_ImVec4_Float(float _x, float _y, float _z, float _w); +ImGuiContext* igCreateContext(ImFontAtlas* shared_font_atlas); +void igDestroyContext(ImGuiContext* ctx); +ImGuiContext* igGetCurrentContext(); +void igSetCurrentContext(ImGuiContext* ctx); +ImGuiIO* igGetIO(); +ImGuiStyle* igGetStyle(); +void igNewFrame(); +void igEndFrame(); +void igRender(); +ImDrawData* igGetDrawData(); +void igShowDemoWindow(bool* p_open); +void igShowMetricsWindow(bool* p_open); +void igShowDebugLogWindow(bool* p_open); +void igShowStackToolWindow(bool* p_open); +void igShowAboutWindow(bool* p_open); +void igShowStyleEditor(ImGuiStyle* ref_); +bool igShowStyleSelector(const(char)* label); +void igShowFontSelector(const(char)* label); +void igShowUserGuide(); +const(char)* igGetVersion(); +void igStyleColorsDark(ImGuiStyle* dst); +void igStyleColorsLight(ImGuiStyle* dst); +void igStyleColorsClassic(ImGuiStyle* dst); +bool igBegin(const(char)* name, bool* p_open, ImGuiWindowFlags flags); +void igEnd(); +bool igBeginChild_Str(const(char)* str_id, const ImVec2 size, bool border, ImGuiWindowFlags flags); +bool igBeginChild_ID(ImGuiID id, const ImVec2 size, bool border, ImGuiWindowFlags flags); +void igEndChild(); +bool igIsWindowAppearing(); +bool igIsWindowCollapsed(); +bool igIsWindowFocused(ImGuiFocusedFlags flags); +bool igIsWindowHovered(ImGuiHoveredFlags flags); +ImDrawList* igGetWindowDrawList(); +void igGetWindowPos(ImVec2* pOut); +void igGetWindowSize(ImVec2* pOut); +float igGetWindowWidth(); +float igGetWindowHeight(); +void igSetNextWindowPos(const ImVec2 pos, ImGuiCond cond, const ImVec2 pivot); +void igSetNextWindowSize(const ImVec2 size, ImGuiCond cond); +void igSetNextWindowSizeConstraints(const ImVec2 size_min, const ImVec2 size_max, + ImGuiSizeCallback custom_callback, void* custom_callback_data); +void igSetNextWindowContentSize(const ImVec2 size); +void igSetNextWindowCollapsed(bool collapsed, ImGuiCond cond); +void igSetNextWindowFocus(); +void igSetNextWindowScroll(const ImVec2 scroll); +void igSetNextWindowBgAlpha(float alpha); +void igSetWindowPos_Vec2(const ImVec2 pos, ImGuiCond cond); +void igSetWindowSize_Vec2(const ImVec2 size, ImGuiCond cond); +void igSetWindowCollapsed_Bool(bool collapsed, ImGuiCond cond); +void igSetWindowFocus_Nil(); +void igSetWindowFontScale(float scale); +void igSetWindowPos_Str(const(char)* name, const ImVec2 pos, ImGuiCond cond); +void igSetWindowSize_Str(const(char)* name, const ImVec2 size, ImGuiCond cond); +void igSetWindowCollapsed_Str(const(char)* name, bool collapsed, ImGuiCond cond); +void igSetWindowFocus_Str(const(char)* name); +void igGetContentRegionAvail(ImVec2* pOut); +void igGetContentRegionMax(ImVec2* pOut); +void igGetWindowContentRegionMin(ImVec2* pOut); +void igGetWindowContentRegionMax(ImVec2* pOut); +float igGetScrollX(); +float igGetScrollY(); +void igSetScrollX_Float(float scroll_x); +void igSetScrollY_Float(float scroll_y); +float igGetScrollMaxX(); +float igGetScrollMaxY(); +void igSetScrollHereX(float center_x_ratio); +void igSetScrollHereY(float center_y_ratio); +void igSetScrollFromPosX_Float(float local_x, float center_x_ratio); +void igSetScrollFromPosY_Float(float local_y, float center_y_ratio); +void igPushFont(ImFont* font); +void igPopFont(); +void igPushStyleColor_U32(ImGuiCol idx, ImU32 col); +void igPushStyleColor_Vec4(ImGuiCol idx, const ImVec4 col); +void igPopStyleColor(int count); +void igPushStyleVar_Float(ImGuiStyleVar idx, float val); +void igPushStyleVar_Vec2(ImGuiStyleVar idx, const ImVec2 val); +void igPopStyleVar(int count); +void igPushTabStop(bool tab_stop); +void igPopTabStop(); +void igPushButtonRepeat(bool repeat); +void igPopButtonRepeat(); +void igPushItemWidth(float item_width); +void igPopItemWidth(); +void igSetNextItemWidth(float item_width); +float igCalcItemWidth(); +void igPushTextWrapPos(float wrap_local_pos_x); +void igPopTextWrapPos(); +ImFont* igGetFont(); +float igGetFontSize(); +void igGetFontTexUvWhitePixel(ImVec2* pOut); +ImU32 igGetColorU32_Col(ImGuiCol idx, float alpha_mul); +ImU32 igGetColorU32_Vec4(const ImVec4 col); +ImU32 igGetColorU32_U32(ImU32 col); +const(ImVec4)* igGetStyleColorVec4(ImGuiCol idx); +void igSeparator(); +void igSameLine(float offset_from_start_x, float spacing); +void igNewLine(); +void igSpacing(); +void igDummy(const ImVec2 size); +void igIndent(float indent_w); +void igUnindent(float indent_w); +void igBeginGroup(); +void igEndGroup(); +void igGetCursorPos(ImVec2* pOut); +float igGetCursorPosX(); +float igGetCursorPosY(); +void igSetCursorPos(const ImVec2 local_pos); +void igSetCursorPosX(float local_x); +void igSetCursorPosY(float local_y); +void igGetCursorStartPos(ImVec2* pOut); +void igGetCursorScreenPos(ImVec2* pOut); +void igSetCursorScreenPos(const ImVec2 pos); +void igAlignTextToFramePadding(); +float igGetTextLineHeight(); +float igGetTextLineHeightWithSpacing(); +float igGetFrameHeight(); +float igGetFrameHeightWithSpacing(); +void igPushID_Str(const(char)* str_id); +void igPushID_StrStr(const(char)* str_id_begin, const(char)* str_id_end); +void igPushID_Ptr(const(void)* ptr_id); +void igPushID_Int(int int_id); +void igPopID(); +ImGuiID igGetID_Str(const(char)* str_id); +ImGuiID igGetID_StrStr(const(char)* str_id_begin, const(char)* str_id_end); +ImGuiID igGetID_Ptr(const(void)* ptr_id); +void igTextUnformatted(const(char)* text, const(char)* text_end); +void igText(const(char)* fmt, ...); +void igTextV(const(char)* fmt, va_list args); +void igTextColored(const ImVec4 col, const(char)* fmt, ...); +void igTextColoredV(const ImVec4 col, const(char)* fmt, va_list args); +void igTextDisabled(const(char)* fmt, ...); +void igTextDisabledV(const(char)* fmt, va_list args); +void igTextWrapped(const(char)* fmt, ...); +void igTextWrappedV(const(char)* fmt, va_list args); +void igLabelText(const(char)* label, const(char)* fmt, ...); +void igLabelTextV(const(char)* label, const(char)* fmt, va_list args); +void igBulletText(const(char)* fmt, ...); +void igBulletTextV(const(char)* fmt, va_list args); +void igSeparatorText(const(char)* label); +bool igButton(const(char)* label, const ImVec2 size); +bool igSmallButton(const(char)* label); +bool igInvisibleButton(const(char)* str_id, const ImVec2 size, ImGuiButtonFlags flags); +bool igArrowButton(const(char)* str_id, ImGuiDir dir); +bool igCheckbox(const(char)* label, bool* v); +bool igCheckboxFlags_IntPtr(const(char)* label, int* flags, int flags_value); +bool igCheckboxFlags_UintPtr(const(char)* label, uint* flags, uint flags_value); +bool igRadioButton_Bool(const(char)* label, bool active); +bool igRadioButton_IntPtr(const(char)* label, int* v, int v_button); +void igProgressBar(float fraction, const ImVec2 size_arg, const(char)* overlay); +void igBullet(); +void igImage(ImTextureID user_texture_id, const ImVec2 size, const ImVec2 uv0, + const ImVec2 uv1, const ImVec4 tint_col, const ImVec4 border_col); +bool igImageButton(const(char)* str_id, ImTextureID user_texture_id, const ImVec2 size, + const ImVec2 uv0, const ImVec2 uv1, const ImVec4 bg_col, const ImVec4 tint_col); +bool igBeginCombo(const(char)* label, const(char)* preview_value, ImGuiComboFlags flags); +void igEndCombo(); +bool igCombo_Str_arr(const(char)* label, int* current_item, + const(char*)* items, int items_count, int popup_max_height_in_items); +bool igCombo_Str(const(char)* label, int* current_item, + const(char)* items_separated_by_zeros, int popup_max_height_in_items); +bool igCombo_FnBoolPtr(const(char)* label, int* current_item, + bool function(void* data, int idx, const(char*)* out_text) items_getter, + void* data, int items_count, int popup_max_height_in_items); +bool igDragFloat(const(char)* label, float* v, float v_speed, float v_min, + float v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragFloat2(const(char)* label, ref float[2] v, float v_speed, float v_min, + float v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragFloat3(const(char)* label, ref float[3] v, float v_speed, float v_min, + float v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragFloat4(const(char)* label, ref float[4] v, float v_speed, float v_min, + float v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragFloatRange2(const(char)* label, float* v_current_min, + float* v_current_max, float v_speed, float v_min, float v_max, + const(char)* format, const(char)* format_max, ImGuiSliderFlags flags); +bool igDragInt(const(char)* label, int* v, float v_speed, int v_min, int v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igDragInt2(const(char)* label, ref int[2] v, float v_speed, int v_min, + int v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragInt3(const(char)* label, ref int[3] v, float v_speed, int v_min, + int v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragInt4(const(char)* label, ref int[4] v, float v_speed, int v_min, + int v_max, const(char)* format, ImGuiSliderFlags flags); +bool igDragIntRange2(const(char)* label, int* v_current_min, + int* v_current_max, float v_speed, int v_min, int v_max, + const(char)* format, const(char)* format_max, ImGuiSliderFlags flags); +bool igDragScalar(const(char)* label, ImGuiDataType data_type, void* p_data, + float v_speed, const(void)* p_min, const(void)* p_max, + const(char)* format, ImGuiSliderFlags flags); +bool igDragScalarN(const(char)* label, ImGuiDataType data_type, void* p_data, + int components, float v_speed, const(void)* p_min, const(void)* p_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderFloat(const(char)* label, float* v, float v_min, float v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderFloat2(const(char)* label, ref float[2] v, float v_min, float v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderFloat3(const(char)* label, ref float[3] v, float v_min, float v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderFloat4(const(char)* label, ref float[4] v, float v_min, float v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderAngle(const(char)* label, float* v_rad, float v_degrees_min, + float v_degrees_max, const(char)* format, ImGuiSliderFlags flags); +bool igSliderInt(const(char)* label, int* v, int v_min, int v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderInt2(const(char)* label, ref int[2] v, int v_min, int v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderInt3(const(char)* label, ref int[3] v, int v_min, int v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderInt4(const(char)* label, ref int[4] v, int v_min, int v_max, + const(char)* format, ImGuiSliderFlags flags); +bool igSliderScalar(const(char)* label, ImGuiDataType data_type, void* p_data, + const(void)* p_min, const(void)* p_max, const(char)* format, ImGuiSliderFlags flags); +bool igSliderScalarN(const(char)* label, ImGuiDataType data_type, void* p_data, + int components, const(void)* p_min, const(void)* p_max, + const(char)* format, ImGuiSliderFlags flags); +bool igVSliderFloat(const(char)* label, const ImVec2 size, float* v, float v_min, + float v_max, const(char)* format, ImGuiSliderFlags flags); +bool igVSliderInt(const(char)* label, const ImVec2 size, int* v, int v_min, + int v_max, const(char)* format, ImGuiSliderFlags flags); +bool igVSliderScalar(const(char)* label, const ImVec2 size, + ImGuiDataType data_type, void* p_data, const(void)* p_min, + const(void)* p_max, const(char)* format, ImGuiSliderFlags flags); +bool igInputText(const(char)* label, char* buf, size_t buf_size, + ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data); +bool igInputTextMultiline(const(char)* label, char* buf, size_t buf_size, const ImVec2 size, + ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data); +bool igInputTextWithHint(const(char)* label, const(char)* hint, char* buf, size_t buf_size, + ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data); +bool igInputFloat(const(char)* label, float* v, float step, float step_fast, + const(char)* format, ImGuiInputTextFlags flags); +bool igInputFloat2(const(char)* label, ref float[2] v, const(char)* format, + ImGuiInputTextFlags flags); +bool igInputFloat3(const(char)* label, ref float[3] v, const(char)* format, + ImGuiInputTextFlags flags); +bool igInputFloat4(const(char)* label, ref float[4] v, const(char)* format, + ImGuiInputTextFlags flags); +bool igInputInt(const(char)* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags); +bool igInputInt2(const(char)* label, ref int[2] v, ImGuiInputTextFlags flags); +bool igInputInt3(const(char)* label, ref int[3] v, ImGuiInputTextFlags flags); +bool igInputInt4(const(char)* label, ref int[4] v, ImGuiInputTextFlags flags); +bool igInputDouble(const(char)* label, double* v, double step, double step_fast, + const(char)* format, ImGuiInputTextFlags flags); +bool igInputScalar(const(char)* label, ImGuiDataType data_type, void* p_data, + const(void)* p_step, const(void)* p_step_fast, const(char)* format, + ImGuiInputTextFlags flags); +bool igInputScalarN(const(char)* label, ImGuiDataType data_type, void* p_data, + int components, const(void)* p_step, const(void)* p_step_fast, + const(char)* format, ImGuiInputTextFlags flags); +bool igColorEdit3(const(char)* label, ref float[3] col, ImGuiColorEditFlags flags); +bool igColorEdit4(const(char)* label, ref float[4] col, ImGuiColorEditFlags flags); +bool igColorPicker3(const(char)* label, ref float[3] col, ImGuiColorEditFlags flags); +bool igColorPicker4(const(char)* label, ref float[4] col, + ImGuiColorEditFlags flags, const(float)* ref_col); +bool igColorButton(const(char)* desc_id, const ImVec4 col, + ImGuiColorEditFlags flags, const ImVec2 size); +void igSetColorEditOptions(ImGuiColorEditFlags flags); +bool igTreeNode_Str(const(char)* label); +bool igTreeNode_StrStr(const(char)* str_id, const(char)* fmt, ...); +bool igTreeNode_Ptr(const(void)* ptr_id, const(char)* fmt, ...); +bool igTreeNodeV_Str(const(char)* str_id, const(char)* fmt, va_list args); +bool igTreeNodeV_Ptr(const(void)* ptr_id, const(char)* fmt, va_list args); +bool igTreeNodeEx_Str(const(char)* label, ImGuiTreeNodeFlags flags); +bool igTreeNodeEx_StrStr(const(char)* str_id, ImGuiTreeNodeFlags flags, const(char)* fmt, ...); +bool igTreeNodeEx_Ptr(const(void)* ptr_id, ImGuiTreeNodeFlags flags, const(char)* fmt, ...); +bool igTreeNodeExV_Str(const(char)* str_id, ImGuiTreeNodeFlags flags, + const(char)* fmt, va_list args); +bool igTreeNodeExV_Ptr(const(void)* ptr_id, ImGuiTreeNodeFlags flags, + const(char)* fmt, va_list args); +void igTreePush_Str(const(char)* str_id); +void igTreePush_Ptr(const(void)* ptr_id); +void igTreePop(); +float igGetTreeNodeToLabelSpacing(); +bool igCollapsingHeader_TreeNodeFlags(const(char)* label, ImGuiTreeNodeFlags flags); +bool igCollapsingHeader_BoolPtr(const(char)* label, bool* p_visible, ImGuiTreeNodeFlags flags); +void igSetNextItemOpen(bool is_open, ImGuiCond cond); +bool igSelectable_Bool(const(char)* label, bool selected, + ImGuiSelectableFlags flags, const ImVec2 size); +bool igSelectable_BoolPtr(const(char)* label, bool* p_selected, + ImGuiSelectableFlags flags, const ImVec2 size); +bool igBeginListBox(const(char)* label, const ImVec2 size); +void igEndListBox(); +bool igListBox_Str_arr(const(char)* label, int* current_item, + const(char*)* items, int items_count, int height_in_items); +bool igListBox_FnBoolPtr(const(char)* label, int* current_item, + bool function(void* data, int idx, const(char*)* out_text) items_getter, + void* data, int items_count, int height_in_items); +void igPlotLines_FloatPtr(const(char)* label, const(float)* values, int values_count, + int values_offset, const(char)* overlay_text, float scale_min, + float scale_max, ImVec2 graph_size, int stride); +void igPlotLines_FnFloatPtr(const(char)* label, float function(void* data, + int idx) values_getter, void* data, int values_count, int values_offset, + const(char)* overlay_text, float scale_min, float scale_max, ImVec2 graph_size); +void igPlotHistogram_FloatPtr(const(char)* label, const(float)* values, + int values_count, int values_offset, const(char)* overlay_text, + float scale_min, float scale_max, ImVec2 graph_size, int stride); +void igPlotHistogram_FnFloatPtr(const(char)* label, float function(void* data, + int idx) values_getter, void* data, int values_count, int values_offset, + const(char)* overlay_text, float scale_min, float scale_max, ImVec2 graph_size); +void igValue_Bool(const(char)* prefix, bool b); +void igValue_Int(const(char)* prefix, int v); +void igValue_Uint(const(char)* prefix, uint v); +void igValue_Float(const(char)* prefix, float v, const(char)* float_format); +bool igBeginMenuBar(); +void igEndMenuBar(); +bool igBeginMainMenuBar(); +void igEndMainMenuBar(); +bool igBeginMenu(const(char)* label, bool enabled); +void igEndMenu(); +bool igMenuItem_Bool(const(char)* label, const(char)* shortcut, bool selected, bool enabled); +bool igMenuItem_BoolPtr(const(char)* label, const(char)* shortcut, bool* p_selected, bool enabled); +bool igBeginTooltip(); +void igEndTooltip(); +void igSetTooltip(const(char)* fmt, ...); +void igSetTooltipV(const(char)* fmt, va_list args); +bool igBeginItemTooltip(); +void igSetItemTooltip(const(char)* fmt, ...); +void igSetItemTooltipV(const(char)* fmt, va_list args); +bool igBeginPopup(const(char)* str_id, ImGuiWindowFlags flags); +bool igBeginPopupModal(const(char)* name, bool* p_open, ImGuiWindowFlags flags); +void igEndPopup(); +void igOpenPopup_Str(const(char)* str_id, ImGuiPopupFlags popup_flags); +void igOpenPopup_ID(ImGuiID id, ImGuiPopupFlags popup_flags); +void igOpenPopupOnItemClick(const(char)* str_id, ImGuiPopupFlags popup_flags); +void igCloseCurrentPopup(); +bool igBeginPopupContextItem(const(char)* str_id, ImGuiPopupFlags popup_flags); +bool igBeginPopupContextWindow(const(char)* str_id, ImGuiPopupFlags popup_flags); +bool igBeginPopupContextVoid(const(char)* str_id, ImGuiPopupFlags popup_flags); +bool igIsPopupOpen_Str(const(char)* str_id, ImGuiPopupFlags flags); +bool igBeginTable(const(char)* str_id, int column, ImGuiTableFlags flags, + const ImVec2 outer_size, float inner_width); +void igEndTable(); +void igTableNextRow(ImGuiTableRowFlags row_flags, float min_row_height); +bool igTableNextColumn(); +bool igTableSetColumnIndex(int column_n); +void igTableSetupColumn(const(char)* label, ImGuiTableColumnFlags flags, + float init_width_or_weight, ImGuiID user_id); +void igTableSetupScrollFreeze(int cols, int rows); +void igTableHeadersRow(); +void igTableHeader(const(char)* label); +ImGuiTableSortSpecs* igTableGetSortSpecs(); +int igTableGetColumnCount(); +int igTableGetColumnIndex(); +int igTableGetRowIndex(); +const(char)* igTableGetColumnName_Int(int column_n); +ImGuiTableColumnFlags igTableGetColumnFlags(int column_n); +void igTableSetColumnEnabled(int column_n, bool v); +void igTableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n); +void igColumns(int count, const(char)* id, bool border); +void igNextColumn(); +int igGetColumnIndex(); +float igGetColumnWidth(int column_index); +void igSetColumnWidth(int column_index, float width); +float igGetColumnOffset(int column_index); +void igSetColumnOffset(int column_index, float offset_x); +int igGetColumnsCount(); +bool igBeginTabBar(const(char)* str_id, ImGuiTabBarFlags flags); +void igEndTabBar(); +bool igBeginTabItem(const(char)* label, bool* p_open, ImGuiTabItemFlags flags); +void igEndTabItem(); +bool igTabItemButton(const(char)* label, ImGuiTabItemFlags flags); +void igSetTabItemClosed(const(char)* tab_or_docked_window_label); +void igLogToTTY(int auto_open_depth); +void igLogToFile(int auto_open_depth, const(char)* filename); +void igLogToClipboard(int auto_open_depth); +void igLogFinish(); +void igLogButtons(); +void igLogTextV(const(char)* fmt, va_list args); +bool igBeginDragDropSource(ImGuiDragDropFlags flags); +bool igSetDragDropPayload(const(char)* type, const(void)* data, size_t sz, ImGuiCond cond); +void igEndDragDropSource(); +bool igBeginDragDropTarget(); +const(ImGuiPayload)* igAcceptDragDropPayload(const(char)* type, ImGuiDragDropFlags flags); +void igEndDragDropTarget(); +const(ImGuiPayload)* igGetDragDropPayload(); +void igBeginDisabled(bool disabled); +void igEndDisabled(); +void igPushClipRect(const ImVec2 clip_rect_min, const ImVec2 clip_rect_max, + bool intersect_with_current_clip_rect); +void igPopClipRect(); +void igSetItemDefaultFocus(); +void igSetKeyboardFocusHere(int offset); +void igSetNextItemAllowOverlap(); +bool igIsItemHovered(ImGuiHoveredFlags flags); +bool igIsItemActive(); +bool igIsItemFocused(); +bool igIsItemClicked(ImGuiMouseButton mouse_button); +bool igIsItemVisible(); +bool igIsItemEdited(); +bool igIsItemActivated(); +bool igIsItemDeactivated(); +bool igIsItemDeactivatedAfterEdit(); +bool igIsItemToggledOpen(); +bool igIsAnyItemHovered(); +bool igIsAnyItemActive(); +bool igIsAnyItemFocused(); +ImGuiID igGetItemID(); +void igGetItemRectMin(ImVec2* pOut); +void igGetItemRectMax(ImVec2* pOut); +void igGetItemRectSize(ImVec2* pOut); +ImGuiViewport* igGetMainViewport(); +ImDrawList* igGetBackgroundDrawList_Nil(); +ImDrawList* igGetForegroundDrawList_Nil(); +bool igIsRectVisible_Nil(const ImVec2 size); +bool igIsRectVisible_Vec2(const ImVec2 rect_min, const ImVec2 rect_max); +double igGetTime(); +int igGetFrameCount(); +ImDrawListSharedData* igGetDrawListSharedData(); +const(char)* igGetStyleColorName(ImGuiCol idx); +void igSetStateStorage(ImGuiStorage* storage); +ImGuiStorage* igGetStateStorage(); +bool igBeginChildFrame(ImGuiID id, const ImVec2 size, ImGuiWindowFlags flags); +void igEndChildFrame(); +void igCalcTextSize(ImVec2* pOut, const(char)* text, const(char)* text_end, + bool hide_text_after_double_hash, float wrap_width); +void igColorConvertU32ToFloat4(ImVec4* pOut, ImU32 in_); +ImU32 igColorConvertFloat4ToU32(const ImVec4 in_); +void igColorConvertRGBtoHSV(float r, float g, float b, float* out_h, float* out_s, float* out_v); +void igColorConvertHSVtoRGB(float h, float s, float v, float* out_r, float* out_g, float* out_b); +bool igIsKeyDown_Nil(ImGuiKey key); +bool igIsKeyPressed_Bool(ImGuiKey key, bool repeat); +bool igIsKeyReleased_Nil(ImGuiKey key); +int igGetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate); +const(char)* igGetKeyName(ImGuiKey key); +void igSetNextFrameWantCaptureKeyboard(bool want_capture_keyboard); +bool igIsMouseDown_Nil(ImGuiMouseButton button); +bool igIsMouseClicked_Bool(ImGuiMouseButton button, bool repeat); +bool igIsMouseReleased_Nil(ImGuiMouseButton button); +bool igIsMouseDoubleClicked(ImGuiMouseButton button); +int igGetMouseClickedCount(ImGuiMouseButton button); +bool igIsMouseHoveringRect(const ImVec2 r_min, const ImVec2 r_max, bool clip); +bool igIsMousePosValid(const(ImVec2)* mouse_pos); +bool igIsAnyMouseDown(); +void igGetMousePos(ImVec2* pOut); +void igGetMousePosOnOpeningCurrentPopup(ImVec2* pOut); +bool igIsMouseDragging(ImGuiMouseButton button, float lock_threshold); +void igGetMouseDragDelta(ImVec2* pOut, ImGuiMouseButton button, float lock_threshold); +void igResetMouseDragDelta(ImGuiMouseButton button); +ImGuiMouseCursor igGetMouseCursor(); +void igSetMouseCursor(ImGuiMouseCursor cursor_type); +void igSetNextFrameWantCaptureMouse(bool want_capture_mouse); +const(char)* igGetClipboardText(); +void igSetClipboardText(const(char)* text); +void igLoadIniSettingsFromDisk(const(char)* ini_filename); +void igLoadIniSettingsFromMemory(const(char)* ini_data, size_t ini_size); +void igSaveIniSettingsToDisk(const(char)* ini_filename); +const(char)* igSaveIniSettingsToMemory(size_t* out_ini_size); +void igDebugTextEncoding(const(char)* text); +bool igDebugCheckVersionAndDataLayout(const(char)* version_str, size_t sz_io, + size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); +void igSetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, + ImGuiMemFreeFunc free_func, void* user_data); +void igGetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, + ImGuiMemFreeFunc* p_free_func, void** p_user_data); +void* igMemAlloc(size_t size); +void igMemFree(void* ptr); +ImGuiStyle* ImGuiStyle_ImGuiStyle(); +void ImGuiStyle_destroy(ImGuiStyle* self); +void ImGuiStyle_ScaleAllSizes(ImGuiStyle* self, float scale_factor); +void ImGuiIO_AddKeyEvent(ImGuiIO* self, ImGuiKey key, bool down); +void ImGuiIO_AddKeyAnalogEvent(ImGuiIO* self, ImGuiKey key, bool down, float v); +void ImGuiIO_AddMousePosEvent(ImGuiIO* self, float x, float y); +void ImGuiIO_AddMouseButtonEvent(ImGuiIO* self, int button, bool down); +void ImGuiIO_AddMouseWheelEvent(ImGuiIO* self, float wheel_x, float wheel_y); +void ImGuiIO_AddMouseSourceEvent(ImGuiIO* self, ImGuiMouseSource source); +void ImGuiIO_AddFocusEvent(ImGuiIO* self, bool focused); +void ImGuiIO_AddInputCharacter(ImGuiIO* self, uint c); +void ImGuiIO_AddInputCharacterUTF16(ImGuiIO* self, ImWchar16 c); +void ImGuiIO_AddInputCharactersUTF8(ImGuiIO* self, const(char)* str); +void ImGuiIO_SetKeyEventNativeData(ImGuiIO* self, ImGuiKey key, + int native_keycode, int native_scancode, int native_legacy_index); +void ImGuiIO_SetAppAcceptingEvents(ImGuiIO* self, bool accepting_events); +void ImGuiIO_ClearEventsQueue(ImGuiIO* self); +void ImGuiIO_ClearInputKeys(ImGuiIO* self); +ImGuiIO* ImGuiIO_ImGuiIO(); +void ImGuiIO_destroy(ImGuiIO* self); +ImGuiInputTextCallbackData* ImGuiInputTextCallbackData_ImGuiInputTextCallbackData(); +void ImGuiInputTextCallbackData_destroy(ImGuiInputTextCallbackData* self); +void ImGuiInputTextCallbackData_DeleteChars(ImGuiInputTextCallbackData* self, + int pos, int bytes_count); +void ImGuiInputTextCallbackData_InsertChars(ImGuiInputTextCallbackData* self, + int pos, const(char)* text, const(char)* text_end); +void ImGuiInputTextCallbackData_SelectAll(ImGuiInputTextCallbackData* self); +void ImGuiInputTextCallbackData_ClearSelection(ImGuiInputTextCallbackData* self); +bool ImGuiInputTextCallbackData_HasSelection(ImGuiInputTextCallbackData* self); +ImGuiPayload* ImGuiPayload_ImGuiPayload(); +void ImGuiPayload_destroy(ImGuiPayload* self); +void ImGuiPayload_Clear(ImGuiPayload* self); +bool ImGuiPayload_IsDataType(ImGuiPayload* self, const(char)* type); +bool ImGuiPayload_IsPreview(ImGuiPayload* self); +bool ImGuiPayload_IsDelivery(ImGuiPayload* self); +ImGuiTableColumnSortSpecs* ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs(); +void ImGuiTableColumnSortSpecs_destroy(ImGuiTableColumnSortSpecs* self); +ImGuiTableSortSpecs* ImGuiTableSortSpecs_ImGuiTableSortSpecs(); +void ImGuiTableSortSpecs_destroy(ImGuiTableSortSpecs* self); +ImGuiOnceUponAFrame* ImGuiOnceUponAFrame_ImGuiOnceUponAFrame(); +void ImGuiOnceUponAFrame_destroy(ImGuiOnceUponAFrame* self); +ImGuiTextFilter* ImGuiTextFilter_ImGuiTextFilter(const(char)* default_filter); +void ImGuiTextFilter_destroy(ImGuiTextFilter* self); +bool ImGuiTextFilter_Draw(ImGuiTextFilter* self, const(char)* label, float width); +bool ImGuiTextFilter_PassFilter(ImGuiTextFilter* self, const(char)* text, const(char)* text_end); +void ImGuiTextFilter_Build(ImGuiTextFilter* self); +void ImGuiTextFilter_Clear(ImGuiTextFilter* self); +bool ImGuiTextFilter_IsActive(ImGuiTextFilter* self); +ImGuiTextRange* ImGuiTextRange_ImGuiTextRange_Nil(); +void ImGuiTextRange_destroy(ImGuiTextRange* self); +ImGuiTextRange* ImGuiTextRange_ImGuiTextRange_Str(const(char)* _b, const(char)* _e); +bool ImGuiTextRange_empty(ImGuiTextRange* self); +void ImGuiTextRange_split(ImGuiTextRange* self, char separator, ImVector_ImGuiTextRange* out_); +ImGuiTextBuffer* ImGuiTextBuffer_ImGuiTextBuffer(); +void ImGuiTextBuffer_destroy(ImGuiTextBuffer* self); +const(char)* ImGuiTextBuffer_begin(ImGuiTextBuffer* self); +const(char)* ImGuiTextBuffer_end(ImGuiTextBuffer* self); +int ImGuiTextBuffer_size(ImGuiTextBuffer* self); +bool ImGuiTextBuffer_empty(ImGuiTextBuffer* self); +void ImGuiTextBuffer_clear(ImGuiTextBuffer* self); +void ImGuiTextBuffer_reserve(ImGuiTextBuffer* self, int capacity); +const(char)* ImGuiTextBuffer_c_str(ImGuiTextBuffer* self); +void ImGuiTextBuffer_append(ImGuiTextBuffer* self, const(char)* str, const(char)* str_end); +void ImGuiTextBuffer_appendfv(ImGuiTextBuffer* self, const(char)* fmt, va_list args); +ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Int(ImGuiID _key, int _val_i); +void ImGuiStoragePair_destroy(ImGuiStoragePair* self); +ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Float(ImGuiID _key, float _val_f); +ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Ptr(ImGuiID _key, void* _val_p); +void ImGuiStorage_Clear(ImGuiStorage* self); +int ImGuiStorage_GetInt(ImGuiStorage* self, ImGuiID key, int default_val); +void ImGuiStorage_SetInt(ImGuiStorage* self, ImGuiID key, int val); +bool ImGuiStorage_GetBool(ImGuiStorage* self, ImGuiID key, bool default_val); +void ImGuiStorage_SetBool(ImGuiStorage* self, ImGuiID key, bool val); +float ImGuiStorage_GetFloat(ImGuiStorage* self, ImGuiID key, float default_val); +void ImGuiStorage_SetFloat(ImGuiStorage* self, ImGuiID key, float val); +void* ImGuiStorage_GetVoidPtr(ImGuiStorage* self, ImGuiID key); +void ImGuiStorage_SetVoidPtr(ImGuiStorage* self, ImGuiID key, void* val); +int* ImGuiStorage_GetIntRef(ImGuiStorage* self, ImGuiID key, int default_val); +bool* ImGuiStorage_GetBoolRef(ImGuiStorage* self, ImGuiID key, bool default_val); +float* ImGuiStorage_GetFloatRef(ImGuiStorage* self, ImGuiID key, float default_val); +void** ImGuiStorage_GetVoidPtrRef(ImGuiStorage* self, ImGuiID key, void* default_val); +void ImGuiStorage_SetAllInt(ImGuiStorage* self, int val); +void ImGuiStorage_BuildSortByKey(ImGuiStorage* self); +ImGuiListClipper* ImGuiListClipper_ImGuiListClipper(); +void ImGuiListClipper_destroy(ImGuiListClipper* self); +void ImGuiListClipper_Begin(ImGuiListClipper* self, int items_count, float items_height); +void ImGuiListClipper_End(ImGuiListClipper* self); +bool ImGuiListClipper_Step(ImGuiListClipper* self); +void ImGuiListClipper_IncludeItemByIndex(ImGuiListClipper* self, int item_index); +void ImGuiListClipper_IncludeItemsByIndex(ImGuiListClipper* self, int item_begin, int item_end); +ImColor* ImColor_ImColor_Nil(); +void ImColor_destroy(ImColor* self); +ImColor* ImColor_ImColor_Float(float r, float g, float b, float a); +ImColor* ImColor_ImColor_Vec4(const ImVec4 col); +ImColor* ImColor_ImColor_Int(int r, int g, int b, int a); +ImColor* ImColor_ImColor_U32(ImU32 rgba); +void ImColor_SetHSV(ImColor* self, float h, float s, float v, float a); +void ImColor_HSV(ImColor* pOut, float h, float s, float v, float a); +ImDrawCmd* ImDrawCmd_ImDrawCmd(); +void ImDrawCmd_destroy(ImDrawCmd* self); +ImTextureID ImDrawCmd_GetTexID(ImDrawCmd* self); +ImDrawListSplitter* ImDrawListSplitter_ImDrawListSplitter(); +void ImDrawListSplitter_destroy(ImDrawListSplitter* self); +void ImDrawListSplitter_Clear(ImDrawListSplitter* self); +void ImDrawListSplitter_ClearFreeMemory(ImDrawListSplitter* self); +void ImDrawListSplitter_Split(ImDrawListSplitter* self, ImDrawList* draw_list, int count); +void ImDrawListSplitter_Merge(ImDrawListSplitter* self, ImDrawList* draw_list); +void ImDrawListSplitter_SetCurrentChannel(ImDrawListSplitter* self, + ImDrawList* draw_list, int channel_idx); +ImDrawList* ImDrawList_ImDrawList(ImDrawListSharedData* shared_data); +void ImDrawList_destroy(ImDrawList* self); +void ImDrawList_PushClipRect(ImDrawList* self, const ImVec2 clip_rect_min, + const ImVec2 clip_rect_max, bool intersect_with_current_clip_rect); +void ImDrawList_PushClipRectFullScreen(ImDrawList* self); +void ImDrawList_PopClipRect(ImDrawList* self); +void ImDrawList_PushTextureID(ImDrawList* self, ImTextureID texture_id); +void ImDrawList_PopTextureID(ImDrawList* self); +void ImDrawList_GetClipRectMin(ImVec2* pOut, ImDrawList* self); +void ImDrawList_GetClipRectMax(ImVec2* pOut, ImDrawList* self); +void ImDrawList_AddLine(ImDrawList* self, const ImVec2 p1, const ImVec2 p2, + ImU32 col, float thickness); +void ImDrawList_AddRect(ImDrawList* self, const ImVec2 p_min, const ImVec2 p_max, + ImU32 col, float rounding, ImDrawFlags flags, float thickness); +void ImDrawList_AddRectFilled(ImDrawList* self, const ImVec2 p_min, + const ImVec2 p_max, ImU32 col, float rounding, ImDrawFlags flags); +void ImDrawList_AddRectFilledMultiColor(ImDrawList* self, const ImVec2 p_min, const ImVec2 p_max, + ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); +void ImDrawList_AddQuad(ImDrawList* self, const ImVec2 p1, const ImVec2 p2, + const ImVec2 p3, const ImVec2 p4, ImU32 col, float thickness); +void ImDrawList_AddQuadFilled(ImDrawList* self, const ImVec2 p1, const ImVec2 p2, + const ImVec2 p3, const ImVec2 p4, ImU32 col); +void ImDrawList_AddTriangle(ImDrawList* self, const ImVec2 p1, const ImVec2 p2, + const ImVec2 p3, ImU32 col, float thickness); +void ImDrawList_AddTriangleFilled(ImDrawList* self, const ImVec2 p1, + const ImVec2 p2, const ImVec2 p3, ImU32 col); +void ImDrawList_AddCircle(ImDrawList* self, const ImVec2 center, float radius, + ImU32 col, int num_segments, float thickness); +void ImDrawList_AddCircleFilled(ImDrawList* self, const ImVec2 center, + float radius, ImU32 col, int num_segments); +void ImDrawList_AddNgon(ImDrawList* self, const ImVec2 center, float radius, + ImU32 col, int num_segments, float thickness); +void ImDrawList_AddNgonFilled(ImDrawList* self, const ImVec2 center, float radius, + ImU32 col, int num_segments); +void ImDrawList_AddText_Vec2(ImDrawList* self, const ImVec2 pos, ImU32 col, + const(char)* text_begin, const(char)* text_end); +void ImDrawList_AddText_FontPtr(ImDrawList* self, const(ImFont)* font, + float font_size, const ImVec2 pos, ImU32 col, const(char)* text_begin, + const(char)* text_end, float wrap_width, const(ImVec4)* cpu_fine_clip_rect); +void ImDrawList_AddPolyline(ImDrawList* self, const(ImVec2)* points, + int num_points, ImU32 col, ImDrawFlags flags, float thickness); +void ImDrawList_AddConvexPolyFilled(ImDrawList* self, const(ImVec2)* points, + int num_points, ImU32 col); +void ImDrawList_AddBezierCubic(ImDrawList* self, const ImVec2 p1, const ImVec2 p2, + const ImVec2 p3, const ImVec2 p4, ImU32 col, float thickness, int num_segments); +void ImDrawList_AddBezierQuadratic(ImDrawList* self, const ImVec2 p1, + const ImVec2 p2, const ImVec2 p3, ImU32 col, float thickness, int num_segments); +void ImDrawList_AddImage(ImDrawList* self, ImTextureID user_texture_id, + const ImVec2 p_min, const ImVec2 p_max, const ImVec2 uv_min, const ImVec2 uv_max, ImU32 col); +void ImDrawList_AddImageQuad(ImDrawList* self, ImTextureID user_texture_id, const ImVec2 p1, + const ImVec2 p2, const ImVec2 p3, const ImVec2 p4, const ImVec2 uv1, + const ImVec2 uv2, const ImVec2 uv3, const ImVec2 uv4, ImU32 col); +void ImDrawList_AddImageRounded(ImDrawList* self, ImTextureID user_texture_id, const ImVec2 p_min, const ImVec2 p_max, + const ImVec2 uv_min, const ImVec2 uv_max, ImU32 col, float rounding, ImDrawFlags flags); +void ImDrawList_PathClear(ImDrawList* self); +void ImDrawList_PathLineTo(ImDrawList* self, const ImVec2 pos); +void ImDrawList_PathLineToMergeDuplicate(ImDrawList* self, const ImVec2 pos); +void ImDrawList_PathFillConvex(ImDrawList* self, ImU32 col); +void ImDrawList_PathStroke(ImDrawList* self, ImU32 col, ImDrawFlags flags, float thickness); +void ImDrawList_PathArcTo(ImDrawList* self, const ImVec2 center, float radius, + float a_min, float a_max, int num_segments); +void ImDrawList_PathArcToFast(ImDrawList* self, const ImVec2 center, float radius, + int a_min_of_12, int a_max_of_12); +void ImDrawList_PathBezierCubicCurveTo(ImDrawList* self, const ImVec2 p2, + const ImVec2 p3, const ImVec2 p4, int num_segments); +void ImDrawList_PathBezierQuadraticCurveTo(ImDrawList* self, const ImVec2 p2, + const ImVec2 p3, int num_segments); +void ImDrawList_PathRect(ImDrawList* self, const ImVec2 rect_min, + const ImVec2 rect_max, float rounding, ImDrawFlags flags); +void ImDrawList_AddCallback(ImDrawList* self, ImDrawCallback callback, void* callback_data); +void ImDrawList_AddDrawCmd(ImDrawList* self); +ImDrawList* ImDrawList_CloneOutput(ImDrawList* self); +void ImDrawList_ChannelsSplit(ImDrawList* self, int count); +void ImDrawList_ChannelsMerge(ImDrawList* self); +void ImDrawList_ChannelsSetCurrent(ImDrawList* self, int n); +void ImDrawList_PrimReserve(ImDrawList* self, int idx_count, int vtx_count); +void ImDrawList_PrimUnreserve(ImDrawList* self, int idx_count, int vtx_count); +void ImDrawList_PrimRect(ImDrawList* self, const ImVec2 a, const ImVec2 b, ImU32 col); +void ImDrawList_PrimRectUV(ImDrawList* self, const ImVec2 a, const ImVec2 b, + const ImVec2 uv_a, const ImVec2 uv_b, ImU32 col); +void ImDrawList_PrimQuadUV(ImDrawList* self, const ImVec2 a, const ImVec2 b, + const ImVec2 c, const ImVec2 d, const ImVec2 uv_a, const ImVec2 uv_b, + const ImVec2 uv_c, const ImVec2 uv_d, ImU32 col); +void ImDrawList_PrimWriteVtx(ImDrawList* self, const ImVec2 pos, const ImVec2 uv, ImU32 col); +void ImDrawList_PrimWriteIdx(ImDrawList* self, ImDrawIdx idx); +void ImDrawList_PrimVtx(ImDrawList* self, const ImVec2 pos, const ImVec2 uv, ImU32 col); +void ImDrawList__ResetForNewFrame(ImDrawList* self); +void ImDrawList__ClearFreeMemory(ImDrawList* self); +void ImDrawList__PopUnusedDrawCmd(ImDrawList* self); +void ImDrawList__TryMergeDrawCmds(ImDrawList* self); +void ImDrawList__OnChangedClipRect(ImDrawList* self); +void ImDrawList__OnChangedTextureID(ImDrawList* self); +void ImDrawList__OnChangedVtxOffset(ImDrawList* self); +int ImDrawList__CalcCircleAutoSegmentCount(ImDrawList* self, float radius); +void ImDrawList__PathArcToFastEx(ImDrawList* self, const ImVec2 center, + float radius, int a_min_sample, int a_max_sample, int a_step); +void ImDrawList__PathArcToN(ImDrawList* self, const ImVec2 center, float radius, + float a_min, float a_max, int num_segments); +ImDrawData* ImDrawData_ImDrawData(); +void ImDrawData_destroy(ImDrawData* self); +void ImDrawData_Clear(ImDrawData* self); +void ImDrawData_AddDrawList(ImDrawData* self, ImDrawList* draw_list); +void ImDrawData_DeIndexAllBuffers(ImDrawData* self); +void ImDrawData_ScaleClipRects(ImDrawData* self, const ImVec2 fb_scale); +ImFontConfig* ImFontConfig_ImFontConfig(); +void ImFontConfig_destroy(ImFontConfig* self); +ImFontGlyphRangesBuilder* ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder(); +void ImFontGlyphRangesBuilder_destroy(ImFontGlyphRangesBuilder* self); +void ImFontGlyphRangesBuilder_Clear(ImFontGlyphRangesBuilder* self); +bool ImFontGlyphRangesBuilder_GetBit(ImFontGlyphRangesBuilder* self, size_t n); +void ImFontGlyphRangesBuilder_SetBit(ImFontGlyphRangesBuilder* self, size_t n); +void ImFontGlyphRangesBuilder_AddChar(ImFontGlyphRangesBuilder* self, ImWchar c); +void ImFontGlyphRangesBuilder_AddText(ImFontGlyphRangesBuilder* self, + const(char)* text, const(char)* text_end); +void ImFontGlyphRangesBuilder_AddRanges(ImFontGlyphRangesBuilder* self, const(ImWchar)* ranges); +void ImFontGlyphRangesBuilder_BuildRanges(ImFontGlyphRangesBuilder* self, + ImVector_ImWchar* out_ranges); +ImFontAtlasCustomRect* ImFontAtlasCustomRect_ImFontAtlasCustomRect(); +void ImFontAtlasCustomRect_destroy(ImFontAtlasCustomRect* self); +bool ImFontAtlasCustomRect_IsPacked(ImFontAtlasCustomRect* self); +ImFontAtlas* ImFontAtlas_ImFontAtlas(); +void ImFontAtlas_destroy(ImFontAtlas* self); +ImFont* ImFontAtlas_AddFont(ImFontAtlas* self, const(ImFontConfig)* font_cfg); +ImFont* ImFontAtlas_AddFontDefault(ImFontAtlas* self, const(ImFontConfig)* font_cfg); +ImFont* ImFontAtlas_AddFontFromFileTTF(ImFontAtlas* self, const(char)* filename, + float size_pixels, const(ImFontConfig)* font_cfg, const(ImWchar)* glyph_ranges); +ImFont* ImFontAtlas_AddFontFromMemoryTTF(ImFontAtlas* self, void* font_data, int font_size, + float size_pixels, const(ImFontConfig)* font_cfg, const(ImWchar)* glyph_ranges); +ImFont* ImFontAtlas_AddFontFromMemoryCompressedTTF(ImFontAtlas* self, + const(void)* compressed_font_data, int compressed_font_size, + float size_pixels, const(ImFontConfig)* font_cfg, const(ImWchar)* glyph_ranges); +ImFont* ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(ImFontAtlas* self, const(char)* compressed_font_data_base85, + float size_pixels, const(ImFontConfig)* font_cfg, const(ImWchar)* glyph_ranges); +void ImFontAtlas_ClearInputData(ImFontAtlas* self); +void ImFontAtlas_ClearTexData(ImFontAtlas* self); +void ImFontAtlas_ClearFonts(ImFontAtlas* self); +void ImFontAtlas_Clear(ImFontAtlas* self); +bool ImFontAtlas_Build(ImFontAtlas* self); +void ImFontAtlas_GetTexDataAsAlpha8(ImFontAtlas* self, ubyte** out_pixels, + int* out_width, int* out_height, int* out_bytes_per_pixel); +void ImFontAtlas_GetTexDataAsRGBA32(ImFontAtlas* self, ubyte** out_pixels, + int* out_width, int* out_height, int* out_bytes_per_pixel); +bool ImFontAtlas_IsBuilt(ImFontAtlas* self); +void ImFontAtlas_SetTexID(ImFontAtlas* self, ImTextureID id); +const(ImWchar)* ImFontAtlas_GetGlyphRangesDefault(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesGreek(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesKorean(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesJapanese(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesChineseFull(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesCyrillic(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesThai(ImFontAtlas* self); +const(ImWchar)* ImFontAtlas_GetGlyphRangesVietnamese(ImFontAtlas* self); +int ImFontAtlas_AddCustomRectRegular(ImFontAtlas* self, int width, int height); +int ImFontAtlas_AddCustomRectFontGlyph(ImFontAtlas* self, ImFont* font, + ImWchar id, int width, int height, float advance_x, const ImVec2 offset); +ImFontAtlasCustomRect* ImFontAtlas_GetCustomRectByIndex(ImFontAtlas* self, int index); +void ImFontAtlas_CalcCustomRectUV(ImFontAtlas* self, + const(ImFontAtlasCustomRect)* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); +bool ImFontAtlas_GetMouseCursorTexData(ImFontAtlas* self, ImGuiMouseCursor cursor, + ImVec2* out_offset, ImVec2* out_size, ref ImVec2[2] out_uv_border, ref ImVec2[2] out_uv_fill); +ImFont* ImFont_ImFont(); +void ImFont_destroy(ImFont* self); +const(ImFontGlyph)* ImFont_FindGlyph(ImFont* self, ImWchar c); +const(ImFontGlyph)* ImFont_FindGlyphNoFallback(ImFont* self, ImWchar c); +float ImFont_GetCharAdvance(ImFont* self, ImWchar c); +bool ImFont_IsLoaded(ImFont* self); +const(char)* ImFont_GetDebugName(ImFont* self); +void ImFont_CalcTextSizeA(ImVec2* pOut, ImFont* self, float size, float max_width, + float wrap_width, const(char)* text_begin, const(char)* text_end, + const(char*)* remaining); +const(char)* ImFont_CalcWordWrapPositionA(ImFont* self, float scale, + const(char)* text, const(char)* text_end, float wrap_width); +void ImFont_RenderChar(ImFont* self, ImDrawList* draw_list, float size, + const ImVec2 pos, ImU32 col, ImWchar c); +void ImFont_RenderText(ImFont* self, ImDrawList* draw_list, float size, + const ImVec2 pos, ImU32 col, const ImVec4 clip_rect, const(char)* text_begin, + const(char)* text_end, float wrap_width, bool cpu_fine_clip); +void ImFont_BuildLookupTable(ImFont* self); +void ImFont_ClearOutputData(ImFont* self); +void ImFont_GrowIndex(ImFont* self, int new_size); +void ImFont_AddGlyph(ImFont* self, const(ImFontConfig)* src_cfg, ImWchar c, + float x0, float y0, float x1, float y1, float u0, float v0, float u1, + float v1, float advance_x); +void ImFont_AddRemapChar(ImFont* self, ImWchar dst, ImWchar src, bool overwrite_dst); +void ImFont_SetGlyphVisible(ImFont* self, ImWchar c, bool visible); +bool ImFont_IsGlyphRangeUnused(ImFont* self, uint c_begin, uint c_last); +ImGuiViewport* ImGuiViewport_ImGuiViewport(); +void ImGuiViewport_destroy(ImGuiViewport* self); +void ImGuiViewport_GetCenter(ImVec2* pOut, ImGuiViewport* self); +void ImGuiViewport_GetWorkCenter(ImVec2* pOut, ImGuiViewport* self); +ImGuiPlatformImeData* ImGuiPlatformImeData_ImGuiPlatformImeData(); +void ImGuiPlatformImeData_destroy(ImGuiPlatformImeData* self); +ImGuiKey igGetKeyIndex(ImGuiKey key); +ImGuiID igImHashData(const(void)* data, size_t data_size, ImGuiID seed); +ImGuiID igImHashStr(const(char)* data, size_t data_size, ImGuiID seed); +void igImQsort(void* base, size_t count, size_t size_of_element, + int function(const(void)*, const(void)*) compare_func); +ImU32 igImAlphaBlendColors(ImU32 col_a, ImU32 col_b); +bool igImIsPowerOfTwo_Int(int v); +bool igImIsPowerOfTwo_U64(ImU64 v); +int igImUpperPowerOfTwo(int v); +int igImStricmp(const(char)* str1, const(char)* str2); +int igImStrnicmp(const(char)* str1, const(char)* str2, size_t count); +void igImStrncpy(char* dst, const(char)* src, size_t count); +char* igImStrdup(const(char)* str); +char* igImStrdupcpy(char* dst, size_t* p_dst_size, const(char)* str); +const(char)* igImStrchrRange(const(char)* str_begin, const(char)* str_end, char c); +int igImStrlenW(const(ImWchar)* str); +const(char)* igImStreolRange(const(char)* str, const(char)* str_end); +const(ImWchar)* igImStrbolW(const(ImWchar)* buf_mid_line, const(ImWchar)* buf_begin); +const(char)* igImStristr(const(char)* haystack, const(char)* haystack_end, + const(char)* needle, const(char)* needle_end); +void igImStrTrimBlanks(char* str); +const(char)* igImStrSkipBlank(const(char)* str); +char igImToUpper(char c); +bool igImCharIsBlankA(char c); +bool igImCharIsBlankW(uint c); +int igImFormatString(char* buf, size_t buf_size, const(char)* fmt, ...); +int igImFormatStringV(char* buf, size_t buf_size, const(char)* fmt, va_list args); +void igImFormatStringToTempBuffer(const(char*)* out_buf, + const(char*)* out_buf_end, const(char)* fmt, ...); +void igImFormatStringToTempBufferV(const(char*)* out_buf, + const(char*)* out_buf_end, const(char)* fmt, va_list args); +const(char)* igImParseFormatFindStart(const(char)* format); +const(char)* igImParseFormatFindEnd(const(char)* format); +const(char)* igImParseFormatTrimDecorations(const(char)* format, char* buf, size_t buf_size); +void igImParseFormatSanitizeForPrinting(const(char)* fmt_in, char* fmt_out, size_t fmt_out_size); +const(char)* igImParseFormatSanitizeForScanning(const(char)* fmt_in, + char* fmt_out, size_t fmt_out_size); +int igImParseFormatPrecision(const(char)* format, int default_value); +const(char)* igImTextCharToUtf8(ref char[5] out_buf, uint c); +int igImTextStrToUtf8(char* out_buf, int out_buf_size, const(ImWchar)* in_text, + const(ImWchar)* in_text_end); +int igImTextCharFromUtf8(uint* out_char, const(char)* in_text, const(char)* in_text_end); +int igImTextStrFromUtf8(ImWchar* out_buf, int out_buf_size, + const(char)* in_text, const(char)* in_text_end, const(char*)* in_remaining); +int igImTextCountCharsFromUtf8(const(char)* in_text, const(char)* in_text_end); +int igImTextCountUtf8BytesFromChar(const(char)* in_text, const(char)* in_text_end); +int igImTextCountUtf8BytesFromStr(const(ImWchar)* in_text, const(ImWchar)* in_text_end); +ImFileHandle igImFileOpen(const(char)* filename, const(char)* mode); +bool igImFileClose(ImFileHandle file); +ImU64 igImFileGetSize(ImFileHandle file); +ImU64 igImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file); +ImU64 igImFileWrite(const(void)* data, ImU64 size, ImU64 count, ImFileHandle file); +void* igImFileLoadToMemory(const(char)* filename, const(char)* mode, + size_t* out_file_size, int padding_bytes); +float igImPow_Float(float x, float y); +double igImPow_double(double x, double y); +float igImLog_Float(float x); +double igImLog_double(double x); +int igImAbs_Int(int x); +float igImAbs_Float(float x); +double igImAbs_double(double x); +float igImSign_Float(float x); +double igImSign_double(double x); +float igImRsqrt_Float(float x); +double igImRsqrt_double(double x); +void igImMin(ImVec2* pOut, const ImVec2 lhs, const ImVec2 rhs); +void igImMax(ImVec2* pOut, const ImVec2 lhs, const ImVec2 rhs); +void igImClamp(ImVec2* pOut, const ImVec2 v, const ImVec2 mn, ImVec2 mx); +void igImLerp_Vec2Float(ImVec2* pOut, const ImVec2 a, const ImVec2 b, float t); +void igImLerp_Vec2Vec2(ImVec2* pOut, const ImVec2 a, const ImVec2 b, const ImVec2 t); +void igImLerp_Vec4(ImVec4* pOut, const ImVec4 a, const ImVec4 b, float t); +float igImSaturate(float f); +float igImLengthSqr_Vec2(const ImVec2 lhs); +float igImLengthSqr_Vec4(const ImVec4 lhs); +float igImInvLength(const ImVec2 lhs, float fail_value); +float igImFloor_Float(float f); +float igImFloorSigned_Float(float f); +void igImFloor_Vec2(ImVec2* pOut, const ImVec2 v); +void igImFloorSigned_Vec2(ImVec2* pOut, const ImVec2 v); +int igImModPositive(int a, int b); +float igImDot(const ImVec2 a, const ImVec2 b); +void igImRotate(ImVec2* pOut, const ImVec2 v, float cos_a, float sin_a); +float igImLinearSweep(float current, float target, float speed); +void igImMul(ImVec2* pOut, const ImVec2 lhs, const ImVec2 rhs); +bool igImIsFloatAboveGuaranteedIntegerPrecision(float f); +float igImExponentialMovingAverage(float avg, float sample, int n); +void igImBezierCubicCalc(ImVec2* pOut, const ImVec2 p1, const ImVec2 p2, + const ImVec2 p3, const ImVec2 p4, float t); +void igImBezierCubicClosestPoint(ImVec2* pOut, const ImVec2 p1, const ImVec2 p2, + const ImVec2 p3, const ImVec2 p4, const ImVec2 p, int num_segments); +void igImBezierCubicClosestPointCasteljau(ImVec2* pOut, const ImVec2 p1, + const ImVec2 p2, const ImVec2 p3, const ImVec2 p4, const ImVec2 p, float tess_tol); +void igImBezierQuadraticCalc(ImVec2* pOut, const ImVec2 p1, const ImVec2 p2, const ImVec2 p3, + float t); +void igImLineClosestPoint(ImVec2* pOut, const ImVec2 a, const ImVec2 b, const ImVec2 p); +bool igImTriangleContainsPoint(const ImVec2 a, const ImVec2 b, const ImVec2 c, const ImVec2 p); +void igImTriangleClosestPoint(ImVec2* pOut, const ImVec2 a, const ImVec2 b, + const ImVec2 c, const ImVec2 p); +void igImTriangleBarycentricCoords(const ImVec2 a, const ImVec2 b, const ImVec2 c, + const ImVec2 p, float* out_u, float* out_v, float* out_w); +float igImTriangleArea(const ImVec2 a, const ImVec2 b, const ImVec2 c); +ImVec1* ImVec1_ImVec1_Nil(); +void ImVec1_destroy(ImVec1* self); +ImVec1* ImVec1_ImVec1_Float(float _x); +ImVec2ih* ImVec2ih_ImVec2ih_Nil(); +void ImVec2ih_destroy(ImVec2ih* self); +ImVec2ih* ImVec2ih_ImVec2ih_short(short _x, short _y); +ImVec2ih* ImVec2ih_ImVec2ih_Vec2(const ImVec2 rhs); +ImRect* ImRect_ImRect_Nil(); +void ImRect_destroy(ImRect* self); +ImRect* ImRect_ImRect_Vec2(const ImVec2 min, const ImVec2 max); +ImRect* ImRect_ImRect_Vec4(const ImVec4 v); +ImRect* ImRect_ImRect_Float(float x1, float y1, float x2, float y2); +void ImRect_GetCenter(ImVec2* pOut, ImRect* self); +void ImRect_GetSize(ImVec2* pOut, ImRect* self); +float ImRect_GetWidth(ImRect* self); +float ImRect_GetHeight(ImRect* self); +float ImRect_GetArea(ImRect* self); +void ImRect_GetTL(ImVec2* pOut, ImRect* self); +void ImRect_GetTR(ImVec2* pOut, ImRect* self); +void ImRect_GetBL(ImVec2* pOut, ImRect* self); +void ImRect_GetBR(ImVec2* pOut, ImRect* self); +bool ImRect_Contains_Vec2(ImRect* self, const ImVec2 p); +bool ImRect_Contains_Rect(ImRect* self, const ImRect r); +bool ImRect_Overlaps(ImRect* self, const ImRect r); +void ImRect_Add_Vec2(ImRect* self, const ImVec2 p); +void ImRect_Add_Rect(ImRect* self, const ImRect r); +void ImRect_Expand_Float(ImRect* self, const float amount); +void ImRect_Expand_Vec2(ImRect* self, const ImVec2 amount); +void ImRect_Translate(ImRect* self, const ImVec2 d); +void ImRect_TranslateX(ImRect* self, float dx); +void ImRect_TranslateY(ImRect* self, float dy); +void ImRect_ClipWith(ImRect* self, const ImRect r); +void ImRect_ClipWithFull(ImRect* self, const ImRect r); +void ImRect_Floor(ImRect* self); +bool ImRect_IsInverted(ImRect* self); +void ImRect_ToVec4(ImVec4* pOut, ImRect* self); +size_t igImBitArrayGetStorageSizeInBytes(int bitcount); +void igImBitArrayClearAllBits(ImU32* arr, int bitcount); +bool igImBitArrayTestBit(const(ImU32)* arr, int n); +void igImBitArrayClearBit(ImU32* arr, int n); +void igImBitArraySetBit(ImU32* arr, int n); +void igImBitArraySetBitRange(ImU32* arr, int n, int n2); +void ImBitVector_Create(ImBitVector* self, int sz); +void ImBitVector_Clear(ImBitVector* self); +bool ImBitVector_TestBit(ImBitVector* self, int n); +void ImBitVector_SetBit(ImBitVector* self, int n); +void ImBitVector_ClearBit(ImBitVector* self, int n); +void ImGuiTextIndex_clear(ImGuiTextIndex* self); +int ImGuiTextIndex_size(ImGuiTextIndex* self); +const(char)* ImGuiTextIndex_get_line_begin(ImGuiTextIndex* self, const(char)* base, int n); +const(char)* ImGuiTextIndex_get_line_end(ImGuiTextIndex* self, const(char)* base, int n); +void ImGuiTextIndex_append(ImGuiTextIndex* self, const(char)* base, int old_size, int new_size); +ImDrawListSharedData* ImDrawListSharedData_ImDrawListSharedData(); +void ImDrawListSharedData_destroy(ImDrawListSharedData* self); +void ImDrawListSharedData_SetCircleTessellationMaxError(ImDrawListSharedData* self, float max_error); +ImDrawDataBuilder* ImDrawDataBuilder_ImDrawDataBuilder(); +void ImDrawDataBuilder_destroy(ImDrawDataBuilder* self); +void* ImGuiDataVarInfo_GetVarPtr(ImGuiDataVarInfo* self, void* parent); +ImGuiStyleMod* ImGuiStyleMod_ImGuiStyleMod_Int(ImGuiStyleVar idx, int v); +void ImGuiStyleMod_destroy(ImGuiStyleMod* self); +ImGuiStyleMod* ImGuiStyleMod_ImGuiStyleMod_Float(ImGuiStyleVar idx, float v); +ImGuiStyleMod* ImGuiStyleMod_ImGuiStyleMod_Vec2(ImGuiStyleVar idx, ImVec2 v); +ImGuiComboPreviewData* ImGuiComboPreviewData_ImGuiComboPreviewData(); +void ImGuiComboPreviewData_destroy(ImGuiComboPreviewData* self); +ImGuiMenuColumns* ImGuiMenuColumns_ImGuiMenuColumns(); +void ImGuiMenuColumns_destroy(ImGuiMenuColumns* self); +void ImGuiMenuColumns_Update(ImGuiMenuColumns* self, float spacing, bool window_reappearing); +float ImGuiMenuColumns_DeclColumns(ImGuiMenuColumns* self, float w_icon, + float w_label, float w_shortcut, float w_mark); +void ImGuiMenuColumns_CalcNextTotalWidth(ImGuiMenuColumns* self, bool update_offsets); +ImGuiInputTextDeactivatedState* ImGuiInputTextDeactivatedState_ImGuiInputTextDeactivatedState(); +void ImGuiInputTextDeactivatedState_destroy(ImGuiInputTextDeactivatedState* self); +void ImGuiInputTextDeactivatedState_ClearFreeMemory(ImGuiInputTextDeactivatedState* self); +ImGuiInputTextState* ImGuiInputTextState_ImGuiInputTextState(); +void ImGuiInputTextState_destroy(ImGuiInputTextState* self); +void ImGuiInputTextState_ClearText(ImGuiInputTextState* self); +void ImGuiInputTextState_ClearFreeMemory(ImGuiInputTextState* self); +int ImGuiInputTextState_GetUndoAvailCount(ImGuiInputTextState* self); +int ImGuiInputTextState_GetRedoAvailCount(ImGuiInputTextState* self); +void ImGuiInputTextState_OnKeyPressed(ImGuiInputTextState* self, int key); +void ImGuiInputTextState_CursorAnimReset(ImGuiInputTextState* self); +void ImGuiInputTextState_CursorClamp(ImGuiInputTextState* self); +bool ImGuiInputTextState_HasSelection(ImGuiInputTextState* self); +void ImGuiInputTextState_ClearSelection(ImGuiInputTextState* self); +int ImGuiInputTextState_GetCursorPos(ImGuiInputTextState* self); +int ImGuiInputTextState_GetSelectionStart(ImGuiInputTextState* self); +int ImGuiInputTextState_GetSelectionEnd(ImGuiInputTextState* self); +void ImGuiInputTextState_SelectAll(ImGuiInputTextState* self); +ImGuiPopupData* ImGuiPopupData_ImGuiPopupData(); +void ImGuiPopupData_destroy(ImGuiPopupData* self); +ImGuiNextWindowData* ImGuiNextWindowData_ImGuiNextWindowData(); +void ImGuiNextWindowData_destroy(ImGuiNextWindowData* self); +void ImGuiNextWindowData_ClearFlags(ImGuiNextWindowData* self); +ImGuiNextItemData* ImGuiNextItemData_ImGuiNextItemData(); +void ImGuiNextItemData_destroy(ImGuiNextItemData* self); +void ImGuiNextItemData_ClearFlags(ImGuiNextItemData* self); +ImGuiLastItemData* ImGuiLastItemData_ImGuiLastItemData(); +void ImGuiLastItemData_destroy(ImGuiLastItemData* self); +ImGuiStackSizes* ImGuiStackSizes_ImGuiStackSizes(); +void ImGuiStackSizes_destroy(ImGuiStackSizes* self); +void ImGuiStackSizes_SetToContextState(ImGuiStackSizes* self, ImGuiContext* ctx); +void ImGuiStackSizes_CompareWithContextState(ImGuiStackSizes* self, ImGuiContext* ctx); +ImGuiPtrOrIndex* ImGuiPtrOrIndex_ImGuiPtrOrIndex_Ptr(void* ptr); +void ImGuiPtrOrIndex_destroy(ImGuiPtrOrIndex* self); +ImGuiPtrOrIndex* ImGuiPtrOrIndex_ImGuiPtrOrIndex_Int(int index); +ImGuiInputEvent* ImGuiInputEvent_ImGuiInputEvent(); +void ImGuiInputEvent_destroy(ImGuiInputEvent* self); +ImGuiKeyRoutingData* ImGuiKeyRoutingData_ImGuiKeyRoutingData(); +void ImGuiKeyRoutingData_destroy(ImGuiKeyRoutingData* self); +ImGuiKeyRoutingTable* ImGuiKeyRoutingTable_ImGuiKeyRoutingTable(); +void ImGuiKeyRoutingTable_destroy(ImGuiKeyRoutingTable* self); +void ImGuiKeyRoutingTable_Clear(ImGuiKeyRoutingTable* self); +ImGuiKeyOwnerData* ImGuiKeyOwnerData_ImGuiKeyOwnerData(); +void ImGuiKeyOwnerData_destroy(ImGuiKeyOwnerData* self); +ImGuiListClipperRange ImGuiListClipperRange_FromIndices(int min, int max); +ImGuiListClipperRange ImGuiListClipperRange_FromPositions(float y1, float y2, + int off_min, int off_max); +ImGuiListClipperData* ImGuiListClipperData_ImGuiListClipperData(); +void ImGuiListClipperData_destroy(ImGuiListClipperData* self); +void ImGuiListClipperData_Reset(ImGuiListClipperData* self, ImGuiListClipper* clipper); +ImGuiNavItemData* ImGuiNavItemData_ImGuiNavItemData(); +void ImGuiNavItemData_destroy(ImGuiNavItemData* self); +void ImGuiNavItemData_Clear(ImGuiNavItemData* self); +ImGuiOldColumnData* ImGuiOldColumnData_ImGuiOldColumnData(); +void ImGuiOldColumnData_destroy(ImGuiOldColumnData* self); +ImGuiOldColumns* ImGuiOldColumns_ImGuiOldColumns(); +void ImGuiOldColumns_destroy(ImGuiOldColumns* self); +ImGuiViewportP* ImGuiViewportP_ImGuiViewportP(); +void ImGuiViewportP_destroy(ImGuiViewportP* self); +void ImGuiViewportP_CalcWorkRectPos(ImVec2* pOut, ImGuiViewportP* self, const ImVec2 off_min); +void ImGuiViewportP_CalcWorkRectSize(ImVec2* pOut, ImGuiViewportP* self, + const ImVec2 off_min, const ImVec2 off_max); +void ImGuiViewportP_UpdateWorkRect(ImGuiViewportP* self); +void ImGuiViewportP_GetMainRect(ImRect* pOut, ImGuiViewportP* self); +void ImGuiViewportP_GetWorkRect(ImRect* pOut, ImGuiViewportP* self); +void ImGuiViewportP_GetBuildWorkRect(ImRect* pOut, ImGuiViewportP* self); +ImGuiWindowSettings* ImGuiWindowSettings_ImGuiWindowSettings(); +void ImGuiWindowSettings_destroy(ImGuiWindowSettings* self); +char* ImGuiWindowSettings_GetName(ImGuiWindowSettings* self); +ImGuiSettingsHandler* ImGuiSettingsHandler_ImGuiSettingsHandler(); +void ImGuiSettingsHandler_destroy(ImGuiSettingsHandler* self); +ImGuiStackLevelInfo* ImGuiStackLevelInfo_ImGuiStackLevelInfo(); +void ImGuiStackLevelInfo_destroy(ImGuiStackLevelInfo* self); +ImGuiStackTool* ImGuiStackTool_ImGuiStackTool(); +void ImGuiStackTool_destroy(ImGuiStackTool* self); +ImGuiContextHook* ImGuiContextHook_ImGuiContextHook(); +void ImGuiContextHook_destroy(ImGuiContextHook* self); +ImGuiContext* ImGuiContext_ImGuiContext(ImFontAtlas* shared_font_atlas); +void ImGuiContext_destroy(ImGuiContext* self); +ImGuiWindow* ImGuiWindow_ImGuiWindow(ImGuiContext* context, const(char)* name); +void ImGuiWindow_destroy(ImGuiWindow* self); +ImGuiID ImGuiWindow_GetID_Str(ImGuiWindow* self, const(char)* str, const(char)* str_end); +ImGuiID ImGuiWindow_GetID_Ptr(ImGuiWindow* self, const(void)* ptr); +ImGuiID ImGuiWindow_GetID_Int(ImGuiWindow* self, int n); +ImGuiID ImGuiWindow_GetIDFromRectangle(ImGuiWindow* self, const ImRect r_abs); +void ImGuiWindow_Rect(ImRect* pOut, ImGuiWindow* self); +float ImGuiWindow_CalcFontSize(ImGuiWindow* self); +float ImGuiWindow_TitleBarHeight(ImGuiWindow* self); +void ImGuiWindow_TitleBarRect(ImRect* pOut, ImGuiWindow* self); +float ImGuiWindow_MenuBarHeight(ImGuiWindow* self); +void ImGuiWindow_MenuBarRect(ImRect* pOut, ImGuiWindow* self); +ImGuiTabItem* ImGuiTabItem_ImGuiTabItem(); +void ImGuiTabItem_destroy(ImGuiTabItem* self); +ImGuiTabBar* ImGuiTabBar_ImGuiTabBar(); +void ImGuiTabBar_destroy(ImGuiTabBar* self); +ImGuiTableColumn* ImGuiTableColumn_ImGuiTableColumn(); +void ImGuiTableColumn_destroy(ImGuiTableColumn* self); +ImGuiTableInstanceData* ImGuiTableInstanceData_ImGuiTableInstanceData(); +void ImGuiTableInstanceData_destroy(ImGuiTableInstanceData* self); +ImGuiTable* ImGuiTable_ImGuiTable(); +void ImGuiTable_destroy(ImGuiTable* self); +ImGuiTableTempData* ImGuiTableTempData_ImGuiTableTempData(); +void ImGuiTableTempData_destroy(ImGuiTableTempData* self); +ImGuiTableColumnSettings* ImGuiTableColumnSettings_ImGuiTableColumnSettings(); +void ImGuiTableColumnSettings_destroy(ImGuiTableColumnSettings* self); +ImGuiTableSettings* ImGuiTableSettings_ImGuiTableSettings(); +void ImGuiTableSettings_destroy(ImGuiTableSettings* self); +ImGuiTableColumnSettings* ImGuiTableSettings_GetColumnSettings(ImGuiTableSettings* self); +ImGuiWindow* igGetCurrentWindowRead(); +ImGuiWindow* igGetCurrentWindow(); +ImGuiWindow* igFindWindowByID(ImGuiID id); +ImGuiWindow* igFindWindowByName(const(char)* name); +void igUpdateWindowParentAndRootLinks(ImGuiWindow* window, + ImGuiWindowFlags flags, ImGuiWindow* parent_window); +void igCalcWindowNextAutoFitSize(ImVec2* pOut, ImGuiWindow* window); +bool igIsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy); +bool igIsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent); +bool igIsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below); +bool igIsWindowNavFocusable(ImGuiWindow* window); +void igSetWindowPos_WindowPtr(ImGuiWindow* window, const ImVec2 pos, ImGuiCond cond); +void igSetWindowSize_WindowPtr(ImGuiWindow* window, const ImVec2 size, ImGuiCond cond); +void igSetWindowCollapsed_WindowPtr(ImGuiWindow* window, bool collapsed, ImGuiCond cond); +void igSetWindowHitTestHole(ImGuiWindow* window, const ImVec2 pos, const ImVec2 size); +void igSetWindowHiddendAndSkipItemsForCurrentFrame(ImGuiWindow* window); +void igWindowRectAbsToRel(ImRect* pOut, ImGuiWindow* window, const ImRect r); +void igWindowRectRelToAbs(ImRect* pOut, ImGuiWindow* window, const ImRect r); +void igWindowPosRelToAbs(ImVec2* pOut, ImGuiWindow* window, const ImVec2 p); +void igFocusWindow(ImGuiWindow* window, ImGuiFocusRequestFlags flags); +void igFocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, + ImGuiWindow* ignore_window, ImGuiViewport* filter_viewport, ImGuiFocusRequestFlags flags); +void igBringWindowToFocusFront(ImGuiWindow* window); +void igBringWindowToDisplayFront(ImGuiWindow* window); +void igBringWindowToDisplayBack(ImGuiWindow* window); +void igBringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* above_window); +int igFindWindowDisplayIndex(ImGuiWindow* window); +ImGuiWindow* igFindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow* window); +void igSetCurrentFont(ImFont* font); +ImFont* igGetDefaultFont(); +ImDrawList* igGetForegroundDrawList_WindowPtr(ImGuiWindow* window); +ImDrawList* igGetBackgroundDrawList_ViewportPtr(ImGuiViewport* viewport); +ImDrawList* igGetForegroundDrawList_ViewportPtr(ImGuiViewport* viewport); +void igAddDrawListToDrawDataEx(ImDrawData* draw_data, + ImVector_ImDrawListPtr* out_list, ImDrawList* draw_list); +void igInitialize(); +void igShutdown(); +void igUpdateInputEvents(bool trickle_fast_inputs); +void igUpdateHoveredWindowAndCaptureFlags(); +void igStartMouseMovingWindow(ImGuiWindow* window); +void igUpdateMouseMovingWindowNewFrame(); +void igUpdateMouseMovingWindowEndFrame(); +ImGuiID igAddContextHook(ImGuiContext* context, const(ImGuiContextHook)* hook); +void igRemoveContextHook(ImGuiContext* context, ImGuiID hook_to_remove); +void igCallContextHooks(ImGuiContext* context, ImGuiContextHookType type); +void igSetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport); +void igMarkIniSettingsDirty_Nil(); +void igMarkIniSettingsDirty_WindowPtr(ImGuiWindow* window); +void igClearIniSettings(); +void igAddSettingsHandler(const(ImGuiSettingsHandler)* handler); +void igRemoveSettingsHandler(const(char)* type_name); +ImGuiSettingsHandler* igFindSettingsHandler(const(char)* type_name); +ImGuiWindowSettings* igCreateNewWindowSettings(const(char)* name); +ImGuiWindowSettings* igFindWindowSettingsByID(ImGuiID id); +ImGuiWindowSettings* igFindWindowSettingsByWindow(ImGuiWindow* window); +void igClearWindowSettings(const(char)* name); +void igLocalizeRegisterEntries(const(ImGuiLocEntry)* entries, int count); +const(char)* igLocalizeGetMsg(ImGuiLocKey key); +void igSetScrollX_WindowPtr(ImGuiWindow* window, float scroll_x); +void igSetScrollY_WindowPtr(ImGuiWindow* window, float scroll_y); +void igSetScrollFromPosX_WindowPtr(ImGuiWindow* window, float local_x, float center_x_ratio); +void igSetScrollFromPosY_WindowPtr(ImGuiWindow* window, float local_y, float center_y_ratio); +void igScrollToItem(ImGuiScrollFlags flags); +void igScrollToRect(ImGuiWindow* window, const ImRect rect, ImGuiScrollFlags flags); +void igScrollToRectEx(ImVec2* pOut, ImGuiWindow* window, const ImRect rect, ImGuiScrollFlags flags); +void igScrollToBringRectIntoView(ImGuiWindow* window, const ImRect rect); +ImGuiItemStatusFlags igGetItemStatusFlags(); +ImGuiItemFlags igGetItemFlags(); +ImGuiID igGetActiveID(); +ImGuiID igGetFocusID(); +void igSetActiveID(ImGuiID id, ImGuiWindow* window); +void igSetFocusID(ImGuiID id, ImGuiWindow* window); +void igClearActiveID(); +ImGuiID igGetHoveredID(); +void igSetHoveredID(ImGuiID id); +void igKeepAliveID(ImGuiID id); +void igMarkItemEdited(ImGuiID id); +void igPushOverrideID(ImGuiID id); +ImGuiID igGetIDWithSeed_Str(const(char)* str_id_begin, const(char)* str_id_end, ImGuiID seed); +ImGuiID igGetIDWithSeed_Int(int n, ImGuiID seed); +void igItemSize_Vec2(const ImVec2 size, float text_baseline_y); +void igItemSize_Rect(const ImRect bb, float text_baseline_y); +bool igItemAdd(const ImRect bb, ImGuiID id, const(ImRect)* nav_bb, ImGuiItemFlags extra_flags); +bool igItemHoverable(const ImRect bb, ImGuiID id, ImGuiItemFlags item_flags); +bool igIsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags); +bool igIsClippedEx(const ImRect bb, ImGuiID id); +void igSetLastItemData(ImGuiID item_id, ImGuiItemFlags in_flags, + ImGuiItemStatusFlags status_flags, const ImRect item_rect); +void igCalcItemSize(ImVec2* pOut, ImVec2 size, float default_w, float default_h); +float igCalcWrapWidthForPos(const ImVec2 pos, float wrap_pos_x); +void igPushMultiItemsWidths(int components, float width_full); +bool igIsItemToggledSelection(); +void igGetContentRegionMaxAbs(ImVec2* pOut); +void igShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess); +void igPushItemFlag(ImGuiItemFlags option, bool enabled); +void igPopItemFlag(); +const(ImGuiDataVarInfo)* igGetStyleVarInfo(ImGuiStyleVar idx); +void igLogBegin(ImGuiLogType type, int auto_open_depth); +void igLogToBuffer(int auto_open_depth); +void igLogRenderedText(const(ImVec2)* ref_pos, const(char)* text, const(char)* text_end); +void igLogSetNextTextDecoration(const(char)* prefix, const(char)* suffix); +bool igBeginChildEx(const(char)* name, ImGuiID id, const ImVec2 size_arg, + bool border, ImGuiWindowFlags flags); +void igOpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags); +void igClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup); +void igClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup); +void igClosePopupsExceptModals(); +bool igIsPopupOpen_ID(ImGuiID id, ImGuiPopupFlags popup_flags); +bool igBeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags); +bool igBeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags); +void igGetPopupAllowedExtentRect(ImRect* pOut, ImGuiWindow* window); +ImGuiWindow* igGetTopMostPopupModal(); +ImGuiWindow* igGetTopMostAndVisiblePopupModal(); +ImGuiWindow* igFindBlockingModal(ImGuiWindow* window); +void igFindBestWindowPosForPopup(ImVec2* pOut, ImGuiWindow* window); +void igFindBestWindowPosForPopupEx(ImVec2* pOut, const ImVec2 ref_pos, const ImVec2 size, + ImGuiDir* last_dir, const ImRect r_outer, const ImRect r_avoid, + ImGuiPopupPositionPolicy policy); +bool igBeginViewportSideBar(const(char)* name, ImGuiViewport* viewport, + ImGuiDir dir, float size, ImGuiWindowFlags window_flags); +bool igBeginMenuEx(const(char)* label, const(char)* icon, bool enabled); +bool igMenuItemEx(const(char)* label, const(char)* icon, const(char)* shortcut, + bool selected, bool enabled); +bool igBeginComboPopup(ImGuiID popup_id, const ImRect bb, ImGuiComboFlags flags); +bool igBeginComboPreview(); +void igEndComboPreview(); +void igNavInitWindow(ImGuiWindow* window, bool force_reinit); +void igNavInitRequestApplyResult(); +bool igNavMoveRequestButNoResultYet(); +void igNavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, + ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags); +void igNavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, + ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags); +void igNavMoveRequestResolveWithLastItem(ImGuiNavItemData* result); +void igNavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, + ImGuiNavTreeNodeData* tree_node_data); +void igNavMoveRequestCancel(); +void igNavMoveRequestApplyResult(); +void igNavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags); +void igNavClearPreferredPosForAxis(ImGuiAxis axis); +void igNavUpdateCurrentWindowIsScrollPushableX(); +void igSetNavWindow(ImGuiWindow* window); +void igSetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect rect_rel); +void igFocusItem(); +void igActivateItemByID(ImGuiID id); +bool igIsNamedKey(ImGuiKey key); +bool igIsNamedKeyOrModKey(ImGuiKey key); +bool igIsLegacyKey(ImGuiKey key); +bool igIsKeyboardKey(ImGuiKey key); +bool igIsGamepadKey(ImGuiKey key); +bool igIsMouseKey(ImGuiKey key); +bool igIsAliasKey(ImGuiKey key); +ImGuiKeyChord igConvertShortcutMod(ImGuiKeyChord key_chord); +ImGuiKey igConvertSingleModFlagToKey(ImGuiContext* ctx, ImGuiKey key); +ImGuiKeyData* igGetKeyData_ContextPtr(ImGuiContext* ctx, ImGuiKey key); +ImGuiKeyData* igGetKeyData_Key(ImGuiKey key); +void igGetKeyChordName(ImGuiKeyChord key_chord, char* out_buf, int out_buf_size); +ImGuiKey igMouseButtonToKey(ImGuiMouseButton button); +bool igIsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold); +void igGetKeyMagnitude2d(ImVec2* pOut, ImGuiKey key_left, ImGuiKey key_right, + ImGuiKey key_up, ImGuiKey key_down); +float igGetNavTweakPressedAmount(ImGuiAxis axis); +int igCalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate); +void igGetTypematicRepeatRate(ImGuiInputFlags flags, float* repeat_delay, float* repeat_rate); +void igSetActiveIdUsingAllKeyboardKeys(); +bool igIsActiveIdUsingNavDir(ImGuiDir dir); +ImGuiID igGetKeyOwner(ImGuiKey key); +void igSetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags); +void igSetKeyOwnersForKeyChord(ImGuiKeyChord key, ImGuiID owner_id, ImGuiInputFlags flags); +void igSetItemKeyOwner(ImGuiKey key, ImGuiInputFlags flags); +bool igTestKeyOwner(ImGuiKey key, ImGuiID owner_id); +ImGuiKeyOwnerData* igGetKeyOwnerData(ImGuiContext* ctx, ImGuiKey key); +bool igIsKeyDown_ID(ImGuiKey key, ImGuiID owner_id); +bool igIsKeyPressed_ID(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags); +bool igIsKeyReleased_ID(ImGuiKey key, ImGuiID owner_id); +bool igIsMouseDown_ID(ImGuiMouseButton button, ImGuiID owner_id); +bool igIsMouseClicked_ID(ImGuiMouseButton button, ImGuiID owner_id, ImGuiInputFlags flags); +bool igIsMouseReleased_ID(ImGuiMouseButton button, ImGuiID owner_id); +bool igShortcut(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags flags); +bool igSetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiInputFlags flags); +bool igTestShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id); +ImGuiKeyRoutingData* igGetShortcutRoutingData(ImGuiKeyChord key_chord); +void igPushFocusScope(ImGuiID id); +void igPopFocusScope(); +ImGuiID igGetCurrentFocusScope(); +bool igIsDragDropActive(); +bool igBeginDragDropTargetCustom(const ImRect bb, ImGuiID id); +void igClearDragDrop(); +bool igIsDragDropPayloadBeingAccepted(); +void igRenderDragDropTargetRect(const ImRect bb); +void igSetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect clip_rect); +void igBeginColumns(const(char)* str_id, int count, ImGuiOldColumnFlags flags); +void igEndColumns(); +void igPushColumnClipRect(int column_index); +void igPushColumnsBackground(); +void igPopColumnsBackground(); +ImGuiID igGetColumnsID(const(char)* str_id, int count); +ImGuiOldColumns* igFindOrCreateColumns(ImGuiWindow* window, ImGuiID id); +float igGetColumnOffsetFromNorm(const(ImGuiOldColumns)* columns, float offset_norm); +float igGetColumnNormFromOffset(const(ImGuiOldColumns)* columns, float offset); +void igTableOpenContextMenu(int column_n); +void igTableSetColumnWidth(int column_n, float width); +void igTableSetColumnSortDirection(int column_n, + ImGuiSortDirection sort_direction, bool append_to_sort_specs); +int igTableGetHoveredColumn(); +int igTableGetHoveredRow(); +float igTableGetHeaderRowHeight(); +void igTablePushBackgroundChannel(); +void igTablePopBackgroundChannel(); +ImGuiTable* igGetCurrentTable(); +ImGuiTable* igTableFindByID(ImGuiID id); +bool igBeginTableEx(const(char)* name, ImGuiID id, int columns_count, + ImGuiTableFlags flags, const ImVec2 outer_size, float inner_width); +void igTableBeginInitMemory(ImGuiTable* table, int columns_count); +void igTableBeginApplyRequests(ImGuiTable* table); +void igTableSetupDrawChannels(ImGuiTable* table); +void igTableUpdateLayout(ImGuiTable* table); +void igTableUpdateBorders(ImGuiTable* table); +void igTableUpdateColumnsWeightFromWidth(ImGuiTable* table); +void igTableDrawBorders(ImGuiTable* table); +void igTableDrawContextMenu(ImGuiTable* table); +bool igTableBeginContextMenuPopup(ImGuiTable* table); +void igTableMergeDrawChannels(ImGuiTable* table); +ImGuiTableInstanceData* igTableGetInstanceData(ImGuiTable* table, int instance_no); +ImGuiID igTableGetInstanceID(ImGuiTable* table, int instance_no); +void igTableSortSpecsSanitize(ImGuiTable* table); +void igTableSortSpecsBuild(ImGuiTable* table); +ImGuiSortDirection igTableGetColumnNextSortDirection(ImGuiTableColumn* column); +void igTableFixColumnSortDirection(ImGuiTable* table, ImGuiTableColumn* column); +float igTableGetColumnWidthAuto(ImGuiTable* table, ImGuiTableColumn* column); +void igTableBeginRow(ImGuiTable* table); +void igTableEndRow(ImGuiTable* table); +void igTableBeginCell(ImGuiTable* table, int column_n); +void igTableEndCell(ImGuiTable* table); +void igTableGetCellBgRect(ImRect* pOut, const(ImGuiTable)* table, int column_n); +const(char)* igTableGetColumnName_TablePtr(const(ImGuiTable)* table, int column_n); +ImGuiID igTableGetColumnResizeID(ImGuiTable* table, int column_n, int instance_no); +float igTableGetMaxColumnWidth(const(ImGuiTable)* table, int column_n); +void igTableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n); +void igTableSetColumnWidthAutoAll(ImGuiTable* table); +void igTableRemove(ImGuiTable* table); +void igTableGcCompactTransientBuffers_TablePtr(ImGuiTable* table); +void igTableGcCompactTransientBuffers_TableTempDataPtr(ImGuiTableTempData* table); +void igTableGcCompactSettings(); +void igTableLoadSettings(ImGuiTable* table); +void igTableSaveSettings(ImGuiTable* table); +void igTableResetSettings(ImGuiTable* table); +ImGuiTableSettings* igTableGetBoundSettings(ImGuiTable* table); +void igTableSettingsAddSettingsHandler(); +ImGuiTableSettings* igTableSettingsCreate(ImGuiID id, int columns_count); +ImGuiTableSettings* igTableSettingsFindByID(ImGuiID id); +ImGuiTabBar* igGetCurrentTabBar(); +bool igBeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect bb, ImGuiTabBarFlags flags); +ImGuiTabItem* igTabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id); +ImGuiTabItem* igTabBarFindTabByOrder(ImGuiTabBar* tab_bar, int order); +ImGuiTabItem* igTabBarGetCurrentTab(ImGuiTabBar* tab_bar); +int igTabBarGetTabOrder(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); +const(char)* igTabBarGetTabName(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); +void igTabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id); +void igTabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); +void igTabBarQueueFocus(ImGuiTabBar* tab_bar, ImGuiTabItem* tab); +void igTabBarQueueReorder(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, int offset); +void igTabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImVec2 mouse_pos); +bool igTabBarProcessReorder(ImGuiTabBar* tab_bar); +bool igTabItemEx(ImGuiTabBar* tab_bar, const(char)* label, bool* p_open, + ImGuiTabItemFlags flags, ImGuiWindow* docked_window); +void igTabItemCalcSize_Str(ImVec2* pOut, const(char)* label, + bool has_close_button_or_unsaved_marker); +void igTabItemCalcSize_WindowPtr(ImVec2* pOut, ImGuiWindow* window); +void igTabItemBackground(ImDrawList* draw_list, const ImRect bb, ImGuiTabItemFlags flags, ImU32 col); +void igTabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, + const(char)* label, ImGuiID tab_id, ImGuiID close_button_id, + bool is_contents_visible, bool* out_just_closed, bool* out_text_clipped); +void igRenderText(ImVec2 pos, const(char)* text, const(char)* text_end, bool hide_text_after_hash); +void igRenderTextWrapped(ImVec2 pos, const(char)* text, const(char)* text_end, float wrap_width); +void igRenderTextClipped(const ImVec2 pos_min, const ImVec2 pos_max, const(char)* text, + const(char)* text_end, const(ImVec2)* text_size_if_known, + const ImVec2 align_, const(ImRect)* clip_rect); +void igRenderTextClippedEx(ImDrawList* draw_list, const ImVec2 pos_min, + const ImVec2 pos_max, const(char)* text, const(char)* text_end, + const(ImVec2)* text_size_if_known, const ImVec2 align_, const(ImRect)* clip_rect); +void igRenderTextEllipsis(ImDrawList* draw_list, const ImVec2 pos_min, const ImVec2 pos_max, + float clip_max_x, float ellipsis_max_x, const(char)* text, + const(char)* text_end, const(ImVec2)* text_size_if_known); +void igRenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding); +void igRenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding); +void igRenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, + ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding, ImDrawFlags flags); +void igRenderNavHighlight(const ImRect bb, ImGuiID id, ImGuiNavHighlightFlags flags); +const(char)* igFindRenderedTextEnd(const(char)* text, const(char)* text_end); +void igRenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, + ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); +void igRenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale); +void igRenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col); +void igRenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz); +void igRenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, + ImGuiDir direction, ImU32 col); +void igRenderRectFilledRangeH(ImDrawList* draw_list, const ImRect rect, ImU32 col, + float x_start_norm, float x_end_norm, float rounding); +void igRenderRectFilledWithHole(ImDrawList* draw_list, const ImRect outer, + const ImRect inner, ImU32 col, float rounding); +void igTextEx(const(char)* text, const(char)* text_end, ImGuiTextFlags flags); +bool igButtonEx(const(char)* label, const ImVec2 size_arg, ImGuiButtonFlags flags); +bool igArrowButtonEx(const(char)* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags); +bool igImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2 size, const ImVec2 uv0, + const ImVec2 uv1, const ImVec4 bg_col, const ImVec4 tint_col, ImGuiButtonFlags flags); +void igSeparatorEx(ImGuiSeparatorFlags flags, float thickness); +void igSeparatorTextEx(ImGuiID id, const(char)* label, const(char)* label_end, float extra_width); +bool igCheckboxFlags_S64Ptr(const(char)* label, ImS64* flags, ImS64 flags_value); +bool igCheckboxFlags_U64Ptr(const(char)* label, ImU64* flags, ImU64 flags_value); +bool igCloseButton(ImGuiID id, const ImVec2 pos); +bool igCollapseButton(ImGuiID id, const ImVec2 pos); +void igScrollbar(ImGuiAxis axis); +bool igScrollbarEx(const ImRect bb, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, + ImS64 avail_v, ImS64 contents_v, ImDrawFlags flags); +void igGetWindowScrollbarRect(ImRect* pOut, ImGuiWindow* window, ImGuiAxis axis); +ImGuiID igGetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis); +ImGuiID igGetWindowResizeCornerID(ImGuiWindow* window, int n); +ImGuiID igGetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir); +bool igButtonBehavior(const ImRect bb, ImGuiID id, bool* out_hovered, + bool* out_held, ImGuiButtonFlags flags); +bool igDragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, + const(void)* p_min, const(void)* p_max, const(char)* format, ImGuiSliderFlags flags); +bool igSliderBehavior(const ImRect bb, ImGuiID id, ImGuiDataType data_type, + void* p_v, const(void)* p_min, const(void)* p_max, const(char)* format, + ImGuiSliderFlags flags, ImRect* out_grab_bb); +bool igSplitterBehavior(const ImRect bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, + float min_size1, float min_size2, float hover_extend, + float hover_visibility_delay, ImU32 bg_col); +bool igTreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const(char)* label, + const(char)* label_end); +void igTreePushOverrideID(ImGuiID id); +void igTreeNodeSetOpen(ImGuiID id, bool open); +bool igTreeNodeUpdateNextOpen(ImGuiID id, ImGuiTreeNodeFlags flags); +const(ImGuiDataTypeInfo)* igDataTypeGetInfo(ImGuiDataType data_type); +int igDataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, + const(void)* p_data, const(char)* format); +void igDataTypeApplyOp(ImGuiDataType data_type, int op, void* output, + const(void)* arg_1, const(void)* arg_2); +bool igDataTypeApplyFromText(const(char)* buf, ImGuiDataType data_type, + void* p_data, const(char)* format); +int igDataTypeCompare(ImGuiDataType data_type, const(void)* arg_1, const(void)* arg_2); +bool igDataTypeClamp(ImGuiDataType data_type, void* p_data, + const(void)* p_min, const(void)* p_max); +bool igInputTextEx(const(char)* label, const(char)* hint, char* buf, int buf_size, + const ImVec2 size_arg, ImGuiInputTextFlags flags, + ImGuiInputTextCallback callback, void* user_data); +void igInputTextDeactivateHook(ImGuiID id); +bool igTempInputText(const ImRect bb, ImGuiID id, const(char)* label, char* buf, + int buf_size, ImGuiInputTextFlags flags); +bool igTempInputScalar(const ImRect bb, ImGuiID id, const(char)* label, + ImGuiDataType data_type, void* p_data, const(char)* format, + const(void)* p_clamp_min, const(void)* p_clamp_max); +bool igTempInputIsActive(ImGuiID id); +ImGuiInputTextState* igGetInputTextState(ImGuiID id); +void igColorTooltip(const(char)* text, const(float)* col, ImGuiColorEditFlags flags); +void igColorEditOptionsPopup(const(float)* col, ImGuiColorEditFlags flags); +void igColorPickerOptionsPopup(const(float)* ref_col, ImGuiColorEditFlags flags); +int igPlotEx(ImGuiPlotType plot_type, const(char)* label, float function(void* data, + int idx) values_getter, void* data, int values_count, int values_offset, + const(char)* overlay_text, float scale_min, float scale_max, const ImVec2 size_arg); +void igShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, + int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1); +void igShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, + const ImVec2 a, const ImVec2 b, const ImVec2 uv_a, const ImVec2 uv_b, bool clamp); +void igGcCompactTransientMiscBuffers(); +void igGcCompactTransientWindowBuffers(ImGuiWindow* window); +void igGcAwakeTransientWindowBuffers(ImGuiWindow* window); +void igDebugLog(const(char)* fmt, ...); +void igDebugLogV(const(char)* fmt, va_list args); +void igErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data); +void igErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data); +void igErrorCheckUsingSetCursorPosToExtendParentBoundaries(); +void igDebugDrawCursorPos(ImU32 col); +void igDebugDrawLineExtents(ImU32 col); +void igDebugDrawItemRect(ImU32 col); +void igDebugLocateItem(ImGuiID target_id); +void igDebugLocateItemOnHover(ImGuiID target_id); +void igDebugLocateItemResolveWithLastItem(); +void igDebugStartItemPicker(); +void igShowFontAtlas(ImFontAtlas* atlas); +void igDebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const(void)* data_id, + const(void)* data_id_end); +void igDebugNodeColumns(ImGuiOldColumns* columns); +void igDebugNodeDrawList(ImGuiWindow* window, ImGuiViewportP* viewport, + const(ImDrawList)* draw_list, const(char)* label); +void igDebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, + const(ImDrawList)* draw_list, const(ImDrawCmd)* draw_cmd, bool show_mesh, bool show_aabb); +void igDebugNodeFont(ImFont* font); +void igDebugNodeFontGlyph(ImFont* font, const(ImFontGlyph)* glyph); +void igDebugNodeStorage(ImGuiStorage* storage, const(char)* label); +void igDebugNodeTabBar(ImGuiTabBar* tab_bar, const(char)* label); +void igDebugNodeTable(ImGuiTable* table); +void igDebugNodeTableSettings(ImGuiTableSettings* settings); +void igDebugNodeInputTextState(ImGuiInputTextState* state); +void igDebugNodeWindow(ImGuiWindow* window, const(char)* label); +void igDebugNodeWindowSettings(ImGuiWindowSettings* settings); +void igDebugNodeWindowsList(ImVector_ImGuiWindowPtr* windows, const(char)* label); +void igDebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, + int windows_size, ImGuiWindow* parent_in_begin_stack); +void igDebugNodeViewport(ImGuiViewportP* viewport); +void igDebugRenderKeyboardPreview(ImDrawList* draw_list); +void igDebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect bb); +bool igIsKeyPressedMap(ImGuiKey key, bool repeat); +const(ImFontBuilderIO)* igImFontAtlasGetBuilderForStbTruetype(); +void igImFontAtlasBuildInit(ImFontAtlas* atlas); +void igImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, + ImFontConfig* font_config, float ascent, float descent); +void igImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque); +void igImFontAtlasBuildFinish(ImFontAtlas* atlas); +void igImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x, int y, + int w, int h, const(char)* in_str, char in_marker_char, ubyte in_marker_pixel_value); +void igImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x, int y, + int w, int h, const(char)* in_str, char in_marker_char, uint in_marker_pixel_value); +void igImFontAtlasBuildMultiplyCalcLookupTable(ref ubyte[256] out_table, float in_multiply_factor); +void igImFontAtlasBuildMultiplyRectAlpha8(ref const(ubyte)[256] table, + ubyte* pixels, int x, int y, int w, int h, int stride); +void igLogText(const(char)* fmt, ...); +void ImGuiTextBuffer_appendf(ImGuiTextBuffer* buffer, const(char)* fmt, ...); +float igGET_FLT_MAX(); +float igGET_FLT_MIN(); +ImVector_ImWchar* ImVector_ImWchar_create(); +void ImVector_ImWchar_destroy(ImVector_ImWchar* self); +void ImVector_ImWchar_Init(ImVector_ImWchar* p); +void ImVector_ImWchar_UnInit(ImVector_ImWchar* p); +enum SIMGUI_INVALID_ID = 0; +struct simgui_image_t +{ + uint id; +} + +struct simgui_image_desc_t +{ + sg.Image image; + sg.Sampler sampler; +} + +enum simgui_log_item_t +{ + SIMGUI_LOGITEM_OK = 0, + SIMGUI_LOGITEM_MALLOC_FAILED = 1, + SIMGUI_LOGITEM_IMAGE_POOL_EXHAUSTED = 2 +} + +struct simgui_allocator_t +{ + void* function(size_t size, void* user_data) alloc_fn; + void function(void* ptr, void* user_data) free_fn; + void* user_data; +} + +struct simgui_logger_t +{ + void function(const(char)* tag, uint log_level, uint log_item_id, + const(char)* message_or_null, uint line_nr, + const(char)* filename_or_null, void* user_data) func; + void* user_data; +} + +struct simgui_desc_t +{ + int max_vertices; + int image_pool_size; + sg.PixelFormat color_format; + sg.PixelFormat depth_format; + int sample_count; + const(char)* ini_filename; + bool no_default_font; + bool disable_paste_override; + bool disable_set_mouse_cursor; + bool disable_windows_resize_from_edges; + bool write_alpha_channel; + simgui_allocator_t allocator; + simgui_logger_t logger; +} + +struct simgui_frame_desc_t +{ + int width; + int height; + double delta_time; + float dpi_scale; +} + +void simgui_setup(const(simgui_desc_t)* desc); +void simgui_new_frame(const(simgui_frame_desc_t)* desc); +void simgui_render(); +simgui_image_t simgui_make_image(const(simgui_image_desc_t)* desc); +void simgui_destroy_image(simgui_image_t img); +simgui_image_desc_t simgui_query_image_desc(simgui_image_t img); +void* simgui_imtextureid(simgui_image_t img); +simgui_image_t simgui_image_from_imtextureid(void* imtextureid); +void simgui_add_focus_event(bool focus); +void simgui_add_mouse_pos_event(float x, float y); +void simgui_add_touch_pos_event(float x, float y); +void simgui_add_mouse_button_event(int mouse_button, bool down); +void simgui_add_mouse_wheel_event(float wheel_x, float wheel_y); +void simgui_add_key_event(int function(int) map_keycode, int keycode, bool down); +void simgui_add_input_character(uint c); +void simgui_add_input_characters_utf8(const(char)* c); +void simgui_add_touch_button_event(int mouse_button, bool down); +bool simgui_handle_event(const(sapp.Event)* ev); +int simgui_map_keycode(sapp.Keycode keycode); +void simgui_shutdown(); +struct _simgui_vs_params_t +{ + ImVec2 disp_size; + ubyte[8] _pad_8; +} + +enum _simgui_resource_state +{ + _SIMGUI_RESOURCESTATE_INITIAL = 0, + _SIMGUI_RESOURCESTATE_ALLOC = 1, + _SIMGUI_RESOURCESTATE_VALID = 2, + _SIMGUI_RESOURCESTATE_FAILED = 3, + _SIMGUI_RESOURCESTATE_INVALID = 4, + _SIMGUI_RESOURCESTATE_FORCE_U32 = 0x7FFFFFFF +} + +struct _simgui_slot_t +{ + uint id; + _simgui_resource_state state; +} + +struct _simgui_pool_t +{ + int size; + int queue_top; + uint* gen_ctrs; + int* free_queue; +} + +struct _simgui_image_t +{ + _simgui_slot_t slot; + sg.Image image; + sg.Sampler sampler; + sg.Pipeline pip; +} + +struct _simgui_image_pool_t +{ + _simgui_pool_t pool; + _simgui_image_t* items; +} + +struct _simgui_state_t +{ + uint init_cookie; + simgui_desc_t desc; + float cur_dpi_scale; + sg.Buffer vbuf; + sg.Buffer ibuf; + sg.Image font_img; + sg.Sampler font_smp; + simgui_image_t default_font; + sg.Image def_img; + sg.Sampler def_smp; + sg.Shader def_shd; + sg.Pipeline def_pip; + + sg.Shader shd_unfilterable; + sg.Pipeline pip_unfilterable; + sg.Range vertices; + sg.Range indices; + bool is_osx; + _simgui_image_pool_t image_pool; +} + +extern __gshared _simgui_state_t _simgui; +extern __gshared const(char)[341] _simgui_vs_source_glsl330; +extern __gshared const(char)[177] _simgui_fs_source_glsl330; + +void _simgui_set_clipboard(void* user_data, const(char)* text); +const(char)* _simgui_get_clipboard(void* user_data); + +extern __gshared const(char)*[3] _simgui_log_messages; + +void _simgui_log(simgui_log_item_t log_item, uint log_level, const(char)* msg, uint line_nr); +void _simgui_clear(void* ptr, size_t size); +void* _simgui_malloc(size_t size); +void* _simgui_malloc_clear(size_t size); +void _simgui_free(void* ptr); +void _simgui_init_pool(_simgui_pool_t* pool, int num); +void _simgui_discard_pool(_simgui_pool_t* pool); +int _simgui_pool_alloc_index(_simgui_pool_t* pool); +void _simgui_pool_free_index(_simgui_pool_t* pool, int slot_index); +uint _simgui_slot_init(_simgui_pool_t* pool, _simgui_slot_t* slot, int slot_index); +int _simgui_slot_index(uint id); +void _simgui_init_item_pool(_simgui_pool_t* pool, int pool_size, + void** items_ptr, size_t item_size_bytes); +void _simgui_discard_item_pool(_simgui_pool_t* pool, void** items_ptr); +void _simgui_setup_image_pool(int pool_size); +void _simgui_discard_image_pool(); +simgui_image_t _simgui_make_image_handle(uint id); +_simgui_image_t* _simgui_image_at(uint id); +_simgui_image_t* _simgui_lookup_image(uint id); +simgui_image_t _simgui_alloc_image(); +_simgui_resource_state _simgui_init_image(_simgui_image_t* img, const(simgui_image_desc_t)* desc); +void _simgui_deinit_image(_simgui_image_t* img); +void _simgui_destroy_image(simgui_image_t img_id); +void _simgui_destroy_all_images(); +simgui_image_desc_t _simgui_image_desc_defaults(const(simgui_image_desc_t)* desc); +bool _simgui_is_osx(); +simgui_desc_t _simgui_desc_defaults(const(simgui_desc_t)* desc); +void simgui_setup(const(simgui_desc_t)* desc); +void simgui_shutdown(); +simgui_image_t simgui_make_image(const(simgui_image_desc_t)* desc); +void simgui_destroy_image(simgui_image_t img_id); +simgui_image_desc_t simgui_query_image_desc(simgui_image_t img_id); +void* simgui_imtextureid(simgui_image_t img); +simgui_image_t simgui_image_from_imtextureid(void* imtextureid); +void simgui_new_frame(const(simgui_frame_desc_t)* desc); +const(_simgui_image_t)* _simgui_bind_image_sampler(sg.Bindings* bindings, ImTextureID tex_id); +ImDrawList* _simgui_imdrawlist_at(ImDrawData* draw_data, int cl_index); +void simgui_render(); +void simgui_add_focus_event(bool focus); +void simgui_add_mouse_pos_event(float x, float y); +void simgui_add_touch_pos_event(float x, float y); +void simgui_add_mouse_button_event(int mouse_button, bool down); +void simgui_add_touch_button_event(int mouse_button, bool down); +void simgui_add_mouse_wheel_event(float wheel_x, float wheel_y); +void simgui_add_key_event(int function(int) map_keycode, int keycode, bool down); +void simgui_add_input_character(uint c); +void simgui_add_input_characters_utf8(const(char)* c); +bool _simgui_is_ctrl(uint modifiers); +ImGuiKey _simgui_map_keycode(sapp.Keycode key); +void _simgui_add_sapp_key_event(ImGuiIO* io, sapp.Keycode sapp_key, bool down); +void _simgui_add_imgui_key_event(ImGuiIO* io, ImGuiKey imgui_key, bool down); +void _simgui_update_modifiers(ImGuiIO* io, uint mods); +ImGuiKey _simgui_copypaste_modifier(); +int simgui_map_keycode(sapp.Keycode keycode); +bool simgui_handle_event(const(sapp.Event)* ev);