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: