Fix crash when reducing tileset metatiles past current selection

This commit is contained in:
GriffinR 2020-06-30 03:34:14 -04:00 committed by huderlem
parent 1747a4bf2e
commit 16f7373816
3 changed files with 5 additions and 4 deletions

View file

@ -17,6 +17,7 @@ public:
void select(uint16_t metatileId); void select(uint16_t metatileId);
void setTilesets(Tileset*, Tileset*); void setTilesets(Tileset*, Tileset*);
uint16_t getSelectedMetatile(); uint16_t getSelectedMetatile();
void updateSelectedMetatile();
protected: protected:
void mousePressEvent(QGraphicsSceneMouseEvent*); void mousePressEvent(QGraphicsSceneMouseEvent*);
@ -30,7 +31,6 @@ private:
Tileset *secondaryTileset = nullptr; Tileset *secondaryTileset = nullptr;
uint16_t selectedMetatile; uint16_t selectedMetatile;
int numMetatilesWide; int numMetatilesWide;
void updateSelectedMetatile();
uint16_t getMetatileId(int x, int y); uint16_t getMetatileId(int x, int y);
QPoint getMetatileIdCoords(uint16_t); QPoint getMetatileIdCoords(uint16_t);
bool shouldAcceptEvent(QGraphicsSceneMouseEvent*); bool shouldAcceptEvent(QGraphicsSceneMouseEvent*);

View file

@ -650,6 +650,7 @@ void TilesetEditor::on_actionChange_Metatiles_Count_triggered()
this->secondaryTileset->metatiles->append(metatile); this->secondaryTileset->metatiles->append(metatile);
} }
this->metatileSelector->updateSelectedMetatile();
this->refresh(); this->refresh();
this->hasUnsavedChanges = true; this->hasUnsavedChanges = true;
} }

View file

@ -54,6 +54,9 @@ void TilesetEditorMetatileSelector::updateSelectedMetatile() {
uint16_t metatileId = this->getMetatileId(origin.x(), origin.y()); uint16_t metatileId = this->getMetatileId(origin.x(), origin.y());
if (Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset)) if (Tileset::metatileIsValid(metatileId, this->primaryTileset, this->secondaryTileset))
this->selectedMetatile = metatileId; this->selectedMetatile = metatileId;
else
this->selectedMetatile = 0;
emit selectedMetatileChanged(this->selectedMetatile);
} }
uint16_t TilesetEditorMetatileSelector::getSelectedMetatile() { uint16_t TilesetEditorMetatileSelector::getSelectedMetatile() {
@ -78,7 +81,6 @@ void TilesetEditorMetatileSelector::mousePressEvent(QGraphicsSceneMouseEvent *ev
if (!shouldAcceptEvent(event)) return; if (!shouldAcceptEvent(event)) return;
SelectablePixmapItem::mousePressEvent(event); SelectablePixmapItem::mousePressEvent(event);
this->updateSelectedMetatile(); this->updateSelectedMetatile();
emit selectedMetatileChanged(this->selectedMetatile);
} }
void TilesetEditorMetatileSelector::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { void TilesetEditorMetatileSelector::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
@ -86,14 +88,12 @@ void TilesetEditorMetatileSelector::mouseMoveEvent(QGraphicsSceneMouseEvent *eve
SelectablePixmapItem::mouseMoveEvent(event); SelectablePixmapItem::mouseMoveEvent(event);
this->updateSelectedMetatile(); this->updateSelectedMetatile();
emit hoveredMetatileChanged(this->selectedMetatile); emit hoveredMetatileChanged(this->selectedMetatile);
emit selectedMetatileChanged(this->selectedMetatile);
} }
void TilesetEditorMetatileSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { void TilesetEditorMetatileSelector::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
if (!shouldAcceptEvent(event)) return; if (!shouldAcceptEvent(event)) return;
SelectablePixmapItem::mouseReleaseEvent(event); SelectablePixmapItem::mouseReleaseEvent(event);
this->updateSelectedMetatile(); this->updateSelectedMetatile();
emit selectedMetatileChanged(this->selectedMetatile);
} }
void TilesetEditorMetatileSelector::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { void TilesetEditorMetatileSelector::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {