diff --git a/include/ui/metatileselector.h b/include/ui/metatileselector.h index f5b28d3a..0c0b779f 100644 --- a/include/ui/metatileselector.h +++ b/include/ui/metatileselector.h @@ -33,6 +33,7 @@ class MetatileSelector: public SelectablePixmapItem { public: MetatileSelector(int numMetatilesWide, Map *map): SelectablePixmapItem(16, 16) { this->externalSelection = false; + this->prefabSelection = false; this->numMetatilesWide = numMetatilesWide; this->map = map; this->primaryTileset = map->layout->tileset_primary; @@ -46,7 +47,7 @@ public: bool selectFromMap(uint16_t metatileId, uint16_t collision, uint16_t elevation); void setTilesets(Tileset*, Tileset*); MetatileSelection getMetatileSelection(); - void setDirectSelection(MetatileSelection selection); + void setPrefabSelection(MetatileSelection selection); void setExternalSelection(int, int, QList, QList>); QPoint getMetatileIdCoordsOnWidget(uint16_t); void setMap(Map*); @@ -60,6 +61,7 @@ protected: void hoverLeaveEvent(QGraphicsSceneHoverEvent*); private: bool externalSelection; + bool prefabSelection; int numMetatilesWide; Map *map; int externalSelectionWidth; diff --git a/src/ui/metatileselector.cpp b/src/ui/metatileselector.cpp index f18f0fb2..3ce9cf55 100644 --- a/src/ui/metatileselector.cpp +++ b/src/ui/metatileselector.cpp @@ -36,7 +36,7 @@ void MetatileSelector::draw() { painter.end(); this->setPixmap(QPixmap::fromImage(image)); - if (!this->externalSelection || (this->externalSelectionWidth == 1 && this->externalSelectionHeight == 1)) { + if (!this->prefabSelection && (!this->externalSelection || (this->externalSelectionWidth == 1 && this->externalSelectionHeight == 1))) { this->drawSelection(); } } @@ -44,6 +44,13 @@ void MetatileSelector::draw() { bool MetatileSelector::select(uint16_t metatileId) { if (!Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) return false; this->externalSelection = false; + this->prefabSelection = false; + this->selection = MetatileSelection{ + QPoint(1, 1), + false, + QList({MetatileSelectionItem{true, metatileId}}), + QList(), + }; QPoint coords = this->getMetatileIdCoords(metatileId); SelectablePixmapItem::select(coords.x(), coords.y(), 0, 0); this->updateSelectedMetatiles(); @@ -73,6 +80,7 @@ MetatileSelection MetatileSelector::getMetatileSelection() { } void MetatileSelector::setExternalSelection(int width, int height, QList metatiles, QList> collisions) { + this->prefabSelection = false; this->externalSelection = true; this->externalSelectionWidth = width; this->externalSelectionHeight = height; @@ -95,8 +103,9 @@ void MetatileSelector::setExternalSelection(int width, int height, QListexternalSelection = false; + this->prefabSelection = true; this->externalSelectedMetatiles.clear(); this->selection = selection; this->draw(); @@ -142,6 +151,7 @@ void MetatileSelector::hoverLeaveEvent(QGraphicsSceneHoverEvent*) { void MetatileSelector::updateSelectedMetatiles() { this->externalSelection = false; + this->prefabSelection = false; this->selection.metatileItems.clear(); this->selection.collisionItems.clear(); this->selection.hasCollision = false; diff --git a/src/ui/prefab.cpp b/src/ui/prefab.cpp index 7e30b3ed..8114d90a 100644 --- a/src/ui/prefab.cpp +++ b/src/ui/prefab.cpp @@ -208,7 +208,7 @@ void Prefab::updatePrefabUi(Map *map) { // Clicking on the prefab graphics item selects it for painting. QObject::connect(frame->ui->graphicsView_Prefab, &ClickableGraphicsView::clicked, [this, item](){ - selector->setDirectSelection(item.selection); + selector->setPrefabSelection(item.selection); }); // Clicking the delete button removes it from the list of known prefabs and updates the UI.