#include "metatilelayersitem.h" #include "imageproviders.h" #include void MetatileLayersItem::draw() { const QList tileCoords = QList{ QPoint(0, 0), QPoint(16, 0), QPoint(0, 16), QPoint(16, 16), QPoint(32, 0), QPoint(48, 0), QPoint(32, 16), QPoint(48, 16), }; QPixmap pixmap(64, 32); QPainter painter(&pixmap); for (int i = 0; i < 8; i++) { Tile tile = this->metatile->tiles->at(i); QImage tileImage = getColoredTileImage(tile.tile, this->primaryTileset, this->secondaryTileset, tile.palette) .mirrored(tile.xflip, tile.yflip) .scaled(16, 16); painter.drawImage(tileCoords.at(i), tileImage); } this->setPixmap(pixmap); } void MetatileLayersItem::setMetatile(Metatile *metatile) { this->metatile = metatile; } void MetatileLayersItem::setTilesets(Tileset *primaryTileset, Tileset *secondaryTileset) { this->primaryTileset = primaryTileset; this->secondaryTileset = secondaryTileset; this->draw(); } void MetatileLayersItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->buttons() & Qt::RightButton) { SelectablePixmapItem::mousePressEvent(event); QPoint selectionOrigin = this->getSelectionStart(); QPoint dimensions = this->getSelectionDimensions(); emit this->selectedTilesChanged(selectionOrigin, dimensions.x(), dimensions.y()); this->drawSelection(); } else { QPointF pos = event->pos(); int x = static_cast(pos.x()) / 16; int y = static_cast(pos.y()) / 16; emit this->tileChanged(x, y); } } void MetatileLayersItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { QPointF pos = event->pos(); int x = static_cast(pos.x()) / 16; int y = static_cast(pos.y()) / 16; if (event->buttons() & Qt::RightButton) { SelectablePixmapItem::mouseMoveEvent(event); QPoint selectionOrigin = this->getSelectionStart(); QPoint dimensions = this->getSelectionDimensions(); emit this->selectedTilesChanged(selectionOrigin, dimensions.x(), dimensions.y()); this->drawSelection(); } else { emit this->tileChanged(x, y); } } void MetatileLayersItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->buttons() & Qt::RightButton) { SelectablePixmapItem::mouseReleaseEvent(event); QPoint selectionOrigin = this->getSelectionStart(); QPoint dimensions = this->getSelectionDimensions(); emit this->selectedTilesChanged(selectionOrigin, dimensions.x(), dimensions.y()); } this->draw(); }