porymap/include/ui/divingmappixmapitem.h
2024-08-13 14:59:41 -04:00

35 lines
1.1 KiB
C++

#ifndef DIVINGMAPPIXMAPITEM_H
#define DIVINGMAPPIXMAPITEM_H
#include "mapconnection.h"
#include <QGraphicsPixmapItem>
#include <QPointer>
class DivingMapPixmapItem : public QObject, public QGraphicsPixmapItem {
Q_OBJECT
public:
DivingMapPixmapItem(MapConnection* connection)
: QGraphicsPixmapItem(getBasePixmap(connection))
{
m_connection = connection;
setZValue(2);
// Update pixmap if the connected map is swapped.
connect(m_connection, &MapConnection::targetMapNameChanged, this, &DivingMapPixmapItem::updatePixmap);
}
MapConnection* connection() const { return m_connection; }
private:
QPointer<MapConnection> m_connection;
static QPixmap getBasePixmap(MapConnection* connection) {
// If the map is connected to itself then rendering is pointless.
if (!connection || connection->targetMapName() == connection->parentMapName())
return QPixmap();
return connection->getPixmap();
}
void updatePixmap() { setPixmap(getBasePixmap(m_connection)); }
};
#endif // DIVINGMAPPIXMAPITEM_H