Commit Graph
43 Commits
Author SHA1 Message Date
Jörg Breitbart 0340d91150 first step to buffer redesign: class TerminalLine; discourage low level index access to cells 2018-08-25 22:41:42 +02:00
Daniel Imms c65dd1f476 Use const for null cell
Fixes #1584
2018-07-29 13:05:27 -07:00
Jeff Principe 63b3a6f323 Factor logic into registry, make matches cell-based and document 2018-07-08 11:30:54 -07:00
Daniel Imms 6d9d2a3304 Merge remote-tracking branch 'origin/master' into pr/princjef/1460 2018-07-03 11:50:07 -07:00
Daniel Imms ee935cc68c Add a null check to charatlas beginFrame call
Fixes #1511
2018-06-12 17:27:36 +02:00
Jeff Principe eabb25c796 add ability to register/deregister character joiner 2018-06-02 10:24:52 -07:00
Benjamin Woodruff 7f761b5b9e Merge branch 'master' into dynamic-char-atlas
I did a bunch of testing of various ansi escape codes (including
italics) with all three char atlas implementations (none, static,
dynamic), with and without `drawBoldTextInBrightColors`, and with and
without `enableBold` to test all of the edge cases that I could.
2018-05-17 22:42:52 -07:00
Linus Unnebäck 41fd563144 Separate bright and bold 2018-05-07 22:19:01 +02:00
Daniel Imms b60ab119b2 Merge branch 'master' into italic 2018-05-01 11:30:03 -07:00
Brandon Bayer 235982362c Add support for italic rendering 2018-04-26 17:34:01 -04:00
Benjamin Woodruff a5a03c40f2 Batch background draws together to reduce draws
Adjacent cells on the same row sharing the same background color will be
drawn using the same `fillCells` call. This should make drawing an
application with a solid or mostly solid background color (e.g. vim)
faster.

I set vim to draw the background color for a file, and started scrolling
through it. Before, _drawBackground was taking around 6ms per frame.
After this commit, it was taking around 0.5ms per frame.

Based on prior experience, I'd expect these results to be more drastic
for larger terminal windows. The demo's window is pretty small.
2018-04-24 23:52:13 -07:00
Benjamin Woodruff 453da35f51 Merge branch 'master' into dynamic-char-atlas 2018-04-23 22:43:43 -07:00
Benjamin Woodruff 0fe59df2e9 Rename startRow/endRow in TextRenderLayer
Renaming these to firstRow/lastRow makes the inclusivity of the range
clearer.

Addresses this comment:
https://github.com/xtermjs/xterm.js/pull/1393#discussion_r182471582
2018-04-18 20:22:55 -07:00
Benjamin Woodruff b853aa4929 Separate foreground & background rendering passes
I'm primarily interested in doing this because it'll allow me to
optimize the background rendering in later diffs, but this may also make
it possible to fix some minor rendering issues.

Right now, if we draw a single-width character that overflows its cell's
bounds, and the character to the right of it has a background, that
background may cover up the first character's foreground. By drawing the
background in a separate pass, we can avoid those cases.

There's still some issues with how dirty regions are computed that makes
rendering stuff like that flaky, but this at least gets us closer to
"correct" rendering.

Other terminal emulators (e.g. alacritty) render the foreground and
background in separate passes:
https://github.com/jwilm/alacritty/blob/1b7ffea/src/renderer/mod.rs#L766
2018-04-17 21:44:17 -07:00
Benjamin Woodruff 5a05db727c Add a per-frame limit on dynamic atlas writes
This limits the amount of damage a pathological program can cause in
thrashing the LRU cache.

I ran the script described here:
https://github.com/xtermjs/xterm.js/pull/1327#issuecomment-374003960

Without this patch, the entire output would get drawn in one frame that
took about 140 ms to draw. With this patch, it takes about 60 ms. It's
still nowhere as good as the static or none atlas implementations, but
it's not terrible, like it was.

This should have minimal impact on real-world applications: it'll just
take a little longer for the atlas to warm up.

The implementation is a little hacky, since it involves throwing some
code into TextRenderLayer that violates the separation of concerns, but
we can clean this up later.
2018-04-15 20:02:39 -07:00
Benjamin Woodruff 0cb6138cd0 Allow theming with arbitrary CSS color strings
This mostly worked before, but clearColor made the assumption that the
colors were always in #RRBBGG format. See the discussion here:
https://github.com/xtermjs/xterm.js/pull/1327#issuecomment-374812842

This changes the internal representation of a color so that we hold onto
into an object containing the original css string along with an RGBA
value encoded as a 32-bit uint. clearColor can then use that RGBA
representation.

Additionally, this deduplicates some code between ColorManager and
Terminal. Terminal was generating the 256 ansi colors the same way
ColorManager was, so this just makes Terminal use the same constant.
2018-03-26 09:47:25 -07:00
Daniel Imms 4443ed69c7 Add noUnusedLocals tsconfig flag, fix issues
Two parts were commented out:
- _writeStopped: This is because _xoffSentToCatchUp references this variable
  and the feature is sort of half implemented/disabled.
