diff --git a/forms/tileseteditor.ui b/forms/tileseteditor.ui index 7a56f4a9..78d65ad8 100644 --- a/forms/tileseteditor.ui +++ b/forms/tileseteditor.ui @@ -26,7 +26,7 @@ 0 0 386 - 539 + 538 @@ -205,14 +205,14 @@ - 16 - 16 + 18 + 18 - 32 - 32 + 34 + 34 @@ -252,14 +252,14 @@ - 64 - 32 + 66 + 34 - 64 - 32 + 66 + 34 @@ -307,7 +307,7 @@ 0 0 386 - 359 + 344 @@ -388,7 +388,7 @@ 0 0 800 - 21 + 20 diff --git a/include/ui/metatileselector.h b/include/ui/metatileselector.h index 2027d9fd..7c978efa 100644 --- a/include/ui/metatileselector.h +++ b/include/ui/metatileselector.h @@ -22,6 +22,7 @@ public: void setTilesets(Tileset*, Tileset*); QList* getSelectedMetatiles(); void setExternalSelection(int, int, QList*); + QPoint getMetatileIdCoordsOnWidget(uint16_t); protected: void mousePressEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*); diff --git a/include/ui/tileseteditortileselector.h b/include/ui/tileseteditortileselector.h index bd92ebfb..43eb1fbc 100644 --- a/include/ui/tileseteditortileselector.h +++ b/include/ui/tileseteditortileselector.h @@ -24,6 +24,7 @@ public: void setTileFlips(bool, bool); QList getSelectedTiles(); void setExternalSelection(int, int, QList); + QPoint getTileCoordsOnWidget(uint16_t); protected: void mousePressEvent(QGraphicsSceneMouseEvent*); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index bd9899a9..e1b4fdab 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -683,6 +683,12 @@ void MainWindow::currentMetatilesSelectionChanged() { ui->graphicsView_currentMetatileSelection->setFixedSize(editor->scene_current_metatile_selection_item->pixmap().width() + 2, editor->scene_current_metatile_selection_item->pixmap().height() + 2); ui->graphicsView_currentMetatileSelection->setSceneRect(0, 0, editor->scene_current_metatile_selection_item->pixmap().width(), editor->scene_current_metatile_selection_item->pixmap().height()); + + QPoint size = editor->metatile_selector_item->getSelectionDimensions(); + if (size.x() == 1 && size.y() == 1) { + QPoint pos = editor->metatile_selector_item->getMetatileIdCoordsOnWidget(editor->metatile_selector_item->getSelectedMetatiles()->at(0)); + ui->scrollArea_2->ensureVisible(pos.x(), pos.y()); + } } void MainWindow::on_mapList_activated(const QModelIndex &index) diff --git a/src/ui/metatileselector.cpp b/src/ui/metatileselector.cpp index 5c8c8bfc..6c2a7617 100644 --- a/src/ui/metatileselector.cpp +++ b/src/ui/metatileselector.cpp @@ -145,3 +145,10 @@ QPoint MetatileSelector::getMetatileIdCoords(uint16_t metatileId) { : metatileId - Project::getNumMetatilesPrimary() + this->primaryTileset->metatiles->length(); return QPoint(index % this->numMetatilesWide, index / this->numMetatilesWide); } + +QPoint MetatileSelector::getMetatileIdCoordsOnWidget(uint16_t metatileId) { + QPoint pos = getMetatileIdCoords(metatileId); + pos.rx() = (pos.x() * this->cellWidth) + (this->cellWidth / 2); + pos.ry() = (pos.y() * this->cellHeight) + (this->cellHeight / 2); + return pos; +} diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 56adc6a5..fe741d54 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -75,7 +75,7 @@ void TilesetEditor::refresh() { this->ui->graphicsView_Tiles->setFixedSize(this->tileSelector->pixmap().width() + 2, this->tileSelector->pixmap().height() + 2); this->ui->graphicsView_Metatiles->setSceneRect(0, 0, this->metatileSelector->pixmap().width() + 2, this->metatileSelector->pixmap().height() + 2); this->ui->graphicsView_Metatiles->setFixedSize(this->metatileSelector->pixmap().width() + 2, this->metatileSelector->pixmap().height() + 2); - this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width(), this->selectedTilePixmapItem->pixmap().height()); + this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width() + 2, this->selectedTilePixmapItem->pixmap().height() + 2); } void TilesetEditor::initMetatileSelector() @@ -119,7 +119,7 @@ void TilesetEditor::initSelectedTileItem() { this->selectedTileScene = new QGraphicsScene; this->drawSelectedTiles(); this->ui->graphicsView_selectedTile->setScene(this->selectedTileScene); - this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width(), this->selectedTilePixmapItem->pixmap().height()); + this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width() + 2, this->selectedTilePixmapItem->pixmap().height() + 2); } void TilesetEditor::drawSelectedTiles() { @@ -145,7 +145,7 @@ void TilesetEditor::drawSelectedTiles() { this->selectedTilePixmapItem = new QGraphicsPixmapItem(QPixmap::fromImage(selectionImage)); this->selectedTileScene->addItem(this->selectedTilePixmapItem); - this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width(), this->selectedTilePixmapItem->pixmap().height()); + this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width() + 2, this->selectedTilePixmapItem->pixmap().height() + 2); } void TilesetEditor::initMetatileLayersItem() { @@ -234,7 +234,17 @@ void TilesetEditor::onMetatileLayerSelectionChanged(QPoint selectionOrigin, int } } } - this->tileSelector->setExternalSelection(width, height, tiles); + + if (width == 1 && height == 1) { + this->tileSelector->select(static_cast(tiles[0].tile)); + ui->spinBox_paletteSelector->setValue(tiles[0].palette); + QPoint pos = tileSelector->getTileCoordsOnWidget(static_cast(tiles[0].tile)); + ui->scrollArea_Tiles->ensureVisible(pos.x(), pos.y()); + } + else { + this->tileSelector->setExternalSelection(width, height, tiles); + } + this->metatileLayersItem->clearLastModifiedCoords(); } diff --git a/src/ui/tileseteditortileselector.cpp b/src/ui/tileseteditortileselector.cpp index 3bdf6bca..8a5e9576 100644 --- a/src/ui/tileseteditortileselector.cpp +++ b/src/ui/tileseteditortileselector.cpp @@ -162,3 +162,10 @@ QPoint TilesetEditorTileSelector::getTileCoords(uint16_t tile) { return QPoint(tile % this->numTilesWide, tile / this->numTilesWide); } + +QPoint TilesetEditorTileSelector::getTileCoordsOnWidget(uint16_t tile) { + QPoint pos = getTileCoords(tile); + pos.rx() = (pos.x() * this->cellWidth) + (this->cellWidth / 2); + pos.ry() = (pos.y() * this->cellHeight) + (this->cellHeight / 2); + return pos; +}