Merge branch 'beam_thickness_configurable' of https://github.com/noomly/kitty

This commit is contained in:
Kovid Goyal 2020-02-06 17:49:34 +05:30
commit 53e059f4f7
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
5 changed files with 9 additions and 5 deletions

View File

@ -394,6 +394,8 @@ Choose the color of text under the cursor. If you want it rendered with the
background color of the cell underneath instead, use the special keyword: background''')) background color of the cell underneath instead, use the special keyword: background'''))
o('cursor_shape', 'block', option_type=to_cursor_shape, long_text=_( o('cursor_shape', 'block', option_type=to_cursor_shape, long_text=_(
'The cursor shape can be one of (block, beam, underline)')) 'The cursor shape can be one of (block, beam, underline)'))
o('cursor_beam_thickness', 1.5, option_type=positive_float, long_text=_(
'Defines the thickness of the beam cursor'))
o('cursor_blink_interval', -1, option_type=float, long_text=_(''' o('cursor_blink_interval', -1, option_type=float, long_text=_('''
The interval (in seconds) at which to blink the cursor. Set to zero to disable The interval (in seconds) at which to blink the cursor. Set to zero to disable
blinking. Negative values mean use system default. Note that numbers smaller blinking. Negative values mean use system default. Note that numbers smaller

View File

@ -1232,7 +1232,7 @@ send_prerendered_sprites(FontGroup *fg) {
current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, x, y, z, fg->canvas); current_send_sprite_to_gpu((FONTS_DATA_HANDLE)fg, x, y, z, fg->canvas);
do_increment(fg, &error); do_increment(fg, &error);
if (error != 0) { sprite_map_set_error(error); PyErr_Print(); fatal("Failed"); } if (error != 0) { sprite_map_set_error(error); PyErr_Print(); fatal("Failed"); }
PyObject *args = PyObject_CallFunction(prerender_function, "IIIIIdd", fg->cell_width, fg->cell_height, fg->baseline, fg->underline_position, fg->underline_thickness, fg->logical_dpi_x, fg->logical_dpi_y); PyObject *args = PyObject_CallFunction(prerender_function, "IIIIIfdd", fg->cell_width, fg->cell_height, fg->baseline, fg->underline_position, fg->underline_thickness, OPT(cursor_beam_thickness), fg->logical_dpi_x, fg->logical_dpi_y);
if (args == NULL) { PyErr_Print(); fatal("Failed to pre-render cells"); } if (args == NULL) { PyErr_Print(); fatal("Failed to pre-render cells"); }
for (ssize_t i = 0; i < PyTuple_GET_SIZE(args) - 1; i++) { for (ssize_t i = 0; i < PyTuple_GET_SIZE(args) - 1; i++) {
x = fg->sprite_tracker.x; y = fg->sprite_tracker.y; z = fg->sprite_tracker.z; x = fg->sprite_tracker.x; y = fg->sprite_tracker.y; z = fg->sprite_tracker.z;

View File

@ -192,7 +192,7 @@ def render_special(
return ans return ans
def render_cursor(which, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0): def render_cursor(which, cursor_beam_thickness, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0):
CharTexture = ctypes.c_ubyte * (cell_width * cell_height) CharTexture = ctypes.c_ubyte * (cell_width * cell_height)
ans = CharTexture() ans = CharTexture()
@ -213,7 +213,7 @@ def render_cursor(which, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0):
ans[offset + x] = 255 ans[offset + x] = 255
if which == 1: # beam if which == 1: # beam
vert('left', 1.5) vert('left', cursor_beam_thickness)
elif which == 2: # underline elif which == 2: # underline
horz('bottom', 2.0) horz('bottom', 2.0)
elif which == 3: # hollow elif which == 3: # hollow
@ -221,13 +221,13 @@ def render_cursor(which, cell_width=0, cell_height=0, dpi_x=0, dpi_y=0):
return ans return ans
def prerender_function(cell_width, cell_height, baseline, underline_position, underline_thickness, dpi_x, dpi_y): def prerender_function(cell_width, cell_height, baseline, underline_position, underline_thickness, cursor_beam_thickness, dpi_x, dpi_y):
# Pre-render the special underline, strikethrough and missing and cursor cells # Pre-render the special underline, strikethrough and missing and cursor cells
f = partial( f = partial(
render_special, cell_width=cell_width, cell_height=cell_height, baseline=baseline, render_special, cell_width=cell_width, cell_height=cell_height, baseline=baseline,
underline_position=underline_position, underline_thickness=underline_thickness) underline_position=underline_position, underline_thickness=underline_thickness)
c = partial( c = partial(
render_cursor, cell_width=cell_width, cell_height=cell_height, dpi_x=dpi_x, dpi_y=dpi_y) render_cursor, cursor_beam_thickness=cursor_beam_thickness, cell_width=cell_width, cell_height=cell_height, dpi_x=dpi_x, dpi_y=dpi_y)
cells = f(1), f(2), f(3), f(0, True), f(missing=True), c(1), c(2), c(3) cells = f(1), f(2), f(3), f(0, True), f(missing=True), c(1), c(2), c(3)
return tuple(map(ctypes.addressof, cells)) + (cells,) return tuple(map(ctypes.addressof, cells)) + (cells,)

View File

@ -568,6 +568,7 @@ PYWRAP1(set_options) {
S(window_padding_width, PyFloat_AsFloat); S(window_padding_width, PyFloat_AsFloat);
S(scrollback_pager_history_size, PyLong_AsUnsignedLong); S(scrollback_pager_history_size, PyLong_AsUnsignedLong);
S(cursor_shape, PyLong_AsLong); S(cursor_shape, PyLong_AsLong);
S(cursor_beam_thickness, PyFloat_AsFloat);
S(url_style, PyLong_AsUnsignedLong); S(url_style, PyLong_AsUnsignedLong);
S(tab_bar_edge, PyLong_AsLong); S(tab_bar_edge, PyLong_AsLong);
S(mouse_hide_wait, parse_s_double_to_monotonic_t); S(mouse_hide_wait, parse_s_double_to_monotonic_t);

View File

@ -20,6 +20,7 @@ typedef struct {
double wheel_scroll_multiplier, touch_scroll_multiplier; double wheel_scroll_multiplier, touch_scroll_multiplier;
bool enable_audio_bell; bool enable_audio_bell;
CursorShape cursor_shape; CursorShape cursor_shape;
float cursor_beam_thickness;
unsigned int open_url_modifiers; unsigned int open_url_modifiers;
unsigned int rectangle_select_modifiers; unsigned int rectangle_select_modifiers;
unsigned int terminal_select_modifiers; unsigned int terminal_select_modifiers;