diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index 2e8657c..3e0c781 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -394,18 +394,34 @@ void ViewportWidget::onActiveToolChanged(int tool) if (m_toolIcons.contains(tool)) { QSvgRenderer* renderer = m_toolIcons.value(tool); if (renderer && renderer->isValid()) { + const QSize cursorSize(48, 48); + QPixmap cursorPixmap(cursorSize); + cursorPixmap.fill(Qt::transparent); + QPainter painter(&cursorPixmap); + painter.setRenderHint(QPainter::Antialiasing); + + // Draw arrow cursor manually + QPolygon arrowPolygon; + arrowPolygon << QPoint(0, 0) << QPoint(0, 11) << QPoint(4, 11) << QPoint(4, 16) << QPoint(7, 16) << QPoint(7, 11) << QPoint(11, 11); + painter.setPen(Qt::white); + painter.setBrush(Qt::black); + painter.drawPolygon(arrowPolygon); + + // Render tool icon const QSize iconSize(32, 32); + QPixmap iconPixmap(iconSize); + iconPixmap.fill(Qt::transparent); + QPainter iconPainter(&iconPixmap); + renderer->render(&iconPainter); + iconPainter.end(); - QPixmap pixmap(iconSize); - pixmap.fill(Qt::transparent); - QPainter pixmapPainter(&pixmap); - renderer->render(&pixmapPainter); - pixmapPainter.end(); + // Invert and draw icon onto cursor pixmap + QImage iconImage = iconPixmap.toImage(); + iconImage.invertPixels(QImage::InvertRgb); + painter.drawImage(QRect(12, 12, iconSize.width(), iconSize.height()), iconImage); + painter.end(); - QImage image = pixmap.toImage(); - image.invertPixels(QImage::InvertRgb); - - setCursor(QCursor(QPixmap::fromImage(image), 16, 16)); + setCursor(QCursor(cursorPixmap, 0, 0)); } } else { unsetCursor();