- _clearChar: This is because some comments still reference this, it's part
  of the work needed to do better line redrawing.
2018-03-08 10:56:10 -08:00
Daniel Imms 404a285eaf Merge pull request #1307 from bgw/split-char-atlas-files
Split CharAtlas types and utility functions off
2018-03-08 05:16:44 -08:00
Benjamin Woodruff 70771430b5 Clean up char atlas constant imports/exports
- Ensures that everything is only defined in one place, and everything
  imports from that place.
- Moves CHAR_ATLAS_CELL_SPACING into a subdirectory of shared/ so that
  CharAtlasGenerator can pull from it.

This addresses the comments on
https://github.com/xtermjs/xterm.js/pull/1307/files/454fd4bfb1ab5c9ece
2018-03-07 22:13:41 -08:00
Benjamin Woodruff 18fb134910 Remove didCharSizeChange logic from renderer
The only thing `didCharSizeChange` was used for was to figure out if we
need to refresh the character atlas or not. However, `acquireCharAtlas`
already inspects the atlas owned by this terminal, and if it matches, it
avoids generating a new atlas.

So if `didCharSizeChange` is true and it's not needed, it quickly bails
out as a no-op. But if `didCharSizeChange` is false, and it was needed
(possible given the complexity of testing all of these edge cases), it
could introduce a bug.

I think it makes sense to just get rid of `didCharSizeChange`, and just
always call `acquireCharAtlas`.
2018-03-04 20:55:42 -08:00
Daniel Imms 106704b5d8 Merge remote-tracking branch 'ups/master' into pr/1148 2018-01-28 13:39:07 -08:00
CHaBou fe53e1a091 Change canvas transparency when option is updated 2018-01-25 23:20:20 +01:00
Daniel Imms 2e23dd34e0 Move xterm-internal types back into Types.ts files 2018-01-25 11:06:52 -08:00
Daniel Imms 7358890a31 Merge remote-tracking branch 'ups/master' into 1221_iterminal_typings 2018-01-25 09:45:13 -08:00
Daniel Imms 067acd8803 Merge branch 'master' into pr/1148 2018-01-23 08:33:55 -08:00
Daniel Imms e4abd4dd8a Move Shared interfaces into a new typings file
This will enable sharing the internal interface with addons (and catching
breakages early)
2018-01-19 09:48:33 -08:00
Bruno Ribeiro b8f2832ed4 Merge branch 'master' into 1117 2018-01-18 21:10:09 +00:00
Daniel Imms 53e1f83bb5 Update tslint, fix lint 2018-01-17 10:23:27 -08:00
CHaBou 9c5aaed441 Fix some function parameters 2017-12-15 00:02:37 +01:00
CHaBou 9f85790ad1 Add allowTransparency option
Fixes #1004
2017-12-14 22:55:01 +01:00
Bruno Ribeito 51de968fde Fix non-white colors not being drawn as bold 2017-11-12 23:05:27 +00:00
Bruno Ribeito 007410995a Fix#1117 2017-11-12 22:04:10 +00:00
Thomas Zilz b6c886837f Add support for dimmed characters (faint) (#1043)
* Add support for dimmed character style
2017-10-11 20:24:26 +02:00
Daniel Imms 3c2614ade7 Merge pull request #1017 from Tyriar/1015_fix_emoji_selection
Fix several issues related to emojis
2017-10-06 09:23:03 -07:00
Daniel Imms 06b9f1db87 Always draw entire line and allow overlapping
State/diffing code is kept in comments as it may be reinstated soon.

Fixes #1035
Fixes #1036
Fixes #1032
Fixes #1037
2017-10-05 23:25:03 -07:00
Daniel Imms 356a14bb16 Fix non-default backgrounds on left cell of wide/overlapping chars
Fixes #1031
2017-10-05 20:30:09 -07:00
Daniel Imms 108534a4fe Fix null pointer exception 2017-10-05 20:09:17 -07:00
Daniel Imms 3e29a03f87 Fix rendering issues for emojis that come out as wide chars
The fix is to disallow non-single cell width chars to be overlapping
2017-09-30 07:54:52 -04:00
Thomas Zilz c4da8325ac Allow all overflowing characters to extend to the next cell if followed by a space (Emojis etc) (#997)
* Measure characters and thread them if they are overlapping

* Fix whitespace

* Use charData and ctx.save/restore, code cleanup

* Fix trailing whitespace
2017-09-17 10:39:09 +02:00
Thomas Zilz c815310418 Fix inverted cells, make sure inverted cells are cleared correctly (#996)
* Corretly inverse foreground and background. Be more conservative when clearing

* add missing space

* Re-enable optimisation with better checks

* Fix insversed check
2017-09-16 20:36:55 +02:00
Daniel Imms aca7ab63e8 Set background color on Renderer immediately
Prevents black flash on init
2017-09-14 00:22:57 -07:00
Daniel Imms 872c007a29 Finish merging bg and fg layers 2017-09-13 23:15:21 -07:00
Daniel Imms 3656617044 Start merging fg/bg layers, draw using SP-AA 2017-09-13 15:21:40 -07:00