import GhosttyKit import Metal extension Ghostty { /// Represents the inspector for a surface within Ghostty. /// /// Wraps a `ghostty_inspector_t` final class Inspector: Sendable { private let inspector: ghostty_inspector_t /// Read the underlying C value for this inspector. This is unsafe because the value will be /// freed when the Inspector class is deinitialized. var unsafeCValue: ghostty_inspector_t { inspector } /// Initialize from the C structure. init(cInspector: ghostty_inspector_t) { self.inspector = cInspector } /// Set the focus state of the inspector. @MainActor func setFocus(_ focused: Bool) { ghostty_inspector_set_focus(inspector, focused) } /// Set the content scale of the inspector. @MainActor func setContentScale(x: Double, y: Double) { ghostty_inspector_set_content_scale(inspector, x, y) } /// Set the size of the inspector. @MainActor func setSize(width: UInt32, height: UInt32) { ghostty_inspector_set_size(inspector, width, height) } /// Send a mouse button event to the inspector. @MainActor func mouseButton( _ state: ghostty_input_mouse_state_e, button: ghostty_input_mouse_button_e, mods: ghostty_input_mods_e ) { ghostty_inspector_mouse_button(inspector, state, button, mods) } /// Send a mouse position event to the inspector. @MainActor func mousePos(x: Double, y: Double) { ghostty_inspector_mouse_pos(inspector, x, y) } /// Send a mouse scroll event to the inspector. @MainActor func mouseScroll(x: Double, y: Double, mods: ghostty_input_scroll_mods_t) { ghostty_inspector_mouse_scroll(inspector, x, y, mods) } /// Send a key event to the inspector. @MainActor func key( _ action: ghostty_input_action_e, key: ghostty_input_key_e, mods: ghostty_input_mods_e ) { ghostty_inspector_key(inspector, action, key, mods) } /// Send text to the inspector. @MainActor func text(_ text: String) { text.withCString { ptr in ghostty_inspector_text(inspector, ptr) } } /// Initialize Metal rendering for the inspector. @MainActor func metalInit(device: MTLDevice) -> Bool { let devicePtr = Unmanaged.passRetained(device).toOpaque() return ghostty_inspector_metal_init(inspector, devicePtr) } /// Render the inspector using Metal. @MainActor func metalRender( commandBuffer: MTLCommandBuffer, descriptor: MTLRenderPassDescriptor ) { ghostty_inspector_metal_render( inspector, Unmanaged.passRetained(commandBuffer).toOpaque(), Unmanaged.passRetained(descriptor).toOpaque() ) } } }