mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-18 21:40:29 +00:00
101 lines
3.1 KiB
Swift
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()
|
|
)
|
|
}
|
|
}
|
|
}
|