mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-09-07 06:27:27 +00:00
124 lines
4.2 KiB
Zig
124 lines
4.2 KiB
Zig
const std = @import("std");
|
|
const Allocator = std.mem.Allocator;
|
|
const cimgui = @import("dcimgui");
|
|
const widgets = @import("../widgets.zig");
|
|
const renderer = @import("../../renderer.zig");
|
|
|
|
const log = std.log.scoped(.inspector_renderer);
|
|
|
|
/// Renderer information inspector widget.
|
|
pub const Info = struct {
|
|
features: std.AutoArrayHashMapUnmanaged(
|
|
std.meta.Tag(renderer.Overlay.Feature),
|
|
renderer.Overlay.Feature,
|
|
),
|
|
|
|
pub const empty: Info = .{
|
|
.features = .empty,
|
|
};
|
|
|
|
pub fn deinit(self: *Info, alloc: Allocator) void {
|
|
self.features.deinit(alloc);
|
|
}
|
|
|
|
/// Grab the features into a new allocated slice. This is used by
|
|
pub fn overlayFeatures(
|
|
self: *const Info,
|
|
alloc: Allocator,
|
|
) Allocator.Error![]renderer.Overlay.Feature {
|
|
// The features from our internal state.
|
|
const features = self.features.values();
|
|
|
|
// For now we do a dumb copy since the features have no managed
|
|
// memory.
|
|
const result = try alloc.dupe(
|
|
renderer.Overlay.Feature,
|
|
features,
|
|
);
|
|
errdefer alloc.free(result);
|
|
|
|
return result;
|
|
}
|
|
|
|
/// Draw the renderer info window.
|
|
pub fn draw(
|
|
self: *Info,
|
|
alloc: Allocator,
|
|
open: bool,
|
|
) void {
|
|
if (!open) return;
|
|
|
|
cimgui.c.ImGui_SetNextItemOpen(true, cimgui.c.ImGuiCond_Once);
|
|
if (!cimgui.c.ImGui_CollapsingHeader("Overlays", cimgui.c.ImGuiTreeNodeFlags_None)) return;
|
|
|
|
cimgui.c.ImGui_SeparatorText("Hyperlinks");
|
|
self.overlayHyperlinks(alloc);
|
|
cimgui.c.ImGui_SeparatorText("Semantic Prompts");
|
|
self.overlaySemanticPrompts(alloc);
|
|
}
|
|
|
|
fn overlayHyperlinks(self: *Info, alloc: Allocator) void {
|
|
var hyperlinks: bool = self.features.contains(.highlight_hyperlinks);
|
|
_ = cimgui.c.ImGui_Checkbox("Overlay Hyperlinks", &hyperlinks);
|
|
cimgui.c.ImGui_SameLine();
|
|
widgets.helpMarker("When enabled, highlights OSC8 hyperlinks.");
|
|
|
|
if (!hyperlinks) {
|
|
_ = self.features.swapRemove(.highlight_hyperlinks);
|
|
} else {
|
|
self.features.put(
|
|
alloc,
|
|
.highlight_hyperlinks,
|
|
.highlight_hyperlinks,
|
|
) catch log.warn("error enabling hyperlink overlay feature", .{});
|
|
}
|
|
}
|
|
|
|
fn overlaySemanticPrompts(self: *Info, alloc: Allocator) void {
|
|
var semantic_prompts: bool = self.features.contains(.semantic_prompts);
|
|
_ = cimgui.c.ImGui_Checkbox("Overlay Semantic Prompts", &semantic_prompts);
|
|
cimgui.c.ImGui_SameLine();
|
|
widgets.helpMarker("When enabled, highlights OSC 133 semantic prompts.");
|
|
|
|
// Handle the checkbox results
|
|
if (!semantic_prompts) {
|
|
_ = self.features.swapRemove(.semantic_prompts);
|
|
} else {
|
|
self.features.put(
|
|
alloc,
|
|
.semantic_prompts,
|
|
.semantic_prompts,
|
|
) catch log.warn("error enabling semantic prompt overlay feature", .{});
|
|
}
|
|
|
|
// Help
|
|
cimgui.c.ImGui_Indent();
|
|
defer cimgui.c.ImGui_Unindent();
|
|
|
|
cimgui.c.ImGui_TextDisabled("Colors:");
|
|
|
|
const prompt_rgb = renderer.Overlay.Color.semantic_prompt.rgb();
|
|
const input_rgb = renderer.Overlay.Color.semantic_input.rgb();
|
|
const prompt_col: cimgui.c.ImVec4 = .{
|
|
.x = @as(f32, @floatFromInt(prompt_rgb.r)) / 255.0,
|
|
.y = @as(f32, @floatFromInt(prompt_rgb.g)) / 255.0,
|
|
.z = @as(f32, @floatFromInt(prompt_rgb.b)) / 255.0,
|
|
.w = 1.0,
|
|
};
|
|
const input_col: cimgui.c.ImVec4 = .{
|
|
.x = @as(f32, @floatFromInt(input_rgb.r)) / 255.0,
|
|
.y = @as(f32, @floatFromInt(input_rgb.g)) / 255.0,
|
|
.z = @as(f32, @floatFromInt(input_rgb.b)) / 255.0,
|
|
.w = 1.0,
|
|
};
|
|
|
|
_ = cimgui.c.ImGui_ColorButton("##prompt_color", prompt_col, cimgui.c.ImGuiColorEditFlags_NoTooltip);
|
|
cimgui.c.ImGui_SameLine();
|
|
cimgui.c.ImGui_Text("Prompt");
|
|
|
|
_ = cimgui.c.ImGui_ColorButton("##input_color", input_col, cimgui.c.ImGuiColorEditFlags_NoTooltip);
|
|
cimgui.c.ImGui_SameLine();
|
|
cimgui.c.ImGui_Text("Input");
|
|
}
|
|
};
|