Terminal: Improve performance while selecting

Change-Id: I4f0a7a937f6e600430d8c89e51d1ea2d1ab8687f
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Marcus Tillmanns
2023-03-02 12:07:53 +01:00
parent 76b55fd6e6
commit d8dc1c7f0f
2 changed files with 14 additions and 4 deletions

View File

@@ -460,6 +460,11 @@ QPoint TerminalWidget::viewportToGlobal(QPoint p) const
return {p.x(), y};
}
QPoint TerminalWidget::globalToGrid(QPoint p) const
{
return QPoint(p.x() / m_cellSize.width(), p.y() / m_cellSize.height());
}
void TerminalWidget::createTextLayout()
{
QElapsedTimer t;
@@ -830,6 +835,9 @@ void TerminalWidget::mousePressEvent(QMouseEvent *event)
void TerminalWidget::mouseMoveEvent(QMouseEvent *event)
{
if (m_selection && event->buttons() & Qt::LeftButton) {
const std::array<QPoint, 2> oldGrid = {globalToGrid(m_selection->start),
globalToGrid(m_selection->end)};
QPoint start = viewportToGlobal(m_selectionStartPos);
QPoint newEnd = viewportToGlobal(event->pos());
@@ -844,7 +852,10 @@ void TerminalWidget::mouseMoveEvent(QMouseEvent *event)
m_selection->start = start;
m_selection->end = newEnd;
viewport()->update();
const std::array<QPoint, 2> newGrid = {globalToGrid(m_selection->start),
globalToGrid(m_selection->end)};
if (newGrid != oldGrid)
viewport()->update();
}
}
@@ -863,9 +874,7 @@ void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *event)
std::u32string text = m_scrollback->currentText() + m_currentLiveText;
const QPoint clickPos = viewportToGlobal(event->pos());
const QPoint clickPosInGrid = QPoint(clickPos.x() / m_cellSize.width(),
clickPos.y() / m_cellSize.height());
const QPoint clickPosInGrid = globalToGrid(clickPos);
std::u32string::size_type chIdx = (clickPosInGrid.x())
+ (clickPosInGrid.y()) * m_vtermSize.width();

View File

@@ -99,6 +99,7 @@ protected:
qreal topMargin() const;
QPoint viewportToGlobal(QPoint p) const;
QPoint globalToGrid(QPoint p) const;
int textLineFromPixel(int y) const;
std::optional<int> textPosFromPoint(const QTextLayout &textLayout, QPoint p) const;