fix: Eliminate tool icon lag with custom QCursor

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-14 21:19:08 -07:00
parent 25e3604336
commit 0250287ba0

View File

@@ -159,26 +159,6 @@ void ViewportWidget::paintGL()
}
m_featureBrowser->paint(painter, width(), height());
if (m_currentPlane != SketchPlane::NONE && m_activeTool != static_cast<int>(ApplicationController::ToolType::None) && m_toolIcons.contains(m_activeTool)) {
QSvgRenderer* renderer = m_toolIcons.value(m_activeTool);
if (renderer && renderer->isValid()) {
const QSize iconSize(32, 32);
const QPoint iconPos = m_currentMousePos + QPoint(15, 15);
const QRect iconRect(iconPos, iconSize);
QPixmap pixmap(iconSize);
pixmap.fill(Qt::transparent);
QPainter pixmapPainter(&pixmap);
renderer->render(&pixmapPainter);
pixmapPainter.end();
QImage image = pixmap.toImage();
image.invertPixels(QImage::InvertRgb);
painter.drawImage(iconRect, image);
}
}
painter.end();
}
@@ -407,6 +387,30 @@ void ViewportWidget::onActiveToolChanged(int tool)
{
m_activeTool = tool;
m_isDefiningLine = false;
if (tool == static_cast<int>(ApplicationController::ToolType::None)) {
unsetCursor();
} else {
if (m_toolIcons.contains(tool)) {
QSvgRenderer* renderer = m_toolIcons.value(tool);
if (renderer && renderer->isValid()) {
const QSize iconSize(32, 32);
QPixmap pixmap(iconSize);
pixmap.fill(Qt::transparent);
QPainter pixmapPainter(&pixmap);
renderer->render(&pixmapPainter);
pixmapPainter.end();
QImage image = pixmap.toImage();
image.invertPixels(QImage::InvertRgb);
setCursor(QCursor(QPixmap::fromImage(image), 16, 16));
}
} else {
unsetCursor();
}
}
}
QVector3D ViewportWidget::unproject(const QPoint& screenPos)