From 4af1a7f1630a35e159b233670bbd3e09e2a32e35 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 23 Mar 2023 10:25:48 -0700 Subject: [PATCH] renderer/Metal: split runs on selection --- src/renderer/Metal.zig | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index 13fc7ab8c..47fff2eea 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -844,8 +844,24 @@ fn rebuildCells( } }; + // We need to get this row's selection if there is one for proper + // run splitting. + const row_selection = sel: { + if (term_selection) |sel| { + const screen_point = (terminal.point.Viewport{ + .x = 0, + .y = y, + }).toScreen(screen); + if (sel.containedRow(screen, screen_point)) |row_sel| { + break :sel row_sel; + } + } + + break :sel null; + }; + // Split our row into runs and shape each one. - var iter = self.font_shaper.runIterator(self.font_group, row); + var iter = self.font_shaper.runIterator(self.font_group, row, row_selection); while (try iter.next(self.alloc)) |run| { for (try self.font_shaper.shape(run)) |shaper_cell| { if (self.updateCell(