Terminal: Fix cursor/viewport updates

Under some font sizes the cursor size and cell size were not correctly
aligned on the pixel grid, leaving behind artifacts of prior draws.

Change-Id: I25e6efdc44102f24672912e1e56c31be0c686b89
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-05-09 08:35:24 +02:00
parent 5ea6c34a23
commit 734f559b76

View File

@@ -920,9 +920,13 @@ void TerminalWidget::paintCursor(QPainter &p) const
QRectF cursorRect = QRectF(gridToGlobal(cursor.position), QRectF cursorRect = QRectF(gridToGlobal(cursor.position),
gridToGlobal({cursor.position.x() + cursorCellWidth, gridToGlobal({cursor.position.x() + cursorCellWidth,
cursor.position.y()}, cursor.position.y()},
true)); true))
.toAlignedRect();
cursorRect.adjust(0, 0, 0, -1); cursorRect.adjust(1, 1, -1, -1);
QPen pen(Qt::white, 0, Qt::SolidLine);
p.setPen(pen);
if (hasFocus()) { if (hasFocus()) {
QPainter::CompositionMode oldMode = p.compositionMode(); QPainter::CompositionMode oldMode = p.compositionMode();
@@ -1162,14 +1166,14 @@ QRect TerminalWidget::gridToViewport(QRect rect) const
int numRows = rect.height(); int numRows = rect.height();
int numCols = rect.width(); int numCols = rect.width();
QRect r{qFloor(rect.x() * m_cellSize.width()), QRectF r{rect.x() * m_cellSize.width(),
qFloor(startRow * m_cellSize.height()), startRow * m_cellSize.height(),
qCeil(numCols * m_cellSize.width()), numCols * m_cellSize.width(),
qCeil(numRows * m_cellSize.height())}; numRows * m_cellSize.height()};
r.translate(0, topMargin()); r.translate(0, topMargin());
return r; return r.toAlignedRect();
} }
void TerminalWidget::updateViewport() void TerminalWidget::updateViewport()