better color reduction.
This commit is contained in:
parent
d5f3874105
commit
5753d7b6ab
|
@ -189,14 +189,24 @@ var colorNames = exports.colorNames = {
|
|||
//});
|
||||
|
||||
exports.convert = function(color) {
|
||||
var val = colorNames[color];
|
||||
if (typeof val === 'string') val = val.replace(/[\- ]/g, '');
|
||||
if (val == null) val = color;
|
||||
if (val == null) val = -1;
|
||||
if (typeof val === 'string') {
|
||||
val = exports.matchColor(val);
|
||||
if (typeof color === 'string') {
|
||||
color = color.replace(/[\- ]/g, '');
|
||||
}
|
||||
|
||||
var val = colorNames[color];
|
||||
|
||||
if (val == null) val = color;
|
||||
|
||||
if (val == null) val = -1;
|
||||
|
||||
if (typeof val === 'string') {
|
||||
val = val[0] === '#'
|
||||
? exports.matchColor(val)
|
||||
: -1;
|
||||
}
|
||||
|
||||
if (val === -1) return 0x1ff;
|
||||
|
||||
return val;
|
||||
};
|
||||
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
, path = require('path')
|
||||
, fs = require('fs');
|
||||
, fs = require('fs')
|
||||
, colors = require('./colors');
|
||||
|
||||
/**
|
||||
* Node
|
||||
|
@ -727,9 +728,7 @@ Screen.prototype.draw = function(start, end) {
|
|||
}
|
||||
|
||||
if (bgColor !== 0x1ff) {
|
||||
if (this.tput) {
|
||||
bgColor = this._reduceColor(bgColor);
|
||||
}
|
||||
bgColor = this._reduceColor(bgColor);
|
||||
if (bgColor < 16) {
|
||||
if (bgColor < 8) {
|
||||
bgColor += 40;
|
||||
|
@ -744,9 +743,7 @@ Screen.prototype.draw = function(start, end) {
|
|||
}
|
||||
|
||||
if (fgColor !== 0x1ff) {
|
||||
if (this.tput) {
|
||||
fgColor = this._reduceColor(fgColor);
|
||||
}
|
||||
fgColor = this._reduceColor(fgColor);
|
||||
if (fgColor < 16) {
|
||||
if (fgColor < 8) {
|
||||
fgColor += 30;
|
||||
|
@ -799,10 +796,8 @@ Screen.prototype.draw = function(start, end) {
|
|||
Screen.prototype._reduceColor = function(col) {
|
||||
if (this.tput) {
|
||||
if (col >= 16 && this.tput.colors <= 16) {
|
||||
//col = Screen.ccolors[col];
|
||||
if (col >= 244) col = colors.white;
|
||||
else if (col >= 232) col = colors.black;
|
||||
else col = colors.blue;
|
||||
col = colors.ccolors[col];
|
||||
if (col == null) col = 0x1ff;
|
||||
} else if (col >= 8 && this.tput.colors <= 8) {
|
||||
col -= 8;
|
||||
} else if (col >= 2 && this.tput.colors <= 2) {
|
||||
|
@ -1047,11 +1042,11 @@ Screen.prototype.setEffects = function(el, fel, over, out, effects, temp) {
|
|||
Object.keys(effects).forEach(function(key) {
|
||||
var val = effects[key];
|
||||
if (typeof val === 'string') {
|
||||
effects[key] = convert(val);
|
||||
effects[key] = colors.convert(val);
|
||||
} else if (val && typeof val === 'object' && !Array.isArray(val)) {
|
||||
Object.keys(effects[key]).forEach(function(k) {
|
||||
var v = effects[key][k];
|
||||
effects[key][k] = convert(v);
|
||||
effects[key][k] = colors.convert(v);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -1120,8 +1115,8 @@ function Element(options) {
|
|||
// this.position.padding = options.padding || 0;
|
||||
// this.position.margin = options.margin || 0;
|
||||
|
||||
this.fg = convert(options.fg);
|
||||
this.bg = convert(options.bg);
|
||||
this.fg = colors.convert(options.fg);
|
||||
this.bg = colors.convert(options.bg);
|
||||
this.bold = options.bold;
|
||||
this.underline = options.underline;
|
||||
this.blink = options.blink;
|
||||
|
@ -1137,8 +1132,8 @@ function Element(options) {
|
|||
this.border = options.border;
|
||||
if (this.border) {
|
||||
this.border.type = this.border.type || 'bg';
|
||||
this.border.fg = convert(this.border.fg);
|
||||
this.border.bg = convert(this.border.bg);
|
||||
this.border.fg = colors.convert(this.border.fg);
|
||||
this.border.bg = colors.convert(this.border.bg);
|
||||
this.border.ch = this.border.ch || ' ';
|
||||
}
|
||||
|
||||
|
@ -2058,8 +2053,8 @@ function Line(options) {
|
|||
|
||||
options.border = {
|
||||
type: 'bg',
|
||||
bg: convert(options.bg),
|
||||
fg: convert(options.fg),
|
||||
bg: colors.convert(options.bg),
|
||||
fg: colors.convert(options.fg),
|
||||
ch: !options.type || options.type === 'ascii'
|
||||
? orientation === 'horizontal' ? '─' : '│'
|
||||
: options.ch || ' '
|
||||
|
@ -2095,8 +2090,8 @@ function ScrollableBox(options) {
|
|||
|
||||
this.scrollbar = options.scrollbar;
|
||||
if (this.scrollbar) {
|
||||
this.scrollbar.fg = convert(this.scrollbar.fg);
|
||||
this.scrollbar.bg = convert(this.scrollbar.bg);
|
||||
this.scrollbar.fg = colors.convert(this.scrollbar.fg);
|
||||
this.scrollbar.bg = colors.convert(this.scrollbar.bg);
|
||||
this.scrollbar.ch = this.scrollbar.ch || ' ';
|
||||
}
|
||||
}
|
||||
|
@ -2160,8 +2155,8 @@ function List(options) {
|
|||
this.ritems = [];
|
||||
this.selected = 0;
|
||||
|
||||
this.selectedBg = convert(options.selectedBg);
|
||||
this.selectedFg = convert(options.selectedFg);
|
||||
this.selectedBg = colors.convert(options.selectedBg);
|
||||
this.selectedFg = colors.convert(options.selectedFg);
|
||||
this.selectedBold = options.selectedBold;
|
||||
this.selectedUnderline = options.selectedUnderline;
|
||||
this.selectedBlink = options.selectedBlink;
|
||||
|
@ -2951,8 +2946,8 @@ function ProgressBar(options) {
|
|||
this.filled = +this.filled.slice(0, -1);
|
||||
}
|
||||
this.ch = options.ch || ' ';
|
||||
this.barFg = convert(options.barFg);
|
||||
this.barBg = convert(options.barBg);
|
||||
this.barFg = colors.convert(options.barFg);
|
||||
this.barBg = colors.convert(options.barBg);
|
||||
this.orientation = options.orientation || 'horizontal';
|
||||
}
|
||||
|
||||
|
@ -4044,38 +4039,6 @@ function hsort(obj) {
|
|||
});
|
||||
}
|
||||
|
||||
var colors = {
|
||||
default: -1,
|
||||
bg: -1,
|
||||
fg: -1,
|
||||
black: 0,
|
||||
red: 1,
|
||||
green: 2,
|
||||
yellow: 3,
|
||||
blue: 4,
|
||||
magenta: 5,
|
||||
cyan: 6,
|
||||
white: 7,
|
||||
lightblack: 8,
|
||||
lightred: 9,
|
||||
lightgreen: 10,
|
||||
lightyellow: 11,
|
||||
lightblue: 12,
|
||||
lightmagenta: 13,
|
||||
lightcyan: 14,
|
||||
lightwhite: 15
|
||||
};
|
||||
|
||||
function convert(color) {
|
||||
var val = colors[color];
|
||||
if (typeof val === 'string') val = val.replace(/[\- ]/g, '');
|
||||
if (val == null) val = color;
|
||||
if (val == null) val = -1;
|
||||
//if (typeof val === 'string') val = Screen._findColor(val);
|
||||
if (val === -1) return 0x1ff;
|
||||
return val;
|
||||
}
|
||||
|
||||
function sattr(obj, fg, bg) {
|
||||
return ((((obj.invisible ? 16 : 0) << 18)
|
||||
| ((obj.inverse ? 8 : 0) << 18)
|
||||
|
|
Loading…
Reference in New Issue