1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 01:47:34 +00:00

LibVT: Make VT::Line use a Vector for storage

This is preparation for non-destructive terminal resizing which will
require more dynamic storage for lines.
This commit is contained in:
Andreas Kling 2021-02-26 20:28:22 +01:00
parent c58570ebaf
commit b7c66233f6
5 changed files with 60 additions and 123 deletions

View file

@ -28,7 +28,6 @@
#include <AK/StringBuilder.h>
#include <AK/StringView.h>
#include <LibVT/Terminal.h>
#include <string.h>
namespace VT {
@ -535,11 +534,11 @@ void Terminal::DCH(const ParamVector& params)
auto& line = m_lines[m_cursor_row];
// Move n characters of line to the left
for (int i = m_cursor_column; i < line.length() - num; i++)
for (size_t i = m_cursor_column; i < line.length() - num; i++)
line.set_code_point(i, line.code_point(i + num));
// Fill remainder of line with blanks
for (int i = line.length() - num; i < line.length(); i++)
for (size_t i = line.length() - num; i < line.length(); i++)
line.set_code_point(i, ' ');
line.set_dirty(true);
@ -759,8 +758,8 @@ void Terminal::put_character_at(unsigned row, unsigned column, u32 code_point)
VERIFY(column < columns());
auto& line = m_lines[row];
line.set_code_point(column, code_point);
line.attributes()[column] = m_current_attribute;
line.attributes()[column].flags |= Attribute::Touched;
line.attribute_at(column) = m_current_attribute;
line.attribute_at(column).flags |= Attribute::Touched;
line.set_dirty(true);
m_last_code_point = code_point;
@ -1191,9 +1190,9 @@ Attribute Terminal::attribute_at(const Position& position) const
if (position.row() >= static_cast<int>(line_count()))
return {};
auto& line = this->line(position.row());
if (position.column() >= line.length())
if (static_cast<size_t>(position.column()) >= line.length())
return {};
return line.attributes()[position.column()];
return line.attribute_at(position.column());
}
}