mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
add second cursor list
This commit is contained in:
@ -103,11 +103,12 @@ pub const Contents = struct {
|
||||
// form a single grapheme, and multi-substitutions in fonts, the number
|
||||
// of glyphs in a row is theoretically unlimited.
|
||||
//
|
||||
// We have size.rows + 1 lists because index 0 is used for a special
|
||||
// list containing the cursor cell which needs to be first in the buffer.
|
||||
// We have size.rows + 2 lists because indexes 0 and size.rows - 1 are
|
||||
// used for special lists containing the cursor cell which need to
|
||||
// be first and last in the buffer, respectively.
|
||||
var fg_rows = try ArrayListCollection(shaderpkg.CellText).init(
|
||||
alloc,
|
||||
size.rows + 1,
|
||||
size.rows + 2,
|
||||
size.columns * 3,
|
||||
);
|
||||
errdefer fg_rows.deinit(alloc);
|
||||
@ -118,14 +119,19 @@ pub const Contents = struct {
|
||||
self.bg_cells = bg_cells;
|
||||
self.fg_rows = fg_rows;
|
||||
|
||||
// We don't need 3*cols worth of cells for the cursor list, so we can
|
||||
// replace it with a smaller list. This is technically a tiny bit of
|
||||
// We don't need 3*cols worth of cells for the cursor lists, so we can
|
||||
// replace them with smaller lists. This is technically a tiny bit of
|
||||
// extra work but resize is not a hot function so it's worth it to not
|
||||
// waste the memory.
|
||||
self.fg_rows.lists[0].deinit(alloc);
|
||||
self.fg_rows.lists[0] = try std.ArrayListUnmanaged(
|
||||
shaderpkg.CellText,
|
||||
).initCapacity(alloc, 1);
|
||||
|
||||
self.fg_rows.lists[size.rows + 1].deinit(alloc);
|
||||
self.fg_rows.lists[size.rows + 1] = try std.ArrayListUnmanaged(
|
||||
shaderpkg.CellText,
|
||||
).initCapacity(alloc, 1);
|
||||
}
|
||||
|
||||
/// Reset the cell contents to an empty state without resizing.
|
||||
@ -137,6 +143,7 @@ pub const Contents = struct {
|
||||
/// Set the cursor value. If the value is null then the cursor is hidden.
|
||||
pub fn setCursor(self: *Contents, v: ?shaderpkg.CellText) void {
|
||||
self.fg_rows.lists[0].clearRetainingCapacity();
|
||||
self.fg_rows.lists[self.size.rows + 1].clearRetainingCapacity();
|
||||
|
||||
if (v) |cell| {
|
||||
self.fg_rows.lists[0].appendAssumeCapacity(cell);
|
||||
|
Reference in New Issue
Block a user