Something went wrong. Try again.
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364const 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 => return true, .none => {}, }
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;}