From 7e9222dabec3ba5b063116cb0eaecab53de4494e Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 10 Nov 2023 12:02:38 +0200 Subject: [PATCH] Handle empty piece icon when drag it on sheet. --- .../puzzle/carousel/vpcarrouselpiecelist.cpp | 7 +++++- src/app/puzzle/carousel/vpmimedatapiece.cpp | 23 ++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp b/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp index b91c0fa78..71b395383 100644 --- a/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp +++ b/src/app/puzzle/carousel/vpcarrouselpiecelist.cpp @@ -184,7 +184,12 @@ void VPCarrouselPieceList::startDrag(Qt::DropActions supportedActions) VPPiecePtr piece = pieceItem->GetPiece(); mimeData->SetPiecePtr(piece); - QPixmap pixmap = pieceItem->CreatePieceIcon(QSize(120, 120), true).pixmap(QSize(120, 120)); + QIcon pieceIcon = pieceItem->CreatePieceIcon(QSize(120, 120), true); + QPixmap pixmap; + if (!pieceIcon.isNull()) + { + pieceIcon.pixmap(QSize(120, 120)); + } drag->setDragCursor(VPMimeDataPiece::DragCursor(pixmap), Qt::MoveAction); drag->setMimeData(mimeData); diff --git a/src/app/puzzle/carousel/vpmimedatapiece.cpp b/src/app/puzzle/carousel/vpmimedatapiece.cpp index 12bf9d438..7d1b5522b 100644 --- a/src/app/puzzle/carousel/vpmimedatapiece.cpp +++ b/src/app/puzzle/carousel/vpmimedatapiece.cpp @@ -63,15 +63,22 @@ void VPMimeDataPiece::SetPiecePtr(const VPPiecePtr &piece) //--------------------------------------------------------------------------------------------------------------------- auto VPMimeDataPiece::DragCursor(const QPixmap &piecePixmap) -> QPixmap { - QPixmap dragCursor(piecePixmap.width() * 2, piecePixmap.height() * 2); - dragCursor.fill(Qt::transparent); - QPainter painter(&dragCursor); - painter.drawPixmap(dragCursor.width() / 2, dragCursor.height() / 2, piecePixmap); QPixmap cursor(QStringLiteral("://puzzlecursor/collect.png")); - painter.drawPixmap(dragCursor.width() / 2 - cursor.width() / 2, dragCursor.height() / 2 - cursor.height() / 2, - cursor); - painter.end(); - return dragCursor; + + if (!piecePixmap.isNull()) + { + QPixmap dragCursor(piecePixmap.width() * 2, piecePixmap.height() * 2); + dragCursor.fill(Qt::transparent); + QPainter painter(&dragCursor); + painter.drawPixmap(dragCursor.width() / 2, dragCursor.height() / 2, piecePixmap); + + painter.drawPixmap(dragCursor.width() / 2 - cursor.width() / 2, dragCursor.height() / 2 - cursor.height() / 2, + cursor); + painter.end(); + return dragCursor; + } + + return cursor; } //---------------------------------------------------------------------------------------------------------------------