summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/renderer/mod.rs7
-rw-r--r--src/term/cell.rs19
-rw-r--r--src/term/mod.rs30
3 files changed, 26 insertions, 30 deletions
diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs
index 68335e1c..b461db0c 100644
--- a/src/renderer/mod.rs
+++ b/src/renderer/mod.rs
@@ -835,12 +835,17 @@ impl<'a> RenderApi<'a> {
glyph_cache.font_key
};
- let glyph_key = GlyphKey {
+ let mut glyph_key = GlyphKey {
font_key,
size: glyph_cache.font_size,
c: cell.c
};
+ // Don't render text of HIDDEN cells
+ if cell.flags.contains(cell::Flags::HIDDEN) {
+ glyph_key.c = ' ';
+ }
+
// Add cell to batch
{
let glyph = glyph_cache.get(glyph_key, self);
diff --git a/src/term/cell.rs b/src/term/cell.rs
index a04eb8e1..ef8509dc 100644
--- a/src/term/cell.rs
+++ b/src/term/cell.rs
@@ -18,15 +18,16 @@ use index::Column;
bitflags! {
#[derive(Serialize, Deserialize)]
pub struct Flags: u32 {
- const INVERSE = 0b0000_0001;
- const BOLD = 0b0000_0010;
- const ITALIC = 0b0000_0100;
- const UNDERLINE = 0b0000_1000;
- const WRAPLINE = 0b0001_0000;
- const WIDE_CHAR = 0b0010_0000;
- const WIDE_CHAR_SPACER = 0b0100_0000;
- const DIM = 0b1000_0000;
- const DIM_BOLD = 0b1000_0010;
+ const INVERSE = 0b0_0000_0001;
+ const BOLD = 0b0_0000_0010;
+ const ITALIC = 0b0_0000_0100;
+ const UNDERLINE = 0b0_0000_1000;
+ const WRAPLINE = 0b0_0001_0000;
+ const WIDE_CHAR = 0b0_0010_0000;
+ const WIDE_CHAR_SPACER = 0b0_0100_0000;
+ const DIM = 0b0_1000_0000;
+ const DIM_BOLD = 0b0_1000_0010;
+ const HIDDEN = 0b1_0000_0000;
}
}
diff --git a/src/term/mod.rs b/src/term/mod.rs
index f4ebf1c9..c2759802 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -14,9 +14,8 @@
//
//! Exports the `Term` type which is a high-level API for the Grid
use std::ops::{Range, Index, IndexMut};
-use std::ptr;
+use std::{ptr, io, mem};
use std::cmp::{min, max};
-use std::io;
use std::time::{Duration, Instant};
use arraydeque::ArrayDeque;
@@ -424,26 +423,15 @@ impl<'a> Iterator for RenderableCellsIter<'a> {
};
// Apply inversion and lookup RGB values
- let mut bg_alpha = 1.0;
- let fg_rgb;
- let bg_rgb;
+ let mut fg_rgb = self.compute_fg_rgb(cell.fg, &cell);
+ let mut bg_rgb = self.compute_bg_rgb(cell.bg);
- let invert = selected ^ cell.inverse();
-
- if invert {
- if cell.fg == cell.bg {
- bg_rgb = self.colors[NamedColor::Foreground];
- fg_rgb = self.colors[NamedColor::Background];
- bg_alpha = 1.0
- } else {
- bg_rgb = self.compute_fg_rgb(cell.fg, &cell);
- fg_rgb = self.compute_bg_rgb(cell.bg);
- }
+ let bg_alpha = if selected ^ cell.inverse() {
+ mem::swap(&mut fg_rgb, &mut bg_rgb);
+ self.compute_bg_alpha(cell.fg)
} else {
- fg_rgb = self.compute_fg_rgb(cell.fg, &cell);
- bg_rgb = self.compute_bg_rgb(cell.bg);
- bg_alpha = self.compute_bg_alpha(cell.bg);
- }
+ self.compute_bg_alpha(cell.bg)
+ };
return Some(RenderableCell {
line: cell.line,
@@ -1877,6 +1865,8 @@ impl ansi::Handler for Term {
Attr::CancelItalic => self.cursor.template.flags.remove(cell::Flags::ITALIC),
Attr::Underscore => self.cursor.template.flags.insert(cell::Flags::UNDERLINE),
Attr::CancelUnderline => self.cursor.template.flags.remove(cell::Flags::UNDERLINE),
+ Attr::Hidden => self.cursor.template.flags.insert(cell::Flags::HIDDEN),
+ Attr::CancelHidden => self.cursor.template.flags.remove(cell::Flags::HIDDEN),
_ => {
debug!("Term got unhandled attr: {:?}", attr);
}