apprt/gtk: initialize and run the inspector

This commit is contained in:
Mitchell Hashimoto
2023-10-20 11:38:05 -07:00
parent 7a30d1080e
commit 865bf7441c
3 changed files with 26 additions and 9 deletions

View File

@ -5,6 +5,17 @@ const Inspector = @This();
const cimgui = @import("cimgui"); const cimgui = @import("cimgui");
/// Setup the ImGui state. This requires an ImGui context to be set.
pub fn setup() void {
const io: *cimgui.c.ImGuiIO = cimgui.c.igGetIO();
// Enable docking, which we use heavily for the UI.
io.ConfigFlags |= cimgui.c.ImGuiConfigFlags_DockingEnable;
// Our colorspace is sRGB.
io.ConfigFlags |= cimgui.c.ImGuiConfigFlags_IsSRGB;
}
pub fn init() Inspector { pub fn init() Inspector {
return .{}; return .{};
} }
@ -13,9 +24,16 @@ pub fn deinit(self: *Inspector) void {
_ = self; _ = self;
} }
/// Render the frame.
pub fn render(self: *Inspector) void { pub fn render(self: *Inspector) void {
_ = self; _ = self;
_ = cimgui.c.igDockSpaceOverViewport(
cimgui.c.igGetMainViewport(),
cimgui.c.ImGuiDockNodeFlags_None,
null,
);
var show: bool = true; var show: bool = true;
cimgui.c.igShowDemoWindow(&show); cimgui.c.igShowDemoWindow(&show);
} }

View File

@ -608,14 +608,6 @@ pub fn deactivateInspector(self: *Surface) void {
self.inspector = null; self.inspector = null;
} }
/// Render the inspector. This requires an active ImGui context.
pub fn renderInspector(self: *Surface) void {
const inspector = self.inspector orelse return;
self.renderer_state.mutex.lock();
defer self.renderer_state.mutex.unlock();
inspector.render();
}
/// True if the surface requires confirmation to quit. This should be called /// True if the surface requires confirmation to quit. This should be called
/// by apprt to determine if the surface should confirm before quitting. /// by apprt to determine if the surface should confirm before quitting.
pub fn needsConfirmQuit(self: *Surface) bool { pub fn needsConfirmQuit(self: *Surface) bool {

View File

@ -8,6 +8,7 @@ const TerminalWindow = @import("Window.zig");
const ImguiWidget = @import("ImguiWidget.zig"); const ImguiWidget = @import("ImguiWidget.zig");
const c = @import("c.zig"); const c = @import("c.zig");
const icon = @import("icon.zig"); const icon = @import("icon.zig");
const CoreInspector = @import("../../Inspector.zig");
const log = std.log.scoped(.inspector); const log = std.log.scoped(.inspector);
@ -144,6 +145,7 @@ const Window = struct {
errdefer self.imgui_widget.deinit(); errdefer self.imgui_widget.deinit();
self.imgui_widget.render_callback = &imguiRender; self.imgui_widget.render_callback = &imguiRender;
self.imgui_widget.render_userdata = self; self.imgui_widget.render_userdata = self;
CoreInspector.setup();
// Signals // Signals
_ = c.g_signal_connect_data(window, "destroy", c.G_CALLBACK(&gtkDestroy), self, null, c.G_CONNECT_DEFAULT); _ = c.g_signal_connect_data(window, "destroy", c.G_CALLBACK(&gtkDestroy), self, null, c.G_CONNECT_DEFAULT);
@ -164,7 +166,12 @@ const Window = struct {
fn imguiRender(ud: ?*anyopaque) void { fn imguiRender(ud: ?*anyopaque) void {
const self: *Window = @ptrCast(@alignCast(ud orelse return)); const self: *Window = @ptrCast(@alignCast(ud orelse return));
self.inspector.surface.core_surface.renderInspector(); const surface = &self.inspector.surface.core_surface;
const inspector = surface.inspector orelse return;
surface.renderer_state.mutex.lock();
defer surface.renderer_state.mutex.unlock();
inspector.render();
} }
/// "destroy" signal for the window /// "destroy" signal for the window