render: whole-window transparency when unfocused

This adds a new option, colors.unfocused-alpha. When set to a value <
1.0, the entire window (*everything* - all bg/fg colors, images etc)
are made transparent while the window does not have keyboard focus.

The way this is implemented (trying to keep the patch small), we need
to do full-screen repaints while in this mode.

That is, all screen updates result in full-screen repaints when:

* The window does not have keyboard focus
* The window *just* gained keyboard focus (i.e. last frame was
  rendered with transparency)

As such, one can expect a fairly large performance impact when there’s
large amount of output while the window is unfocused.

Focused windows are unaffected, as are unfocused windows when
colors.unfocused-alpha == 1.0.
This commit is contained in:
Daniel Eklöf 2021-08-11 17:36:42 +02:00
parent 2fbc336eb9
commit 9013a810f1
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
7 changed files with 57 additions and 0 deletions

View file

@ -554,6 +554,7 @@ struct terminal {
struct buffer *last_buf; /* Buffer we rendered to last time */
bool was_flashing; /* Flash was active last time we rendered */
bool was_searching;
bool was_focused;
size_t search_glyph_offset;