diff --git a/libs/imgui/imgui.cpp b/libs/imgui/imgui.cpp index 03674e3..ef1b9b2 100644 --- a/libs/imgui/imgui.cpp +++ b/libs/imgui/imgui.cpp @@ -19572,6 +19572,8 @@ ImGuiID ImGui::DockSpaceOverViewport(ImGuiID dockspace_id, const ImGuiViewport* host_window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus; if (dockspace_flags & ImGuiDockNodeFlags_PassthruCentralNode) host_window_flags |= ImGuiWindowFlags_NoBackground; + if (dockspace_flags & ImGuiDockNodeFlags_KeepAliveOnly) + host_window_flags |= ImGuiWindowFlags_NoMouseInputs; // FIXME-OPT: When using ImGuiDockNodeFlags_KeepAliveOnly with DockSpaceOverViewport() we might be able to spare submitting the window, // since DockSpace() with that flag doesn't need a window. We'd only need to compute the default ID accordingly. diff --git a/src/gui.zig b/src/gui.zig index eace0de..c569134 100644 --- a/src/gui.zig +++ b/src/gui.zig @@ -206,6 +206,11 @@ pub const FontConfig = extern struct { }; pub const io = struct { + pub fn addFontDefault(config: ?FontConfig) Font { + return zguiIoAddFontDefault(if (config) |c| &c else null); + } + extern fn zguiIoAddFontDefault(config: ?*const FontConfig) Font; + pub fn addFontFromFile(filename: [:0]const u8, size_pixels: f32) Font { return zguiIoAddFontFromFile(filename, size_pixels); } @@ -975,9 +980,17 @@ pub const DockSpaceOverViewport = zguiDockSpaceOverViewport; // DockBuilder (Unstable internal imgui API, subject to change, use at own risk) // //-------------------------------------------------------------------------------------------------- +const DockNode = anyopaque; +pub fn dockNodeRect(node: *const DockNode, out_rect: *[4]f32) void { + return zguiDockNodeRect(node, out_rect); +} +extern fn zguiDockNodeRect(node: *const DockNode, out_rect: *[4]f32) void; + pub fn dockBuilderDockWindow(window_name: [:0]const u8, node_id: Ident) void { zguiDockBuilderDockWindow(window_name.ptr, node_id); } +pub const dockBuilderGetNode = zguiDockBuilderGetNode; +pub const dockBuilderGetCentralNode = zguiDockBuilderGetCentralNode; pub const dockBuilderAddNode = zguiDockBuilderAddNode; pub const dockBuilderRemoveNode = zguiDockBuilderRemoveNode; pub fn dockBuilderSetNodePos(node_id: Ident, pos: [2]f32) void { @@ -990,6 +1003,8 @@ pub const dockBuilderSplitNode = zguiDockBuilderSplitNode; pub const dockBuilderFinish = zguiDockBuilderFinish; extern fn zguiDockBuilderDockWindow(window_name: [*:0]const u8, node_id: Ident) void; +extern fn zguiDockBuilderGetNode(node_id: Ident) ?*DockNode; +extern fn zguiDockBuilderGetCentralNode(node_id: Ident) ?*DockNode; extern fn zguiDockBuilderAddNode(node_id: Ident, flags: DockNodeFlags) Ident; extern fn zguiDockBuilderRemoveNode(node_id: Ident) void; extern fn zguiDockBuilderSetNodePos(node_id: Ident, pos: *const [2]f32) void; @@ -1307,6 +1322,19 @@ pub fn popStyleVar(args: struct { extern fn zguiPopStyleVar(count: c_int) void; //-------------------------------------------------------------------------------------------------- +pub const ItemFlag = enum(c_int) { + none = 0, + no_tab_stop = 1 << 0, + no_nav = 1 << 1, + no_nav_default_focus = 1 << 2, + button_repeat = 1 << 3, + auto_close_popups = 1 << 4, + allow_duplicate_id = 1 << 5, +}; +/// `void pushItemFlag(item_flag: ItemFlag, enabled: bool) void` +pub const pushItemFlag = zguiPushItemFlag; +/// `void popItemFlag() void` +pub const popItemFlag = zguiPopItemFlag; /// `void pushItemWidth(item_width: f32) void` pub const pushItemWidth = zguiPushItemWidth; /// `void popItemWidth() void` @@ -1315,6 +1343,8 @@ pub const popItemWidth = zguiPopItemWidth; pub const setNextItemWidth = zguiSetNextItemWidth; /// `void setItemDefaultFocus() void` pub const setItemDefaultFocus = zguiSetItemDefaultFocus; +extern fn zguiPushItemFlag(item_flag: ItemFlag, enabled: bool) void; +extern fn zguiPopItemFlag() void; extern fn zguiPushItemWidth(item_width: f32) void; extern fn zguiPopItemWidth() void; extern fn zguiSetNextItemWidth(item_width: f32) void; diff --git a/src/plot.zig b/src/plot.zig index ee48aad..ce5ddb9 100644 --- a/src/plot.zig +++ b/src/plot.zig @@ -604,12 +604,11 @@ fn PlotBarsValuesGen(comptime T: type) type { }; } pub fn plotBarsValues(label_id: [:0]const u8, comptime T: type, args: PlotBarsValuesGen(T)) void { - assert(args.xv.len == args.yv.len); - zguiPlot_PlotBars( + zguiPlot_PlotBarsValues( label_id, gui.typeToDataTypeEnum(T), args.v.ptr, - @as(i32, @intCast(args.xv.len)), + @as(i32, @intCast(args.v.len)), args.bar_size, args.shift, args.flags, @@ -655,6 +654,30 @@ pub fn dragPoint(id: i32, args: DragPoint) bool { } extern fn zguiPlot_DragPoint(id: i32, x: *f64, y: *f64, *const [4]f32, size: f32, flags: DragToolFlags) bool; //---------------------------------------------------------------------------------------------- +pub const Tag = struct { + round: bool = false, +}; + +pub fn tagX(x: f64, col: [4]f32, args: Tag) void { + zguiPlot_TagX(x, &col, args.round); +} +extern fn zguiPlot_TagX(x: f64, col: *const [4]f32, round: bool) void; + +pub fn tagXText(x: f64, col: [4]f32, comptime fmt: []const u8, fmt_args: anytype) void { + zguiPlot_TagXText(x, &col, "%s", gui.formatZ(fmt, fmt_args).ptr); +} +extern fn zguiPlot_TagXText(x: f64, col: *const [4]f32, fmt: [*:0]const u8, ...) void; + +pub fn tagY(y: f64, col: [4]f32, args: Tag) void { + zguiPlot_TagY(y, &col, args.round); +} +extern fn zguiPlot_TagY(y: f64, col: *const [4]f32, round: bool) void; + +pub fn tagYText(y: f64, col: [4]f32, comptime fmt: []const u8, fmt_args: anytype) void { + zguiPlot_TagYText(y, &col, "%s", gui.formatZ(fmt, fmt_args).ptr); +} +extern fn zguiPlot_TagYText(y: f64, col: *const [4]f32, fmt: [*:0]const u8, ...) void; +//---------------------------------------------------------------------------------------------- // PlotText const PlotTextFlags = packed struct(u32) { vertical: bool = false, diff --git a/src/zgui.cpp b/src/zgui.cpp index 4764ea2..c78f59e 100644 --- a/src/zgui.cpp +++ b/src/zgui.cpp @@ -362,7 +362,7 @@ extern "C" ImGui::SetMouseCursor(cursor); } - ZGUI_API void zguiSetNextFrameWantCaptureMouse(bool want_capture_mouse) + ZGUI_API void zguiSetNextFrameWantCaptureMouse(bool want_capture_mouse) { ImGui::SetNextFrameWantCaptureMouse(want_capture_mouse); } @@ -1314,6 +1314,16 @@ extern "C" ImGui::PopStyleVar(count); } + ZGUI_API void zguiPushItemFlag(int item_flag, bool enabled) + { + ImGui::PushItemFlag(item_flag, enabled); + } + + ZGUI_API void zguiPopItemFlag() + { + ImGui::PopItemFlag(); + } + ZGUI_API void zguiPushItemWidth(float item_width) { ImGui::PushItemWidth(item_width); @@ -1492,6 +1502,11 @@ extern "C" return ImGui::GetClipboardText(); } + ZGUI_API ImFont *zguiIoAddFontDefault(const ImFontConfig *config) + { + return ImGui::GetIO().Fonts->AddFontDefault(config); + } + ZGUI_API ImFont *zguiIoAddFontFromFileWithConfig( const char *filename, float size_pixels, @@ -2784,11 +2799,26 @@ extern "C" // DockBuilder (Unstable internal imgui API, subject to change, use at own risk) // //-------------------------------------------------------------------------------------------------- + ZGUI_API void zguiDockNodeRect(const ImGuiDockNode* node, ImRect* out_rect) + { + *out_rect = node->Rect(); + } + ZGUI_API void zguiDockBuilderDockWindow(const char *window_name, ImGuiID node_id) { ImGui::DockBuilderDockWindow(window_name, node_id); } + ZGUI_API ImGuiDockNode* zguiDockBuilderGetNode(ImGuiID node_id) + { + return ImGui::DockBuilderGetNode(node_id); + } + + ZGUI_API ImGuiDockNode* zguiDockBuilderGetCentralNode(ImGuiID node_id) + { + return ImGui::DockBuilderGetCentralNode(node_id); + } + ZGUI_API ImGuiID zguiDockBuilderAddNode(ImGuiID node_id, ImGuiDockNodeFlags flags) { return ImGui::DockBuilderAddNode(node_id, flags); diff --git a/src/zplot.cpp b/src/zplot.cpp index eb74be5..b399d4f 100644 --- a/src/zplot.cpp +++ b/src/zplot.cpp @@ -352,6 +352,32 @@ extern "C" flags); } + ZGUI_API void zguiPlot_TagX(double x, float col[4], bool round) + { + ImPlot::TagX(x, (*(const ImVec4 *)&(col[0])), round); + } + + ZGUI_API void zguiPlot_TagXText(double x, float col[4], const char *fmt, ...) + { + va_list args; + va_start(args, fmt); + ImPlot::TagXV(x, (*(const ImVec4 *)&(col[0])), fmt, args); + va_end(args); + } + + ZGUI_API void zguiPlot_TagY(double y, float col[4], bool round) + { + ImPlot::TagY(y, (*(const ImVec4 *)&(col[0])), round); + } + + ZGUI_API void zguiPlot_TagYText(double y, float col[4], const char *fmt, ...) + { + va_list args; + va_start(args, fmt); + ImPlot::TagYV(y, (*(const ImVec4 *)&(col[0])), fmt, args); + va_end(args); + } + ZGUI_API void zguiPlot_PlotText( const char *text, double x, double y,