Permalink
Browse files

add BigText element. fix video args.

  • Loading branch information...
1 parent de02802 commit 2b1203bb3aa7f77b0cd393da0af72086eafe0b9a @chjj committed Jul 11, 2015
Showing with 36,306 additions and 2 deletions.
  1. +29 −0 README.md
  2. +1 −0 lib/widget.js
  3. +149 −0 lib/widgets/bigtext.js
  4. +10 −2 lib/widgets/video.js
  5. +30 −0 test/widget-bigtext.js
  6. +1 −0 usr/fonts/AUTHORS
  7. +94 −0 usr/fonts/LICENSE
  8. +340 −0 usr/fonts/README
  9. +17,826 −0 usr/fonts/ter-u14b.json
  10. +17,826 −0 usr/fonts/ter-u14n.json
View
@@ -145,6 +145,7 @@ screen.render();
- [Line](#line-from-box)
- [ScrollableBox](#scrollablebox-from-box) (deprecated)
- [ScrollableText](#scrollabletext-from-scrollablebox) (deprecated)
+ - [BigText](#bigtext-from-box)
- [Lists](#lists)
- [List](#list-from-box)
- [FileManager](#filemanager-from-list)
@@ -754,6 +755,33 @@ pre-existing newlines and escape codes.
- Inherits all from ScrollableBox.
+#### BigText (from Box)
+
+A box which can render content drawn as 8x14 cell characters using the terminus
+font.
+
+##### Options:
+
+- Inherits all from Box.
+- __font__ - bdf->json font file to use (see [ttystudio][ttystudio] for
+ instructions on compiling BDFs to JSON).
+- __fontBold__ - bdf->json bold font file to use (see [ttystudio][ttystudio]
+ for instructions on compiling BDFs to JSON).
+- __fch__ - foreground character. (default: `' '`)
+
+##### Properties:
+
+- Inherits all from Box.
+
+##### Events:
+
+- Inherits all from Box.
+
+##### Methods:
+
+- Inherits all from Box.
+
+
### Lists
@@ -2239,3 +2267,4 @@ See LICENSE for more info.
[urwid]: http://urwid.org/reference/index.html
[curses-ui]: http://search.cpan.org/~mdxi/Curses-UI-0.9609/lib/Curses/UI.pm
[termbox]: https://github.com/nsf/termbox-go
+[ttystudio]: https://github.com/chjj/ttystudio#choosing-a-new-font-for-your-terminal-recording
View
@@ -15,6 +15,7 @@ widget.classes = [
'Line',
'ScrollableBox',
'ScrollableText',
+ 'BigText',
'List',
'Form',
'Input',
View
@@ -0,0 +1,149 @@
+/**
+ * bigtext.js - bigtext element for blessed
+ * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).
+ * https://github.com/chjj/blessed
+ */
+
+/**
+ * Modules
+ */
+
+var fs = require('fs');
+
+var helpers = require('../helpers');
+
+var Node = require('./node');
+var Box = require('./box');
+
+/**
+ * BigText
+ */
+
+function BigText(options) {
+ if (!(this instanceof Node)) {
+ return new BigText(options);
+ }
+ options = options || {};
+ options.font = options.font
+ || __dirname + '/../../usr/fonts/ter-u14n.json';
+ options.fontBold = options.font
+ || __dirname + '/../../usr/fonts/ter-u14b.json';
+ this.fch = options.fch;
+ this.ratio = {};
+ this.font = this.loadFont(options.font);
+ this.fontBold = this.loadFont(options.font);
+ Box.call(this, options);
+ if (this.style.bold) {
+ this.font = this.fontBold;
+ }
+}
+
+BigText.prototype.__proto__ = Box.prototype;
+
+BigText.prototype.type = 'bigtext';
+
+BigText.prototype.loadFont = function(filename) {
+ var self = this
+ , data
+ , font;
+
+ data = JSON.parse(fs.readFileSync(filename, 'utf8'));
+
+ this.ratio.width = data.width;
+ this.ratio.height = data.height;
+
+ function convertLetter(ch, lines) {
+ while (lines.length > self.ratio.height) {
+ lines.shift();
+ lines.pop();
+ }
+ lines = lines.map(function(line) {
+ var chs = line.split('');
+ chs = chs.map(function(ch) {
+ return ch === ' ' ? 0 : 1;
+ });
+ while (chs.length < self.ratio.width) chs.push(0);
+ return chs;
+ });
+ while (lines.length < self.ratio.height) lines.push([0, 0, 0, 0, 0, 0, 0, 0]);
+ return lines;
+ }
+
+ font = Object.keys(data.glyphs).reduce(function(out, ch) {
+ var lines = data.glyphs[ch].map;
+ out[ch] = convertLetter(ch, lines);
+ return out;
+ }, {});
+
+ delete font[' '];
+
+ return font;
+};
+
+BigText.prototype.setContent = function(content) {
+ this.content = '';
+ this.text = content || '';
+};
+
+BigText.prototype.render = function() {
+ if (this.position.width == null || this._shrinkWidth) {
+ // if (this.width - this.iwidth < this.ratio.width * this.text.length + 1) {
+ this.position.width = this.ratio.width * this.text.length + 1;
+ this._shrinkWidth = true;
+ // }
+ }
+ if (this.position.height == null || this._shrinkHeight) {
+ // if (this.height - this.iheight < this.ratio.height + 0) {
+ this.position.height = this.ratio.height + 0;
+ this._shrinkHeight = true;
+ // }
+ }
+
+ var coords = this._render();
+ if (!coords) return;
+
+ var lines = this.screen.lines
+ , left = coords.xi + this.ileft
+ , top = coords.yi + this.itop
+ , right = coords.xl - this.iright
+ , bottom = coords.yl - this.ibottom;
+
+ var dattr = this.sattr(this.style)
+ , bg = dattr & 0x1ff
+ , fg = (dattr >> 9) & 0x1ff
+ , flags = (dattr >> 18) & 0x1ff
+ , attr = (flags << 18) | (bg << 9) | fg;
+
+ for (var x = left, i = 0; x < right; x += this.ratio.width, i++) {
+ var ch = this.text[i];
+ if (!ch) break;
+ var map = this.font[ch];
+ if (!map) continue;
+ for (var y = top; y < Math.min(bottom, top + this.ratio.height); y++) {
+ if (!lines[y]) continue;
+ var mline = map[y - top];
+ if (!mline) continue;
+ for (var mx = 0; mx < this.ratio.width; mx++) {
+ var mcell = mline[mx];
+ if (mcell == null) break;
+ if (this.fch && this.fch !== ' ') {
+ lines[y][x + mx][0] = dattr;
+ lines[y][x + mx][1] = mcell === 1 ? this.fch : ' ';
+ } else {
+ lines[y][x + mx][0] = mcell === 1 ? attr : dattr;
+ lines[y][x + mx][1] = ' ';
+ }
+ }
+ lines[y].dirty = true;
+ }
+ }
+
+ return coords;
+};
+
+/**
+ * Expose
+ */
+
+module.exports = BigText;
+
View
@@ -61,7 +61,11 @@ function Video(options) {
this.now = Date.now() / 1000 | 0;
this.start = opts.start || 0;
if (this.start) {
- opts.args.unshift('--start', this.start + '');
+ if (shell === 'mplayer') {
+ opts.args.unshift('-ss', this.start + '');
+ } else if (shell === 'mpv') {
+ opts.args.unshift('--start', this.start + '');
+ }
}
var DISPLAY = process.env.DISPLAY;
@@ -91,7 +95,11 @@ function Video(options) {
var watched = (Date.now() / 1000 | 0) - self.now;
self.now = Date.now() / 1000 | 0;
self.start += watched;
- opts.args.unshift('--start', self.start + '');
+ if (shell === 'mplayer') {
+ opts.args.unshift('-ss', self.start + '');
+ } else if (shell === 'mpv') {
+ opts.args.unshift('--start', self.start + '');
+ }
var DISPLAY = process.env.DISPLAY;
delete process.env.DISPLAY;
@@ -0,0 +1,30 @@
+var blessed = require('../')
+ , screen;
+
+screen = blessed.screen({
+ dump: __dirname + '/logs/bigtext.log',
+ smartCSR: true
+});
+
+var box = blessed.bigtext({
+ parent: screen,
+ content: 'Hello',
+ shrink: true,
+ width: '80%',
+ // height: '80%',
+ height: 'shrink',
+ // width: 'shrink',
+ border: 'line',
+ fch: ' ',
+ style: {
+ fg: 'red',
+ bold: false
+ }
+});
+
+screen.key('q', function() {
+ return process.exit(0);
+});
+
+screen.render();
+
View
@@ -0,0 +1 @@
+Dimitar Zhekov <[email protected]>
View
@@ -0,0 +1,94 @@
+Copyright (c) 2014 Dimitar Toshkov Zhekov,
+with Reserved Font Name "Terminus Font".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
Oops, something went wrong.

0 comments on commit 2b1203b

Please sign in to comment.