mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-15 03:52:39 +00:00
64 lines
2.5 KiB
Zig
64 lines
2.5 KiB
Zig
const terminal = @import("../terminal/main.zig");
|
|
|
|
// TODO: Test neverExtendBg function
|
|
|
|
/// Returns true if the row of this pin should never have its background
|
|
/// color extended for filling padding space in the renderer. This is
|
|
/// a set of heuristics that help making our padding look better.
|
|
pub fn neverExtendBg(
|
|
row: terminal.page.Row,
|
|
cells: []const terminal.page.Cell,
|
|
styles: []const terminal.Style,
|
|
palette: *const terminal.color.Palette,
|
|
default_background: terminal.color.RGB,
|
|
) bool {
|
|
// Any semantic prompts should not have their background extended
|
|
// because prompts often contain special formatting (such as
|
|
// powerline) that looks bad when extended.
|
|
switch (row.semantic_prompt) {
|
|
.prompt, .prompt_continuation, .input => return true,
|
|
.unknown, .command => {},
|
|
}
|
|
|
|
for (0.., cells) |x, *cell| {
|
|
// If any cell has a default background color then we don't
|
|
// extend because the default background color probably looks
|
|
// good enough as an extension.
|
|
switch (cell.content_tag) {
|
|
// If it is a background color cell, we check the color.
|
|
.bg_color_palette, .bg_color_rgb => {
|
|
const s: terminal.Style = if (cell.hasStyling()) styles[x] else .{};
|
|
const bg = s.bg(cell, palette) orelse return true;
|
|
if (bg.eql(default_background)) return true;
|
|
},
|
|
|
|
// If its a codepoint cell we can check the style.
|
|
.codepoint, .codepoint_grapheme => {
|
|
// For codepoint containing, we also never extend bg
|
|
// if any cell has a powerline glyph because these are
|
|
// perfect-fit.
|
|
switch (cell.codepoint()) {
|
|
// Powerline
|
|
0xE0B0...0xE0C8,
|
|
0xE0CA,
|
|
0xE0CC...0xE0D2,
|
|
0xE0D4,
|
|
=> return true,
|
|
|
|
else => {},
|
|
}
|
|
|
|
// Never extend a cell that has a default background.
|
|
// A default background is applied if there is no background
|
|
// on the style or the explicitly set background
|
|
// matches our default background.
|
|
const s: terminal.Style = if (cell.hasStyling()) styles[x] else .{};
|
|
const bg = s.bg(cell, palette) orelse return true;
|
|
if (bg.eql(default_background)) return true;
|
|
},
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|