Merge pull request #385 from mattrose/revert-74

Revert 74
This commit is contained in:
Matt Rose 2021-02-18 17:44:01 -05:00 committed by GitHub
commit ee8c51d10e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 52 additions and 42 deletions

View File

@ -6,7 +6,6 @@
import os import os
import signal import signal
import gi import gi
import cairo
from gi.repository import GLib, GObject, Pango, Gtk, Gdk, GdkPixbuf from gi.repository import GLib, GObject, Pango, Gtk, Gdk, GdkPixbuf
gi.require_version('Vte', '2.91') # vte-0.38 (gnome-3.14) gi.require_version('Vte', '2.91') # vte-0.38 (gnome-3.14)
from gi.repository import Vte from gi.repository import Vte
@ -32,32 +31,6 @@ from . import plugin
from terminatorlib.layoutlauncher import LayoutLauncher from terminatorlib.layoutlauncher import LayoutLauncher
from . import regex from . import regex
class Overpaint(Vte.Terminal):
def __init__(self):
Vte.Terminal.__init__(self)
self.config = Config()
### inactive_color_offset is the opposite of alpha level
self.dim_p = float(self.config['inactive_color_offset'])
self.dim_l = round(1.0 - self.dim_p,3)
def dim(self,b):
self.overpaint = b
def do_draw(self,cr):
### get_color_background_for_draw is not available in older
### versions of vte
try:
bgc = Vte.Terminal.get_color_background_for_draw(self)
except AttributeError as e:
bgc = Gdk.RGBA()
bgc.parse(self.config['background_color'])
Vte.Terminal.do_draw(self,cr)
if self.overpaint:
bgc.alpha = self.dim_l
cr.set_operator(cairo.Operator.OVER)
Gdk.cairo_set_source_rgba(cr,bgc)
cr.rectangle(0.0,0.0,self.get_allocated_width(),self.get_allocated_height())
cr.paint()
# pylint: disable-msg=R0904 # pylint: disable-msg=R0904
class Terminal(Gtk.VBox): class Terminal(Gtk.VBox):
"""Class implementing the VTE widget and its wrappings""" """Class implementing the VTE widget and its wrappings"""
@ -132,8 +105,10 @@ class Terminal(Gtk.VBox):
is_held_open = False is_held_open = False
fgcolor_active = None fgcolor_active = None
fgcolor_inactive = None
bgcolor = None bgcolor = None
palette_active = None palette_active = None
palette_inactive = None
composite_support = None composite_support = None
@ -163,9 +138,7 @@ class Terminal(Gtk.VBox):
self.pending_on_vte_size_allocate = False self.pending_on_vte_size_allocate = False
self.vte = Overpaint() self.vte = Vte.Terminal()
self.vte.dim(False)
self.queue_draw()
self.background_image = None self.background_image = None
if self.config['background_image'] != '': if self.config['background_image'] != '':
try: try:
@ -743,23 +716,58 @@ class Terminal(Gtk.VBox):
else: else:
self.bgcolor.alpha = 1 self.bgcolor.alpha = 1
factor = self.config['inactive_color_offset']
if factor > 1.0:
factor = 1.0
self.fgcolor_inactive = self.fgcolor_active.copy()
dbg(("fgcolor_inactive set to: RGB(%s,%s,%s)", getattr(self.fgcolor_inactive, "red"),
getattr(self.fgcolor_inactive, "green"),
getattr(self.fgcolor_inactive, "blue")))
for bit in ['red', 'green', 'blue']:
setattr(self.fgcolor_inactive, bit,
getattr(self.fgcolor_inactive, bit) * factor)
dbg(("fgcolor_inactive set to: RGB(%s,%s,%s)", getattr(self.fgcolor_inactive, "red"),
getattr(self.fgcolor_inactive, "green"),
getattr(self.fgcolor_inactive, "blue")))
colors = self.config['palette'].split(':') colors = self.config['palette'].split(':')
self.palette_active = [] self.palette_active = []
for color in colors: for color in colors:
if color: if color:
newcolor = Gdk.RGBA() newcolor = Gdk.RGBA()
newcolor.parse(color) newcolor.parse(color)
self.palette_active.append(newcolor) self.palette_active.append(newcolor)
self.vte.set_colors(self.fgcolor_active, self.bgcolor, if len(colors) == 16:
self.palette_active) # RGB values for indices 16..255 copied from vte source in order to dim them
shades = [0, 95, 135, 175, 215, 255]
for r in range(0, 6):
for g in range(0, 6):
for b in range(0, 6):
newcolor = Gdk.RGBA()
setattr(newcolor, "red", shades[r] / 255.0)
setattr(newcolor, "green", shades[g] / 255.0)
setattr(newcolor, "blue", shades[b] / 255.0)
self.palette_active.append(newcolor)
for y in range(8, 248, 10):
newcolor = Gdk.RGBA()
setattr(newcolor, "red", y / 255.0)
setattr(newcolor, "green", y / 255.0)
setattr(newcolor, "blue", y / 255.0)
self.palette_active.append(newcolor)
self.palette_inactive = []
for color in self.palette_active:
newcolor = Gdk.RGBA()
for bit in ['red', 'green', 'blue']:
setattr(newcolor, bit,
getattr(color, bit) * factor)
self.palette_inactive.append(newcolor)
if self.terminator.last_focused_term == self: if self.terminator.last_focused_term == self:
self.vte.dim(False) self.vte.set_colors(self.fgcolor_active, self.bgcolor,
self.queue_draw() self.palette_active)
else: else:
self.vte.dim(True) self.vte.set_colors(self.fgcolor_inactive, self.bgcolor,
self.queue_draw() self.palette_inactive)
profiles = self.config.base.profiles profiles = self.config.base.profiles
terminal_box_style_context = self.terminalbox.get_style_context() terminal_box_style_context = self.terminalbox.get_style_context()
for profile in list(profiles.keys()): for profile in list(profiles.keys()):
@ -1265,8 +1273,9 @@ class Terminal(Gtk.VBox):
def on_vte_focus_in(self, _widget, _event): def on_vte_focus_in(self, _widget, _event):
"""Inform other parts of the application when focus is received""" """Inform other parts of the application when focus is received"""
self.vte.dim(False) self.vte.set_colors(self.fgcolor_active, self.bgcolor,
self.queue_draw() self.palette_active)
self.set_cursor_color()
if not self.terminator.doing_layout: if not self.terminator.doing_layout:
self.terminator.last_focused_term = self self.terminator.last_focused_term = self
if self.get_toplevel().is_child_notebook(): if self.get_toplevel().is_child_notebook():
@ -1280,8 +1289,9 @@ class Terminal(Gtk.VBox):
def on_vte_focus_out(self, _widget, _event): def on_vte_focus_out(self, _widget, _event):
"""Inform other parts of the application when focus is lost""" """Inform other parts of the application when focus is lost"""
self.vte.dim(True) self.vte.set_colors(self.fgcolor_inactive, self.bgcolor,
self.queue_draw() self.palette_inactive)
self.set_cursor_color()
self.emit('focus-out') self.emit('focus-out')
def on_window_focus_out(self): def on_window_focus_out(self):