diff --git a/kitty/cell_vertex.glsl b/kitty/cell_vertex.glsl index 5b69c5fc7..2a5b0e1dd 100644 --- a/kitty/cell_vertex.glsl +++ b/kitty/cell_vertex.glsl @@ -47,6 +47,7 @@ out float bg_alpha; #ifdef NEEDS_FOREGROUND uniform float inactive_text_alpha; +uniform float dim_opacity; out vec3 sprite_pos; out vec3 underline_pos; out vec3 strike_pos; @@ -152,7 +153,7 @@ void main() { uint resolved_fg = resolve_color(colors[fg_index], default_colors[fg_index]); foreground = color_to_vec(resolved_fg); float has_dim = float((text_attrs >> DIM_SHIFT) & ONE); - effective_text_alpha = inactive_text_alpha * mix(1.0, 0.75, has_dim); + effective_text_alpha = inactive_text_alpha * mix(1.0, dim_opacity, has_dim); // Selection foreground = choose_color(float(is_selected & ONE), color_to_vec(highlight_fg), foreground); // Underline and strike through (rendered via sprites) diff --git a/kitty/config.py b/kitty/config.py index a62f2b8c1..684b48b0d 100644 --- a/kitty/config.py +++ b/kitty/config.py @@ -356,6 +356,7 @@ type_map = { 'macos_titlebar_color': macos_titlebar_color, 'box_drawing_scale': box_drawing_scale, 'background_opacity': unit_float, + 'dim_opacity': unit_float, 'tab_separator': tab_separator, 'active_tab_font_style': tab_font_style, 'inactive_tab_font_style': tab_font_style, diff --git a/kitty/kitty.conf b/kitty/kitty.conf index 9b7f47e6e..c63276aa3 100644 --- a/kitty/kitty.conf +++ b/kitty/kitty.conf @@ -259,6 +259,10 @@ background #000000 # Be aware that using a value less than 1.0 is a (possibly significant) performance hit. background_opacity 1.0 +# How much to dim text that has the DIM/FAINT attribute set. 1.0 means no dimming and +# 0.0 means fully dimmed (i.e. invisible). +dim_opacity 0.75 + # The foreground for selections selection_foreground #000000 diff --git a/kitty/shaders.c b/kitty/shaders.c index 1c8f0afc9..111f187a8 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -394,9 +394,10 @@ set_cell_uniforms(float current_inactive_text_alpha) { cell_uniform_data.gpploc = glGetUniformLocation(program_id(GRAPHICS_PREMULT_PROGRAM), "inactive_text_alpha"); cell_uniform_data.cploc = glGetUniformLocation(program_id(CELL_PROGRAM), "inactive_text_alpha"); cell_uniform_data.cfploc = glGetUniformLocation(program_id(CELL_FG_PROGRAM), "inactive_text_alpha"); -#define S(prog, name, val) { bind_program(prog); glUniform1i(glGetUniformLocation(program_id(prog), #name), val); } - S(GRAPHICS_PROGRAM, image, GRAPHICS_UNIT); S(GRAPHICS_PREMULT_PROGRAM, image, GRAPHICS_UNIT); - S(CELL_PROGRAM, sprites, SPRITE_MAP_UNIT); S(CELL_FG_PROGRAM, sprites, SPRITE_MAP_UNIT); +#define S(prog, name, val, type) { bind_program(prog); glUniform##type(glGetUniformLocation(program_id(prog), #name), val); } + S(GRAPHICS_PROGRAM, image, GRAPHICS_UNIT, 1i); S(GRAPHICS_PREMULT_PROGRAM, image, GRAPHICS_UNIT, 1i); + S(CELL_PROGRAM, sprites, SPRITE_MAP_UNIT, 1i); S(CELL_FG_PROGRAM, sprites, SPRITE_MAP_UNIT, 1i); + S(CELL_PROGRAM, dim_opacity, OPT(dim_opacity), 1f); S(CELL_FG_PROGRAM, dim_opacity, OPT(dim_opacity), 1f); #undef S cell_uniform_data.constants_set = true; } diff --git a/kitty/state.c b/kitty/state.c index a9f1caa4e..f8768741f 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -359,6 +359,7 @@ PYWRAP1(set_options) { S(cursor_blink_interval, PyFloat_AsDouble); S(cursor_stop_blinking_after, PyFloat_AsDouble); S(background_opacity, PyFloat_AsDouble); + S(dim_opacity, PyFloat_AsDouble); S(inactive_text_alpha, PyFloat_AsDouble); S(window_padding_width, PyFloat_AsDouble); S(cursor_shape, PyLong_AsLong); diff --git a/kitty/state.h b/kitty/state.h index a72dac8d0..cce0cb217 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -26,7 +26,7 @@ typedef struct { bool macos_option_as_alt, macos_hide_titlebar, macos_hide_from_tasks; int adjust_line_height_px, adjust_column_width_px; float adjust_line_height_frac, adjust_column_width_frac; - float background_opacity; + float background_opacity, dim_opacity; float inactive_text_alpha; float window_padding_width; Edge tab_bar_edge;