diff --git a/src/app/puzzle/main.cpp b/src/app/puzzle/main.cpp index d282fe43a..13353f3c6 100644 --- a/src/app/puzzle/main.cpp +++ b/src/app/puzzle/main.cpp @@ -58,6 +58,7 @@ int main(int argc, char *argv[]) Q_INIT_RESOURCE(schema); Q_INIT_RESOURCE(flags); Q_INIT_RESOURCE(style); + Q_INIT_RESOURCE(cursor); QT_REQUIRE_VERSION(argc, argv, "5.4.0")// clazy:exclude=qstring-arg,qstring-allocations diff --git a/src/app/puzzle/puzzle.pro b/src/app/puzzle/puzzle.pro index 71ccbcc54..d416415e7 100644 --- a/src/app/puzzle/puzzle.pro +++ b/src/app/puzzle/puzzle.pro @@ -60,6 +60,7 @@ UI_DIR = uic include(puzzle.pri) RESOURCES += \ + share/resources/cursor.qrc \ share/resources/puzzleicon.qrc include(../translations.pri) diff --git a/src/app/puzzle/share/resources/cursor.qrc b/src/app/puzzle/share/resources/cursor.qrc new file mode 100644 index 000000000..740bdbf6a --- /dev/null +++ b/src/app/puzzle/share/resources/cursor.qrc @@ -0,0 +1,6 @@ + + + cursor/collect.png + cursor/collect@2x.png + + diff --git a/src/app/puzzle/share/resources/cursor/collect.png b/src/app/puzzle/share/resources/cursor/collect.png new file mode 100644 index 000000000..674392d9b Binary files /dev/null and b/src/app/puzzle/share/resources/cursor/collect.png differ diff --git a/src/app/puzzle/share/resources/cursor/collect@2x.png b/src/app/puzzle/share/resources/cursor/collect@2x.png new file mode 100644 index 000000000..57967c82c Binary files /dev/null and b/src/app/puzzle/share/resources/cursor/collect@2x.png differ diff --git a/src/app/puzzle/vpcarrouselpiecelist.cpp b/src/app/puzzle/vpcarrouselpiecelist.cpp index 670c22e41..e89104191 100644 --- a/src/app/puzzle/vpcarrouselpiecelist.cpp +++ b/src/app/puzzle/vpcarrouselpiecelist.cpp @@ -139,9 +139,9 @@ void VPCarrouselPieceList::startDrag(Qt::DropActions supportedActions) VPPiece* piece = pieceItem->GetPiece(); mimeData->SetPiecePtr(piece); - QPixmap pixmap = pieceItem->CreatePieceIcon(QSize(120,120), true).pixmap(QSize(120,120)); + QPixmap pixmap = pieceItem->CreatePieceIcon(QSize(120, 120), true).pixmap(QSize(120, 120)); - drag->setPixmap(pixmap); + drag->setDragCursor(VPMimeDataPiece::DragCursor(pixmap), Qt::MoveAction); drag->setMimeData(mimeData); if(drag->exec() == Qt::MoveAction) { diff --git a/src/app/puzzle/vpmimedatapiece.cpp b/src/app/puzzle/vpmimedatapiece.cpp index c348dc1c0..912aed437 100644 --- a/src/app/puzzle/vpmimedatapiece.cpp +++ b/src/app/puzzle/vpmimedatapiece.cpp @@ -28,6 +28,9 @@ #include "vpmimedatapiece.h" +#include +#include + const QString VPMimeDataPiece::mineFormatPiecePtr = QStringLiteral("application/vnd.puzzle.piece.ptr"); //--------------------------------------------------------------------------------------------------------------------- @@ -47,3 +50,16 @@ void VPMimeDataPiece::SetPiecePtr(VPPiece* piece) { m_piece = 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 = QPixmap("://cursor/collect.png"); + painter.drawPixmap(dragCursor.width()/2 - cursor.width()/2, dragCursor.height()/2 - cursor.height()/2, cursor); + painter.end(); + return dragCursor; +} diff --git a/src/app/puzzle/vpmimedatapiece.h b/src/app/puzzle/vpmimedatapiece.h index 87f280938..207273663 100644 --- a/src/app/puzzle/vpmimedatapiece.h +++ b/src/app/puzzle/vpmimedatapiece.h @@ -55,6 +55,8 @@ public: */ void SetPiecePtr(VPPiece* piece); + static auto DragCursor(const QPixmap &piecePixmap) -> QPixmap; + static const QString mineFormatPiecePtr; private: