Terminal: Fix Background painting

Change-Id: I62d9e10b8e7e79985dc7a9b68d6a05db1e743261
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Marcus Tillmanns
2023-02-25 11:53:26 +01:00
parent 558e9f4b16
commit a21a5249de

View File

@@ -56,14 +56,14 @@ TerminalWidget::TerminalWidget(QWidget *parent, const OpenTerminalParameters &op
setCursor(Qt::IBeamCursor);
setViewportMargins(1, 1, 1, 1);
m_textLayout.setCacheEnabled(true);
setFocus();
setFocusPolicy(Qt::StrongFocus);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
// setFrameStyle(QFrame::NoFrame);
setAttribute(Qt::WA_OpaquePaintEvent);
m_readDelayTimer.setSingleShot(true);
m_readDelayTimer.setInterval(10);
@@ -296,7 +296,7 @@ void TerminalWidget::setFont(const QFont &font)
return qfm.averageCharWidth();
}();
qCInfo(terminalLog) << font.family() << font.pointSize() << w << size();
qCInfo(terminalLog) << font.family() << font.pointSize() << w << viewport()->size();
m_cellSize = {w, qfm.height()};
m_cellBaseline = qfm.ascent();
@@ -485,7 +485,7 @@ void TerminalWidget::createTextLayout()
qreal TerminalWidget::topMargin() const
{
return size().height() - (m_vtermSize.height() * m_lineSpacing);
return (qreal) viewport()->size().height() - ((qreal) m_vtermSize.height() * m_lineSpacing);
}
std::optional<QTextLayout::FormatRange> TerminalWidget::selectionToFormatRange(
@@ -601,7 +601,8 @@ void TerminalWidget::paintEvent(QPaintEvent *event)
const qreal br = fm.horizontalAdvance(QString::fromUcs4(&ch, 1));
const qreal xCursor = cursorLine.cursorToX(cPos);
const double yCursor = cursorLine.y() + y;
const QRectF cursorRect = QRectF{xCursor, yCursor, br, m_lineSpacing};
const QRectF cursorRect
= QRectF{xCursor, yCursor + 1, br, m_lineSpacing - 2};
if (hasFocus()) {
QPainter::CompositionMode oldMode = p.compositionMode();
p.setCompositionMode(QPainter::RasterOp_NotDestination);
@@ -692,8 +693,8 @@ void TerminalWidget::keyPressEvent(QKeyEvent *event)
void TerminalWidget::applySizeChange()
{
m_vtermSize = {
qFloor((qreal) size().width() / (qreal) m_cellSize.width()),
qFloor((qreal) size().height() / m_lineSpacing),
qFloor((qreal) (viewport()->size().width()) / (qreal) m_cellSize.width()),
qFloor((qreal) (viewport()->size().height()) / m_lineSpacing),
};
if (m_vtermSize.height() <= 0)
@@ -891,6 +892,13 @@ bool TerminalWidget::event(QEvent *event)
return true;
}
if (event->type() == QEvent::Paint) {
QPainter p(this);
p.fillRect(QRect(QPoint(0, 0), size()),
TerminalSettings::instance().backgroundColor.value());
return true;
}
return QAbstractScrollArea::event(event);
}