mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-26 10:12:17 +02:00
Ensure group_count is never zero in any ImageRef
Now group_count means the number of refs pointing to the same image from that ref onwards. This is needed because we can index the list of refs at any point when drawing not just at the start of a group. Fixes #6594
This commit is contained in:
@@ -983,12 +983,14 @@ grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float scree
|
|||||||
// Calculate the group counts
|
// Calculate the group counts
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < self->count) {
|
while (i < self->count) {
|
||||||
id_type image_id = self->render_data[i].image_id, start = i;
|
id_type num_identical = 1, image_id = self->render_data[i].image_id, start = i;
|
||||||
if (start == self->count - 1) i = self->count;
|
while (++i < self->count) {
|
||||||
else {
|
if (self->render_data[i].image_id != image_id) break;
|
||||||
while (i < self->count - 1 && self->render_data[++i].image_id == image_id) {}
|
num_identical++;
|
||||||
|
}
|
||||||
|
while (num_identical > 0) {
|
||||||
|
self->render_data[start++].group_count = num_identical--;
|
||||||
}
|
}
|
||||||
self->render_data[start].group_count = i - start;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -516,13 +516,30 @@ class TestGraphics(BaseTest):
|
|||||||
rect_eq(l2[0]['dest_rect'], left, top, -1 + (1 + s.columns) * dx, top - dy * 5 / ch)
|
rect_eq(l2[0]['dest_rect'], left, top, -1 + (1 + s.columns) * dx, top - dy * 5 / ch)
|
||||||
rect_eq(l2[1]['src_rect'], 0, 0, 1, 1)
|
rect_eq(l2[1]['src_rect'], 0, 0, 1, 1)
|
||||||
rect_eq(l2[1]['dest_rect'], -1, 1, -1 + dx, 1 - dy)
|
rect_eq(l2[1]['dest_rect'], -1, 1, -1 + dx, 1 - dy)
|
||||||
self.ae(l2[0]['group_count'], 1), self.ae(l2[1]['group_count'], 1)
|
self.ae(l2[0]['group_count'], 2)
|
||||||
|
self.ae(l2[1]['group_count'], 1)
|
||||||
self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 1)
|
self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 1)
|
||||||
self.ae(put_image(s, 10, 20, cursor_movement=1)[1], 'OK')
|
self.ae(put_image(s, 10, 20, cursor_movement=1)[1], 'OK')
|
||||||
self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 1)
|
self.ae(s.cursor.x, 0), self.ae(s.cursor.y, 1)
|
||||||
s.reset()
|
s.reset()
|
||||||
self.assertEqual(s.grman.disk_cache.total_size, 0)
|
self.assertEqual(s.grman.disk_cache.total_size, 0)
|
||||||
|
|
||||||
|
def test_image_layer_grouping(self):
|
||||||
|
cw, ch = 10, 20
|
||||||
|
s, dx, dy, put_image, put_ref, layers, rect_eq = put_helpers(self, cw, ch)
|
||||||
|
|
||||||
|
def group_counts():
|
||||||
|
return tuple(x['group_count'] for x in layers(s))
|
||||||
|
|
||||||
|
self.ae(put_image(s, 10, 20, id=1)[1], 'OK')
|
||||||
|
self.ae(group_counts(), (1,))
|
||||||
|
put_ref(s, id=1, num_cols=2, num_lines=1, placement_id=2)
|
||||||
|
put_ref(s, id=1, num_cols=2, num_lines=1, placement_id=3, z=-2)
|
||||||
|
put_ref(s, id=1, num_cols=2, num_lines=1, placement_id=4, z=-2)
|
||||||
|
self.ae(group_counts(), (4, 3, 2, 1))
|
||||||
|
self.ae(put_image(s, 8, 16, id=2, z=-1)[1], 'OK')
|
||||||
|
self.ae(group_counts(), (2, 1, 1, 2, 1))
|
||||||
|
|
||||||
def test_unicode_placeholders(self):
|
def test_unicode_placeholders(self):
|
||||||
# This test tests basic image placement using using unicode placeholders
|
# This test tests basic image placement using using unicode placeholders
|
||||||
cw, ch = 10, 20
|
cw, ch = 10, 20
|
||||||
|
|||||||
Reference in New Issue
Block a user