summaryrefslogtreecommitdiff
path: root/src/term/color.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/term/color.rs')
-rw-r--r--src/term/color.rs36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/term/color.rs b/src/term/color.rs
index 6acd092a..276a6897 100644
--- a/src/term/color.rs
+++ b/src/term/color.rs
@@ -23,8 +23,8 @@ impl<'a> From<&'a Colors> for List {
let mut list: List = unsafe { ::std::mem::uninitialized() };
list.fill_named(colors);
- list.fill_cube();
- list.fill_gray_ramp();
+ list.fill_cube(colors);
+ list.fill_gray_ramp(colors);
list
}
@@ -95,12 +95,26 @@ impl List {
}
}
- fn fill_cube(&mut self) {
+ pub fn fill_cube(&mut self, colors: &Colors) {
let mut index: usize = 16;
// Build colors
for r in 0..6 {
for g in 0..6 {
for b in 0..6 {
+ // Index of the color is number of named colors + rgb
+ let color_index = 16 + r + g + b;
+
+ // Override colors 16..232 with the config (if present)
+ if let Some(indexed_color) = colors
+ .indexed_colors
+ .iter()
+ .find(|ic| ic.index == color_index)
+ {
+ self[index] = indexed_color.color;
+ index += 1;
+ continue;
+ }
+
self[index] = Rgb { r: if r == 0 { 0 } else { r * 40 + 55 },
b: if b == 0 { 0 } else { b * 40 + 55 },
g: if g == 0 { 0 } else { g * 40 + 55 },
@@ -113,10 +127,24 @@ impl List {
debug_assert!(index == 232);
}
- fn fill_gray_ramp(&mut self) {
+ pub fn fill_gray_ramp(&mut self, colors: &Colors) {
let mut index: usize = 232;
for i in 0..24 {
+ // Index of the color is number of named colors + number of cube colors + i
+ let color_index = 16 + 216 + i;
+
+ // Override colors 232..256 with the config (if present)
+ if let Some(indexed_color) = colors
+ .indexed_colors
+ .iter()
+ .find(|ic| ic.index == color_index)
+ {
+ self[index] = indexed_color.color;
+ index += 1;
+ continue;
+ }
+
let value = i * 10 + 8;
self[index] = Rgb {
r: value,