Files
ghostty/macos/Sources/Ghostty/Ghostty.Inspector.swift
2026-01-31 09:22:26 -08:00

101 lines
3.1 KiB
Swift

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()
)
}
}
}