add "shadow" option to elements. see widget-shadow.js.
This commit is contained in:
parent
67bdab7e4f
commit
8a62f5e633
|
@ -426,9 +426,7 @@ The base element.
|
||||||
- __scrollable__ - whether the element is scrollable or not.
|
- __scrollable__ - whether the element is scrollable or not.
|
||||||
- __ch__ - background character (default is whitespace ` `).
|
- __ch__ - background character (default is whitespace ` `).
|
||||||
- __draggable__ - allow the element to be dragged with the mouse.
|
- __draggable__ - allow the element to be dragged with the mouse.
|
||||||
- __dockBorders__ - automatically "dock" borders with other elements instead of
|
- __shadow__ - draw a translucent offset shadow behind the element.
|
||||||
overlapping, depending on position (__experimental__). see Screen
|
|
||||||
documentation of `dockBorders` option.
|
|
||||||
|
|
||||||
##### Properties:
|
##### Properties:
|
||||||
|
|
||||||
|
|
|
@ -2036,8 +2036,8 @@ function Element(options) {
|
||||||
this.position = options.position;
|
this.position = options.position;
|
||||||
|
|
||||||
this.noOverflow = options.noOverflow;
|
this.noOverflow = options.noOverflow;
|
||||||
|
|
||||||
this.dockBorders = options.dockBorders;
|
this.dockBorders = options.dockBorders;
|
||||||
|
this.shadow = options.shadow;
|
||||||
|
|
||||||
this.style = options.style;
|
this.style = options.style;
|
||||||
|
|
||||||
|
@ -4107,6 +4107,30 @@ Element.prototype.render = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.shadow) {
|
||||||
|
// right
|
||||||
|
y = yi + this.itop + 1;
|
||||||
|
for (; y < yl + 1; y++) {
|
||||||
|
if (!lines[y]) continue;
|
||||||
|
x = xl;
|
||||||
|
for (; x < xl + 2; x++) {
|
||||||
|
if (!lines[y][x]) continue;
|
||||||
|
lines[y][x][0] = darken(lines[y][x][0]);
|
||||||
|
lines[y].dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// bottom
|
||||||
|
y = yl;
|
||||||
|
for (; y < yl + 1; y++) {
|
||||||
|
if (!lines[y]) continue;
|
||||||
|
for (x = xi + this.ileft + 1; x < xl; x++) {
|
||||||
|
if (!lines[y][x]) continue;
|
||||||
|
lines[y][x][0] = darken(lines[y][x][0]);
|
||||||
|
lines[y].dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.children.forEach(function(el) {
|
this.children.forEach(function(el) {
|
||||||
if (el.screen._ci !== -1) {
|
if (el.screen._ci !== -1) {
|
||||||
el.index = el.screen._ci++;
|
el.index = el.screen._ci++;
|
||||||
|
@ -8732,6 +8756,45 @@ function getAngle(x, y, lines) {
|
||||||
return angleTable[angle] || ch;
|
return angleTable[angle] || ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function darken(attr) {
|
||||||
|
var bg = attr & 0x1ff;
|
||||||
|
if (bg < 8) {
|
||||||
|
bg += 8;
|
||||||
|
} else if (bg >= 8 && bg <= 15) {
|
||||||
|
bg -= 8;
|
||||||
|
} else {
|
||||||
|
var name = colors.ncolors[bg];
|
||||||
|
for (var i = 0; i < colors.ncolors.length; i++) {
|
||||||
|
if (name === colors.ncolors[i] && bg !== i) {
|
||||||
|
bg = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attr &= ~0x1ff;
|
||||||
|
attr |= bg;
|
||||||
|
|
||||||
|
var fg = (attr >> 9) & 0x1ff;
|
||||||
|
if (fg < 8) {
|
||||||
|
fg += 8;
|
||||||
|
} else if (fg >= 8 && fg <= 15) {
|
||||||
|
fg -= 8;
|
||||||
|
} else {
|
||||||
|
var name = colors.ncolors[fg];
|
||||||
|
for (var i = 0; i < colors.ncolors.length; i++) {
|
||||||
|
if (name === colors.ncolors[i] && fg !== i) {
|
||||||
|
fg = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
attr &= ~(0x1ff << 9);
|
||||||
|
attr |= fg << 9;
|
||||||
|
|
||||||
|
return attr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helpers
|
* Helpers
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
var blessed = require('../')
|
||||||
|
, screen;
|
||||||
|
|
||||||
|
screen = blessed.screen({
|
||||||
|
dump: __dirname + '/logs/shadow.log',
|
||||||
|
smartCSR: true,
|
||||||
|
dockBorders: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var bg = blessed.box({
|
||||||
|
parent: screen,
|
||||||
|
shadow: true,
|
||||||
|
left: 0,
|
||||||
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
style: {
|
||||||
|
bg: 'lightblue'
|
||||||
|
},
|
||||||
|
content: 'Foo'
|
||||||
|
});
|
||||||
|
|
||||||
|
var over = blessed.box({
|
||||||
|
parent: screen,
|
||||||
|
shadow: true,
|
||||||
|
left: 'center',
|
||||||
|
top: 'center',
|
||||||
|
width: '50%',
|
||||||
|
height: '50%',
|
||||||
|
style: {
|
||||||
|
bg: 'red'
|
||||||
|
},
|
||||||
|
content: 'Foo'
|
||||||
|
});
|
||||||
|
|
||||||
|
screen.key('q', function() {
|
||||||
|
return process.exit(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
var lorem = 'Non eram nescius Brute cum quae summis ingeniis exquisitaque'
|
||||||
|
+ ' doctrina philosophi Graeco sermone tractavissent ea Latinis litteris mandaremus'
|
||||||
|
+ ' fore ut hic noster labor in varias reprehensiones incurreret nam quibusdam et'
|
||||||
|
+ ' iis quidem non admodum indoctis totum hoc displicet philosophari quidam autem'
|
||||||
|
+ ' non tam id reprehendunt si remissius agatur sed tantum studium tamque multam'
|
||||||
|
+ ' operam ponendam in eo non arbitrantur erunt etiam et ii quidem eruditi Graecis'
|
||||||
|
+ ' litteris contemnentes Latinas qui se dicant in Graecis legendis operam malle'
|
||||||
|
+ ' consumere postremo aliquos futuros suspicor qui me ad alias litteras vocent'
|
||||||
|
+ ' genus hoc scribendi etsi sit elegans personae tamen et dignitatis esse negent'
|
||||||
|
+ ' Contra quos omnis dicendum breviter existimo Quamquam philosophiae quidem'
|
||||||
|
+ ' vituperatoribus satis responsum est eo libro quo a nobis philosophia defensa et'
|
||||||
|
+ ' collaudata est cum esset accusata et vituperata ab Hortensio qui liber cum et'
|
||||||
|
+ ' tibi probatus videretur et iis quos ego posse iudicare arbitrarer plura suscepi'
|
||||||
|
+ ' veritus ne movere hominum studia viderer retinere non posse Qui autem si maxime'
|
||||||
|
+ ' hoc placeat moderatius tamen id volunt fieri difficilem quandam temperantiam'
|
||||||
|
+ ' postulant in eo quod semel admissum coerceri reprimique non potest ut'
|
||||||
|
+ ' propemodum iustioribus utamur illis qui omnino avocent a philosophia quam his'
|
||||||
|
+ ' qui rebus infinitis modum constituant in reque eo meliore quo maior sit'
|
||||||
|
+ ' mediocritatem desiderent Sive enim ad sapientiam perveniri potest non paranda'
|
||||||
|
+ ' nobis solum ea sed fruenda etiam sapientia est sive hoc difficile est tamen nec'
|
||||||
|
+ ' modus est ullus investigandi veri nisi inveneris et quaerendi defatigatio'
|
||||||
|
+ ' turpis est cum id quod quaeritur sit pulcherrimum etenim si delectamur cum'
|
||||||
|
+ ' scribimus quis est tam invidus qui ab eo nos abducat sin laboramus quis est qui'
|
||||||
|
+ ' alienae modum statuat industriae nam ut Terentianus Chremes non inhumanus qui'
|
||||||
|
+ ' novum vicinum non vult fodere aut arare aut aliquid ferre denique non enim'
|
||||||
|
+ ' illum ab industria sed ab inliberali labore deterret sic isti curiosi quos'
|
||||||
|
+ ' offendit noster minime nobis iniucundus labor Iis igitur est difficilius satis'
|
||||||
|
+ ' facere qui se Latina scripta dicunt contemnere in quibus hoc primum est in quo'
|
||||||
|
+ ' admirer cur in gravissimis rebus non delectet eos sermo patrius cum idem'
|
||||||
|
+ ' fabellas Latinas ad verbum e Graecis expressas non inviti legant quis enim tam'
|
||||||
|
+ ' inimicus paene nomini Romano est qui Ennii Medeam aut Antiopam Pacuvii spernat'
|
||||||
|
+ ' aut reiciat quod se isdem Euripidis fabulis delectari dicat Latinas litteras'
|
||||||
|
+ ' oderit Quid si nos non interpretum fungimur munere sed tuemur ea quae dicta'
|
||||||
|
+ ' sunt ab iis quos probamus eisque nostrum iudicium et nostrum scribendi ordinem'
|
||||||
|
+ ' adiungimus quid habent cur Graeca anteponant iis quae et splendide dicta sint'
|
||||||
|
+ ' neque sint conversa de Graecis nam si dicent ab illis has res esse tractatas ne'
|
||||||
|
+ ' ipsos quidem Graecos est cur tam multos legant quam legendi sunt quid enim est'
|
||||||
|
+ ' a Chrysippo praetermissum in Stoicis legimus tamen Diogenem Antipatrum'
|
||||||
|
+ ' Mnesarchum Panaetium multos alios in primisque familiarem nostrum Posidonium'
|
||||||
|
+ ' quid Theophrastus mediocriterne delectat cum tractat locos ab Aristotele ante'
|
||||||
|
+ ' tractatos quid Epicurei num desistunt de isdem de quibus et ab Epicuro scriptum'
|
||||||
|
+ ' est et ab antiquis ad arbitrium suum scribere quodsi Graeci leguntur a Graecis'
|
||||||
|
+ ' isdem de rebus alia ratione compositis quid est cur nostri a nostris non'
|
||||||
|
+ ' legantur';
|
||||||
|
|
||||||
|
bg.setContent(lorem);
|
||||||
|
|
||||||
|
screen.render();
|
Loading…
Reference in New Issue