Refactor font group handling

Allow kitty to manage multiple groups of fonts with different cell
sizes. Will eventually allow kitty to have different font sizes/dpi per
OSWindow
This commit is contained in:
Kovid Goyal
2018-05-25 11:28:46 +05:30
parent 4f18342ea6
commit 523aadaa3b
26 changed files with 736 additions and 639 deletions

View File

@@ -72,9 +72,9 @@ class BaseTest(TestCase):
ae = TestCase.assertEqual
maxDiff = 2000
def create_screen(self, cols=5, lines=5, scrollback=5):
def create_screen(self, cols=5, lines=5, scrollback=5, cell_width=10, cell_height=20):
c = Callbacks()
return Screen(c, lines, cols, scrollback, 0, c)
return Screen(c, lines, cols, scrollback, cell_width, cell_height, 0, c)
def assertEqualAttributes(self, c1, c2):
x1, y1, c1.x, c1.y = c1.x, c1.y, 0, 0

View File

@@ -2,17 +2,13 @@
# vim:fileencoding=utf-8
# License: GPL v3 Copyright: 2017, Kovid Goyal <kovid at kovidgoyal.net>
from collections import OrderedDict
from kitty.constants import is_macos
from kitty.fast_data_types import (
DECAWM, set_logical_dpi, set_send_sprite_to_gpu, sprite_map_set_layout,
DECAWM, set_send_sprite_to_gpu, sprite_map_set_layout,
sprite_map_set_limits, test_render_line, test_sprite_position_for, wcwidth
)
from kitty.fonts.box_drawing import box_chars
from kitty.fonts.render import (
prerender, render_string, set_font_family, shape_string
)
from kitty.fonts.render import render_string, setup_for_testing, shape_string
from . import BaseTest
@@ -20,21 +16,12 @@ from . import BaseTest
class Rendering(BaseTest):
def setUp(self):
sprite_map_set_limits(100000, 100)
self.sprites = OrderedDict()
def send_to_gpu(x, y, z, data):
self.sprites[(x, y, z)] = data
set_send_sprite_to_gpu(send_to_gpu)
set_logical_dpi(96.0, 96.0)
self.cell_width, self.cell_height = set_font_family()
prerender()
self.sprites, self.cell_width, self.cell_height = setup_for_testing()
self.assertEqual([k[0] for k in self.sprites], [0, 1, 2, 3, 4, 5])
def tearDown(self):
set_send_sprite_to_gpu(None)
del self.sprites
del self.sprites, self.cell_width, self.cell_height
def test_sprite_map(self):
sprite_map_set_limits(10, 2)

View File

@@ -10,7 +10,7 @@ from base64 import standard_b64encode
from io import BytesIO
from kitty.fast_data_types import (
parse_bytes, set_display_state, set_send_to_gpu, shm_unlink, shm_write
parse_bytes, set_send_to_gpu, shm_unlink, shm_write
)
from . import BaseTest
@@ -87,8 +87,7 @@ def put_helpers(self, cw, ch):
iid = 0
def create_screen():
s = self.create_screen(10, 5)
set_display_state(s.columns * cw, s.lines * ch, cw, ch)
s = self.create_screen(10, 5, cell_width=cw, cell_height=ch)
return s, 2 / s.columns, 2 / s.lines
def put_cmd(z=0, num_cols=0, num_lines=0, x_off=0, y_off=0, width=0, height=0, cell_x_off=0, cell_y_off=0):
@@ -107,7 +106,7 @@ def put_helpers(self, cw, ch):
send_command(screen, cmd)
def layers(screen, scrolled_by=0, xstart=-1, ystart=1):
return screen.grman.update_layers(scrolled_by, xstart, ystart, dx, dy, screen.columns, screen.lines)
return screen.grman.update_layers(scrolled_by, xstart, ystart, dx, dy, screen.columns, screen.lines, cw, ch)
def rect_eq(r, left, top, right, bottom):
for side in 'left top right bottom'.split():
@@ -134,7 +133,7 @@ class TestGraphics(BaseTest):
img = sl(p, s=1, v=1, f=f)
self.ae(bool(img['is_4byte_aligned']), f == 32)
# Test chuunked load
# Test chunked load
self.assertIsNone(l('abcd', s=2, v=2, m=1))
self.assertIsNone(l('efgh', m=1))
self.assertIsNone(l('ijkl', m=1))