void PuzzleBoardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    // Save the original transform of the painter
    QTransform originalTransform = painter->transform();
    // Order the puzzle pieces by z value (ascending)
    QList<PuzzlePiece*> puzzleItems = _game->puzzleItems().toList();
    qSort(puzzleItems.begin(), puzzleItems.end(), PuzzlePiece::puzzleItemAscLessThan);

    // Draw the pieces
    foreach (PuzzlePiece *piece, puzzleItems)
    {
        QPointF p = piece->mapToParent(QPointF(0, 0));
        QTransform transform = QTransform::fromTranslate(p.x(), p.y()).rotate(piece->rotation());
        painter->setTransform(transform);

        // Draw the strokes first
        foreach (PuzzlePiecePrimitive *p, piece->primitives())
            painter->drawPixmap(p->strokeOffset(), p->stroke());

        // Draw the actual pixmaps
        foreach (PuzzlePiecePrimitive *p, piece->primitives())
            painter->drawPixmap(p->pixmapOffset(), p->pixmap());
    }