inspector: add style file for style widgets

This commit is contained in:
Mitchell Hashimoto
2026-01-27 15:17:53 -08:00
parent 1fa74b19e8
commit bdd0295e0e
2 changed files with 126 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ const std = @import("std");
const cimgui = @import("dcimgui");
const terminal = @import("../terminal/main.zig");
const inspector = @import("main.zig");
const style = @import("style.zig");
const units = @import("units.zig");
/// Window to show screen information.

125
src/inspector/style.zig Normal file
View File

@@ -0,0 +1,125 @@
const std = @import("std");
const cimgui = @import("dcimgui");
const terminal = @import("../terminal/main.zig");
const widgets = @import("widgets.zig");
/// Render a style as a table.
pub fn table(
st: terminal.Style,
palette: ?*const terminal.color.Palette,
) void {
{
_ = cimgui.c.ImGui_BeginTable(
"style",
2,
cimgui.c.ImGuiTableFlags_None,
);
defer cimgui.c.ImGui_EndTable();
{
cimgui.c.ImGui_TableNextRow();
_ = cimgui.c.ImGui_TableSetColumnIndex(0);
cimgui.c.ImGui_Text("Foreground");
cimgui.c.ImGui_SameLine();
widgets.helpMarker("The foreground (text) color");
_ = cimgui.c.ImGui_TableSetColumnIndex(1);
color(st.fg_color, palette);
}
{
cimgui.c.ImGui_TableNextRow();
_ = cimgui.c.ImGui_TableSetColumnIndex(0);
cimgui.c.ImGui_Text("Background");
cimgui.c.ImGui_SameLine();
widgets.helpMarker("The background (cell) color");
_ = cimgui.c.ImGui_TableSetColumnIndex(1);
color(st.bg_color, palette);
}
{
cimgui.c.ImGui_TableNextRow();
_ = cimgui.c.ImGui_TableSetColumnIndex(0);
cimgui.c.ImGui_Text("Underline");
cimgui.c.ImGui_SameLine();
widgets.helpMarker("The underline color, if underlines are enabled.");
_ = cimgui.c.ImGui_TableSetColumnIndex(1);
color(st.underline_color, palette);
}
const style_flags = .{
.{ "bold", "Text will be rendered with bold weight." },
.{ "italic", "Text will be rendered in italic style." },
.{ "faint", "Text will be rendered with reduced intensity." },
.{ "blink", "Text will blink." },
.{ "inverse", "Foreground and background colors are swapped." },
.{ "invisible", "Text will be invisible (hidden)." },
.{ "strikethrough", "Text will have a line through it." },
};
inline for (style_flags) |entry| entry: {
const style = entry[0];
const help = entry[1];
if (!@field(st.flags, style)) break :entry;
cimgui.c.ImGui_TableNextRow();
{
_ = cimgui.c.ImGui_TableSetColumnIndex(0);
cimgui.c.ImGui_Text(style.ptr);
cimgui.c.ImGui_SameLine();
widgets.helpMarker(help);
}
{
_ = cimgui.c.ImGui_TableSetColumnIndex(1);
cimgui.c.ImGui_Text("true");
}
}
}
}
/// Render a style color.
pub fn color(
id: [:0]const u8,
c: terminal.Style.Color,
palette: ?*const terminal.color.Palette,
) void {
cimgui.c.ImGui_PushID(id);
defer cimgui.c.ImGui_PopID();
switch (c) {
.none => cimgui.c.ImGui_Text("default"),
.palette => |idx| {
cimgui.c.ImGui_Text("Palette %d", idx);
if (palette) |p| {
const rgb = p[idx];
var data: [3]f32 = .{
@as(f32, @floatFromInt(rgb.r)) / 255,
@as(f32, @floatFromInt(rgb.g)) / 255,
@as(f32, @floatFromInt(rgb.b)) / 255,
};
_ = cimgui.c.ImGui_ColorEdit3(
"color_fg",
&data,
cimgui.c.ImGuiColorEditFlags_DisplayHex |
cimgui.c.ImGuiColorEditFlags_NoPicker |
cimgui.c.ImGuiColorEditFlags_NoLabel,
);
}
},
.rgb => |rgb| {
var data: [3]f32 = .{
@as(f32, @floatFromInt(rgb.r)) / 255,
@as(f32, @floatFromInt(rgb.g)) / 255,
@as(f32, @floatFromInt(rgb.b)) / 255,
};
_ = cimgui.c.ImGui_ColorEdit3(
"color_fg",
&data,
cimgui.c.ImGuiColorEditFlags_DisplayHex |
cimgui.c.ImGuiColorEditFlags_NoPicker |
cimgui.c.ImGuiColorEditFlags_NoLabel,
);
},
}
cimgui.c.ImGui_TextDisabled("(Any styles not shown are not currently set)");
}