diff --git a/kitty/fonts.c b/kitty/fonts.c index 56a2e2bc3..325cee6fd 100644 --- a/kitty/fonts.c +++ b/kitty/fonts.c @@ -14,6 +14,7 @@ typedef uint16_t glyph_index; typedef void (*send_sprite_to_gpu_func)(unsigned int, unsigned int, unsigned int, uint8_t*); send_sprite_to_gpu_func current_send_sprite_to_gpu = NULL; static PyObject *python_send_to_gpu_impl = NULL; +extern PyTypeObject Line_Type; typedef struct SpritePosition SpritePosition; @@ -495,6 +496,14 @@ set_send_sprite_to_gpu(PyObject UNUSED *self, PyObject *func) { Py_RETURN_NONE; } +static PyObject* +test_render_line(PyObject UNUSED *self, PyObject *args) { + PyObject *line; + if (!PyArg_ParseTuple(args, "O!", &Line_Type, &line)) return NULL; + render_line((Line*)line); + Py_RETURN_NONE; +} + static PyMethodDef module_methods[] = { METHODB(set_font_size, METH_VARARGS), METHODB(set_font, METH_VARARGS), @@ -503,6 +512,7 @@ static PyMethodDef module_methods[] = { METHODB(send_prerendered_sprites, METH_VARARGS), METHODB(test_sprite_position_for, METH_VARARGS), METHODB(set_send_sprite_to_gpu, METH_O), + METHODB(test_render_line, METH_VARARGS), {NULL, NULL, 0, NULL} /* Sentinel */ }; diff --git a/kitty_tests/fonts.py b/kitty_tests/fonts.py index b47b6cff0..135136ee5 100644 --- a/kitty_tests/fonts.py +++ b/kitty_tests/fonts.py @@ -4,34 +4,34 @@ from collections import OrderedDict -from kitty.fast_data_types import set_send_sprite_to_gpu +from kitty.fast_data_types import set_send_sprite_to_gpu, test_render_line, sprite_map_set_limits from kitty.fonts.render import set_font_family +from kitty.fonts.box_drawing import box_chars from . import BaseTest class Rendering(BaseTest): - sprites = OrderedDict() + def setUp(self): + self.sprites = OrderedDict() - @classmethod - def setUpClass(cls): def send_to_gpu(x, y, z, data): - cls.sprites[(x, y, z)] = data + self.sprites[(x, y, z)] = data set_send_sprite_to_gpu(send_to_gpu) - - @classmethod - def tearDownClass(cls): - set_send_sprite_to_gpu(None) - cls.sprites.clear() - - def setUp(self): - self.sprites.clear() + sprite_map_set_limits(100000, 100) self.cell_width, self.cell_height = set_font_family(override_dpi=(96.0, 96.0)) + self.assertEqual([k[0] for k in self.sprites], [0, 1, 2, 3, 4]) def tearDown(self): - self.sprites.clear() + set_send_sprite_to_gpu(None) + del self.sprites def test_box_drawing(self): - pass + prerendered = len(self.sprites) + s = self.create_screen(cols=len(box_chars), lines=1, scrollback=0) + s.draw(''.join(box_chars)) + line = s.line(0) + test_render_line(line) + self.assertEqual(len(self.sprites), prerendered + len(box_chars))